Package net.sf.basedb.core
Class PositionBatcher
java.lang.Object
net.sf.basedb.core.AbstractBatcher
net.sf.basedb.core.PositionBatcher
- All Implemented Interfaces:
AutoCloseable
,Batcher
Batcher class for per-position data in the dynamic database. This batcher
is used to insert data that is valid for all positions in a data cube.
Normally this means linking a position to a reporter.
Code example: Dynamic API - Creating a root bioassayset
- Version:
- 2.0
- Author:
- Nicklas
- See Also:
- Last modified
- $Date: 2015-04-21 09:59:42 +0200 (ti, 21 apr 2015) $
-
Field Summary
Modifier and TypeFieldDescriptionprivate long
The number of bytes this batcher has added to the data cube and experiment.private final long
The number of bytes used by a single row.private final DataCube
The datacube this batcher inserts data for.private int
The maximum position number inserted by the batcher.private PreparedStatement
The statement that inserts the position/reporter link.private String
The SQL string for thepositionSql
statement.private int
The number of queued inserts.private int
The total number of inserts done by this batcher.Fields inherited from class net.sf.basedb.core.AbstractBatcher
debugSqlEnabled, logSql
-
Constructor Summary
ConstructorDescriptionPositionBatcher
(DbControl dc, DataCube dataCube) Create a new position batcher for a data cube. -
Method Summary
Modifier and TypeMethodDescriptionprivate String
buildInsertSelectSql
(String selectSql) Build the INSERT INTO ...private void
Builds the insert SQL statement.void
flush()
Flush the batcher and send all remaining items in memory to the database.void
insert
(int position, ReporterData reporter) Link a position to a reporter.int
insert
(AbstractSqlQuery query) Insert position/reporter links using a query.(package private) void
Update bytes and max position on the datacube and close open SQL statements.Methods inherited from class net.sf.basedb.core.AbstractBatcher
analyzeTable, close, getBatchSize, getDbControl, getSessionControl, isClosed, setBatchSize, setDbControl, updateLastAccess
-
Field Details
-
dataCube
The datacube this batcher inserts data for. -
queuedInsertCount
private int queuedInsertCountThe number of queued inserts. Used to check when a flush is needed. -
totalInsertCount
private int totalInsertCountThe total number of inserts done by this batcher. -
maxPosition
private int maxPositionThe maximum position number inserted by the batcher. -
bytes
private long bytesThe number of bytes this batcher has added to the data cube and experiment. -
bytesPerRow
private final long bytesPerRowThe number of bytes used by a single row. -
positionSql
The statement that inserts the position/reporter link.INSERT INTO Dynamic#PerPosition (cube, position, reporter_id) VALUES (cube, ?, ?)
-
positionSqlStatement
The SQL string for thepositionSql
statement.
-
-
Constructor Details
-
PositionBatcher
Create a new position batcher for a data cube. It is assumed that the calling code has checked that the cube is allowed to receive more data (ie. it hasn't been committed to the database).
-
-
Method Details
-
flush
Description copied from interface:Batcher
Flush the batcher and send all remaining items in memory to the database.- Throws:
BaseException
- If there is an error- See Also:
-
onBeforeClose
Update bytes and max position on the datacube and close open SQL statements.- Overrides:
onBeforeClose
in classAbstractBatcher
- Throws:
BaseException
-
insert
Link a position to a reporter.- Parameters:
position
- The position coordinatereporter
- The reporter or null if no reporter is known- Throws:
BaseException
- If there is an error
-
insert
Insert position/reporter links using a query. The query MUST select data in the following order: position, reporterIdInternally this method converts the query into a
INSERT INTO ... SELECT ...
query, making it very fast, since the data for each position doesn't have to be retreived, processed and then inserted one row at a time. It is possible to call this method multiple times with the same or different query.- Parameters:
query
- The query that selects the data to be inserted- Returns:
- int The number of rows inserted
- Throws:
BaseException
- If there is an error
-
buildPositionSql
Builds the insert SQL statement. Also creates the Dynamic#PerPosition table if it doesn't exists. -
buildInsertSelectSql
Build the INSERT INTO ... SELECT ... statment. Also creates the Dynamic#PerPosition table if it doesn't exists.- Parameters:
selectSql
- The SELECT part of the query- Throws:
BaseException
- See Also:
-