use of org.bboxdb.storage.entity.JoinedTuple in project bboxdb by jnidzwetzki.
the class ContinuousBoundingBoxClientQuery method fetchAndSendNextTuples.
@Override
public void fetchAndSendNextTuples(final short packageSequence) throws IOException, PackageEncodeException {
try {
long sendTuplesInThisPage = 0;
clientConnectionHandler.writeResultPackage(new MultipleTupleStartResponse(packageSequence));
while (queryActive) {
if (sendTuplesInThisPage >= tuplesPerPage) {
clientConnectionHandler.writeResultPackage(new PageEndResponse(packageSequence));
clientConnectionHandler.flushPendingCompressionPackages();
return;
}
// Send next tuple or wait
final Tuple tuple = tupleQueue.take();
final JoinedTuple joinedTuple = new JoinedTuple(tuple, requestTable.getFullname());
clientConnectionHandler.writeResultTuple(packageSequence, joinedTuple);
totalSendTuples++;
sendTuplesInThisPage++;
}
// All tuples are send
clientConnectionHandler.writeResultPackage(new MultipleTupleEndResponse(packageSequence));
clientConnectionHandler.flushPendingCompressionPackages();
} catch (InterruptedException e) {
logger.debug("Got interrupted excetion");
close();
Thread.currentThread().interrupt();
}
}
use of org.bboxdb.storage.entity.JoinedTuple in project bboxdb by jnidzwetzki.
the class StreamClientQuery method fetchAndSendNextTuples.
/* (non-Javadoc)
* @see org.bboxdb.network.server.ClientQuery#fetchAndSendNextTuples(short)
*/
@Override
public void fetchAndSendNextTuples(final short packageSequence) throws IOException, PackageEncodeException {
long sendTuplesInThisPage = 0;
clientConnectionHandler.writeResultPackage(new MultipleTupleStartResponse(packageSequence));
while (!isDataExhausted()) {
if (activeOperatorIterator == null) {
setupNewIterator();
}
// Unable to set up a new iterator
if (activeOperatorIterator == null) {
break;
}
while (activeOperatorIterator.hasNext()) {
// Handle page end
if (pageResult == true && sendTuplesInThisPage >= tuplesPerPage) {
clientConnectionHandler.writeResultPackage(new PageEndResponse(packageSequence));
clientConnectionHandler.flushPendingCompressionPackages();
return;
}
// Send next tuple
final JoinedTuple tuple = activeOperatorIterator.next();
clientConnectionHandler.writeResultTuple(packageSequence, tuple);
totalSendTuples++;
sendTuplesInThisPage++;
}
closeIteratorNE();
}
// All tuples are send
clientConnectionHandler.writeResultPackage(new MultipleTupleEndResponse(packageSequence));
clientConnectionHandler.flushPendingCompressionPackages();
}
use of org.bboxdb.storage.entity.JoinedTuple in project bboxdb by jnidzwetzki.
the class JoinedTupleResponse method decodePackage.
/**
* Decode the encoded package into a object
*
* @param encodedPackage
* @return
* @throws PackageEncodeException
*/
public static JoinedTupleResponse decodePackage(final ByteBuffer encodedPackage) throws PackageEncodeException {
final short requestId = NetworkPackageDecoder.getRequestIDFromResponsePackage(encodedPackage);
final boolean decodeResult = NetworkPackageDecoder.validateResponsePackageHeader(encodedPackage, NetworkConst.RESPONSE_TYPE_JOINED_TUPLE);
if (decodeResult == false) {
throw new PackageEncodeException("Unable to decode package");
}
final List<String> tupleStoreNames = new ArrayList<>();
final List<Tuple> tuples = new ArrayList<>();
final int numberOfTuples = encodedPackage.getInt();
for (int i = 0; i < numberOfTuples; i++) {
final TupleAndTable tupleAndTable = NetworkTupleEncoderDecoder.decode(encodedPackage);
tupleStoreNames.add(tupleAndTable.getTable());
tuples.add(tupleAndTable.getTuple());
}
final JoinedTuple joinedTuple = new JoinedTuple(tuples, tupleStoreNames);
if (encodedPackage.remaining() != 0) {
throw new PackageEncodeException("Some bytes are left after encoding: " + encodedPackage.remaining());
}
return new JoinedTupleResponse(requestId, joinedTuple);
}
use of org.bboxdb.storage.entity.JoinedTuple in project bboxdb by jnidzwetzki.
the class JoinedTupleListFuture method createSimpleIterator.
@Override
protected Iterator<JoinedTuple> createSimpleIterator() {
final List<JoinedTuple> allTuples = getListWithAllResults();
final EntityDuplicateTracker entityDuplicateTracker = new EntityDuplicateTracker();
final Iterator<JoinedTuple> iterator = allTuples.iterator();
while (iterator.hasNext()) {
final JoinedTuple nextElement = iterator.next();
if (entityDuplicateTracker.isElementAlreadySeen(nextElement)) {
iterator.remove();
}
}
return allTuples.iterator();
}
use of org.bboxdb.storage.entity.JoinedTuple in project bboxdb by jnidzwetzki.
the class TestQueryProcessing method testBBoxQuery3.
/**
* Simple BBox query - across multiple tables on disk
* @throws StorageManagerException
* @throws InterruptedException
* @throws RejectedException
* @throws IOException
*/
@Test(timeout = 60000)
public void testBBoxQuery3() throws StorageManagerException, InterruptedException, RejectedException, IOException {
final TupleStoreManager storageManager = storageRegistry.getTupleStoreManager(TABLE_1);
final Tuple tuple1 = new Tuple("1", new BoundingBox(1.0, 2.0, 1.0, 2.0), "value".getBytes());
final Tuple tuple2 = new Tuple("2", new BoundingBox(1.5, 2.5, 1.5, 2.5), "value2".getBytes());
final Tuple tuple3 = new Tuple("1", new BoundingBox(1.0, 2.0, 1.0, 2.0), "value1".getBytes());
storageManager.put(tuple1);
storageManager.flush();
storageManager.put(tuple2);
storageManager.flush();
storageManager.put(tuple3);
storageManager.flush();
final BoundingBox queryBoundingBox = new BoundingBox(0.0, 5.0, 0.0, 5.0);
final Operator spatialIndexReadOperator = new FullTablescanOperator(storageManager);
final Operator queryPlan = new BoundingBoxSelectOperator(queryBoundingBox, spatialIndexReadOperator);
final Iterator<JoinedTuple> iterator = queryPlan.iterator();
final List<JoinedTuple> resultList = Lists.newArrayList(iterator);
final List<Tuple> resultTupleList = resultList.stream().map(t -> t.convertToSingleTupleIfPossible()).collect(Collectors.toList());
queryPlan.close();
Assert.assertEquals(2, resultList.size());
Assert.assertFalse(resultTupleList.contains(tuple1));
Assert.assertTrue(resultTupleList.contains(tuple2));
Assert.assertTrue(resultTupleList.contains(tuple3));
}
Aggregations