2.17.2: 2011-06-17

net.sf.basedb.core
Class MappingBatcher

java.lang.Object
  extended by net.sf.basedb.core.AbstractBatcher
      extended by net.sf.basedb.core.MappingBatcher
All Implemented Interfaces:
Batcher

public class MappingBatcher
extends AbstractBatcher

Batcher class for inserting parent mapping information in the dynamic database. This batcher is used to map data cube spots to their parent RawData.

Code example: Dynamic API - Creating a root bioassayset

Version:
2.0
Author:
Nicklas
See Also:
BioAssaySet.getMappingBatcher()
Last modified
$Date: 2009-06-23 11:56:00 +0200 (Tue, 23 Jun 2009) $

Field Summary
private  long bytes
          The number of bytes this batcher has added to the experiment.
private  long bytesPerRow
          The number of bytes used by a single row.
private  DataCube dataCube
          The datacube this batcher inserts data for.
private  boolean noRawMapping
          If the data cube has already received it's data and no raw data can be linked.
private  int queuedInsertCount
          The number of queued inserts.
private  PreparedStatement rawMappingSql
          The statement that inserts the spot/raw data link.
private  String rawMappingSqlStatement
          The SQL string for the rawMappingSql statement.
private  int totalInsertCount
          The total number of inserts done by this batcher.
 
Fields inherited from class net.sf.basedb.core.AbstractBatcher
debugSqlEnabled, logSql
 
Constructor Summary
MappingBatcher(DbControl dc, DataCube dataCube)
          Create a new position batcher for a data cube.
 
Method Summary
private  String buildInsertSelectSql(String selectSql)
          Build the INSERT INTO ...
private  void buildRawMappingSql()
          Builds the insert SQL statement.
 void flush()
          Flush the batcher and send all remaining items in memory to the database.
 int getTotalInsertCount()
          Get the total number of mappings to raw data create by this mapper.
 int insert(AbstractSqlQuery query)
          Insert mapping to raw spots using a query.
 void insert(short column, int position, RawData rawData)
          Link a spot to a raw data.
(package private)  void onBeforeClose()
          Update bytes on data cube and close open SQL statements.
 
Methods inherited from class net.sf.basedb.core.AbstractBatcher
analyzeTable, close, getBatchSize, getDbControl, getSessionControl, isClosed, setBatchSize, setDbControl, updateLastAccess
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

dataCube

private final DataCube dataCube
The datacube this batcher inserts data for.


noRawMapping

private final boolean noRawMapping
If the data cube has already received it's data and no raw data can be linked.


queuedInsertCount

private int queuedInsertCount
The number of queued inserts. Used to check when a flush is needed.


totalInsertCount

private int totalInsertCount
The total number of inserts done by this batcher.


bytes

private long bytes
The number of bytes this batcher has added to the experiment.


bytesPerRow

private final long bytesPerRow
The number of bytes used by a single row.


rawMappingSql

private PreparedStatement rawMappingSql
The statement that inserts the spot/raw data link.
INSERT INTO Dynamic#RawParents (cube, column, position, rawdata_id)
VALUES (cube, ?, ?, ?)


rawMappingSqlStatement

private String rawMappingSqlStatement
The SQL string for the rawMappingSql statement.

Constructor Detail

MappingBatcher

MappingBatcher(DbControl dc,
               DataCube dataCube)
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 Detail

flush

public void flush()
           throws BaseException
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:
Batcher.close()

onBeforeClose

void onBeforeClose()
             throws BaseException
Update bytes on data cube and close open SQL statements.

Overrides:
onBeforeClose in class AbstractBatcher
Throws:
BaseException

insert

public void insert(short column,
                   int position,
                   RawData rawData)
            throws BaseException
Link a spot to a raw data. One spot may be linked to several raw data items.

Parameters:
column - The column coordinate of the spot
position - The position coordinate of the spot
rawData - The raw data object
Throws:
InvalidDataException - If the raw data is null
BaseException - If there is an error

insert

public int insert(AbstractSqlQuery query)
           throws BaseException
Insert mapping to raw spots using a query. The query MUST select data in the following order: column, position, rawDataId

Internally 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

getTotalInsertCount

public int getTotalInsertCount()
Get the total number of mappings to raw data create by this mapper.

Since:
2.2

buildRawMappingSql

private void buildRawMappingSql()
                         throws SQLException,
                                BaseException
Builds the insert SQL statement. Also creates the Dynamic#RawParents table if it doesn't exists.

Throws:
SQLException
BaseException
See Also:
BatchUtil.buildInsertSql(VirtualDb, VirtualTable, VirtualColumn[], Object[])

buildInsertSelectSql

private String buildInsertSelectSql(String selectSql)
                             throws BaseException
Build the INSERT INTO ... SELECT ... statment. Also creates the Dynamic#RawParents table if it doesn't exists.

Parameters:
selectSql - The SELECT part of the query
Throws:
BaseException
See Also:
BatchUtil.buildInsertSelectSql(VirtualDb, VirtualTable, VirtualColumn[], String)

2.17.2: 2011-06-17