|
3.1.1: 2012-03-29 | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectnet.sf.basedb.core.AbstractBatcher
net.sf.basedb.core.SpotBatcher
public class SpotBatcher
Batcher class for per-spot intensity values for bioassaysets. This batcher is normally used when a new bioassayset has been created that uses a different cube and/or layer to store it's data than the source bioassayset.
Code example: Swap the intensities of channel 1 and 2
// Get source bioassayset
DbControl dc = ...
BioAssaySet source = ...
// Create new transformation and bioassayset to hold the
// new intensities, we use the same data cube as the source
// but a different layer
Transformation t = source.newTransformation();
dc.saveItem(t);
BioAssaySet bas = t.newProduct(null, "new", true);
dc.saveItem(bas);
// Create a query that selects the data of
// the source bioassayset
DynamicSpotQuery query = source.getSpotData();
// Execute the query, and use the batcher to swap the
// intensities
SpotBatcher batcher = bas.getSpotBatcher();
DynamicResultIterator result = query.iterate(dc);
int column = result.getIndex(VirtualColumn.COLUMN.getName());
int position = result.getIndex(VirtualColumn.POSITION.getName());
int ch1 = result.getIndex(VirtualColumn.channel(1).getName());
int ch2 = result.getIndex(VirtualColumn.channel(2).getName());
while (result.hasNext())
{
SqlResult r = result.next();
batcher.insert(r.getShort(column), r.getInt(position),
r.getFloat(ch2), r.getFloat(ch1));
}
// Close and commit
batcher.close();
dc.commit();
BioAssaySet.getSpotBatcher()| Field Summary | |
|---|---|
private BioAssaySet |
bioAssaySet
The bioassayset this batcher inserts data for. |
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 int |
numChannels
The number of channels used in the raw data type of the experiment where the bioassayset belongs. |
private int |
queuedInsertCount
The number of queued inserts. |
private PreparedStatement |
spotSql
The statement that inserts spot data. |
private String |
spotSqlStatement
The SQL string for the spotSql 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 | |
|---|---|
SpotBatcher(DbControl dc,
BioAssaySet bioAssaySet)
Create a new spot batcher for a bioassayset. |
|
| Method Summary | |
|---|---|
private String |
buildInsertSelectSql(String selectSql)
Build the INSERT INTO ... |
private void |
buildSpotSql()
Builds the insert SQL statement. |
void |
flush()
Flush the batcher and send all remaining items in memory to the database. |
int |
insert(AbstractSqlQuery query)
Insert spot intensities using a query. |
void |
insert(short column,
int position,
float... intensities)
Insert intensities for a given column/position coordinate. |
(package private) void |
onBeforeClose()
Update disk usage 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 |
|---|
private final BioAssaySet bioAssaySet
private final int numChannels
private int queuedInsertCount
private int totalInsertCount
private long bytes
private final long bytesPerRow
private PreparedStatement spotSql
INSERT INTO Dynamic#PerSpot (cube, layer, column, position, ch1, ch2, ...) VALUES (cube, layer, ?, ?, ?, ?, ...)
private String spotSqlStatement
spotSql statement.
| Constructor Detail |
|---|
SpotBatcher(DbControl dc,
BioAssaySet bioAssaySet)
| Method Detail |
|---|
public void flush()
throws BaseException
Batcher
BaseException - If there is an errorBatcher.close()
void onBeforeClose()
throws BaseException
onBeforeClose in class AbstractBatcherBaseException
public void insert(short column,
int position,
float... intensities)
throws BaseException
column - The column coordinateposition - The position coordinateintensities - An array holding the intensities for the coordinate,
the length must match the number of channels of the raw data type
InvalidDataException - If the intensities array is null or
of the incorrect length
BaseException - If there is another error
public int insert(AbstractSqlQuery query)
throws BaseException
Internally this method converts the query into a
INSERT INTO ... SELECT ... query, making it very fast,
since the data for each spot 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.
Here is an alternative to the example above:
// Get source bioassayset DbControl dc = ... BioAssaySet source = ... // Create new transformation and bioassayset to hold the // new intensities, we use the same data cube as the source // but a different layer Transformation t = source.newTransformation(); dc.saveItem(t); BioAssaySet bas = t.newProduct(null, "new", true); dc.saveItem(bas); // Create a query that selects the data of // the source bioassayset, swap the order of the channels DynamicSpotQuery query = source.getSpotData(); query.select(Dynamic.select(VirtualColumn.COLUMN)); query.select(Dynamic.select(VirtualColumn.POSITION)); query.select(Dynamic.select(VirtualColumn.channel(2))); query.select(Dynamic.select(VirtualColumn.channel(1))); // Execute the query, and use the batcher to insert the result SpotBatcher batcher = bas.getSpotBatcher(); batcher.insert(query); // Close and commit batcher.close(); dc.commit();
query - The query that selects the data to be inserted
BaseException - If there is an error
private void buildSpotSql()
throws SQLException,
BaseException
SQLException
BaseExceptionBatchUtil.buildInsertSql(VirtualDb, VirtualTable, VirtualColumn[], Object[])
private String buildInsertSelectSql(String selectSql)
throws BaseException
selectSql - The SELECT part of the query
BaseExceptionBatchUtil.buildInsertSelectSql(VirtualDb, VirtualTable, VirtualColumn[], String)
|
3.1.1: 2012-03-29 | ||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||