# Interface TableSink

All Known Subinterfaces:
  `RowPipe, RowStore`

All Known Implementing Classes:
  `ByteStoreRowStore, DiscardRowStore, DiskRowStore, ListRowStore, OnceRowPipe, ProgressBarTableSink, SidewaysRowStore, StreamTableSink`

public interface TableSink
Defines a set of callbacks to consume the information held in a StarTable. This may be used to transmit a table from one place to another in one go (passing a `StarTable` argument may be unsuitable in that it requires the row sequence to be accessible multiple times). Any source which uses this interface must do so in the following sequence:

1. Call `acceptMetadata(StarTable)` once
2. Call `acceptRow(Object[])` once for each row in the table
3. Call `endRows()` once

Implementations are under no obligation to behave sensibly if this sequence is not observed.

Author:
  Mark Taylor

## Method Summary

Modifier and Type
Method
Description
`void`
`acceptMetadata(StarTable meta)`
Takes delivery of a row-less `StarTable` object which defines the metadata of the table to be transmitted.
`void`
`acceptRow(Object[] row)`
Takes delivery of one row of data.
`void`
`endRows()`
Signals that there are no more rows to be transmitted.

## Method Details

### acceptMetadata

void acceptMetadata(StarTable meta) throws TableFormatException
Takes delivery of a row-less `StarTable` object which defines the metadata of the table to be transmitted. If the number of rows that will be transmitted via subsequent calls to `acceptRow` is known, this value should be made available as the row count of `meta` (`StarTable.getRowCount()`); if it is not known, the row count should be -1. However, this object should not attempt to read any of `meta`'s cell data.

The data to be transmitted in subsequent calls of `acceptRow` must match the metadata transmitted in this call in the same way that rows of a StarTable must match its own metadata (number and content clases of columns etc). If this sink cannot dispose of a table corresponding to `meta` then it may throw a TableFormatException - this may be the case if for instance `meta` has columns with types that this sink can't deal with.

Parameters:
  `meta` - table metadata object
Throws:
  `TableFormatException` - if this sink cannot accept table rows matching the given metadata

### acceptRow

void acceptRow(Object[] row) throws IOException
Takes delivery of one row of data. `row` is an array of objects comprising the contents of one row of the table being transmitted. The number and classes of the elements of `row` are described by the metadata object previously accepted.

Parameters:
  `row` - table data row
Throws:
  `IOException`

### endRows

void endRows() throws IOException
Signals that there are no more rows to be transmitted.

Throws:
  `IOException`