use of com.questdb.store.KVIndex in project questdb by bluestreak01.
the class IntLongPriorityQueueTest method testIndexSort.
@Test
public void testIndexSort() throws Exception {
final int nStreams = 16;
Rnd rnd = new Rnd();
int totalLen = 0;
try (KVIndex index = new KVIndex(indexFile, totalKeys, totalValues, 1, JournalMode.APPEND, 0, false)) {
for (int i = 0; i < nStreams; i++) {
long[] values = new long[rnd.nextPositiveInt() % 1000];
totalLen += values.length;
for (int j = 0; j < values.length; j++) {
values[j] = rnd.nextPositiveLong() % 100;
}
Arrays.sort(values);
for (int j = 0; j < values.length; j++) {
index.add(i, values[j]);
}
index.commit();
}
long[] expected = new long[totalLen];
int p = 0;
for (int i = 0; i < nStreams; i++) {
IndexCursor c = index.fwdCursor(i);
while (c.hasNext()) {
expected[p++] = c.next();
}
}
Arrays.sort(expected);
IntLongPriorityQueue heap = new IntLongPriorityQueue(nStreams);
IndexCursor[] cursors = new IndexCursor[nStreams];
for (int i = 0; i < nStreams; i++) {
cursors[i] = index.newFwdCursor(i);
if (cursors[i].hasNext()) {
heap.add(i, cursors[i].next());
}
}
p = 0;
while (heap.hasNext()) {
int idx = heap.popIndex();
long v;
if (cursors[idx].hasNext()) {
v = heap.popAndReplace(idx, cursors[idx].next());
} else {
v = heap.popValue();
}
Assert.assertEquals(expected[p++], v);
}
}
}
use of com.questdb.store.KVIndex in project questdb by bluestreak01.
the class KvIndexIntLambdaHeadRowSource method prepareCursor.
@Override
public RowCursor prepareCursor(PartitionSlice slice) {
try {
Partition partition = rec.partition = slice.partition.open();
KVIndex index = partition.getIndexForColumn(columnIndex);
FixedColumn col = partition.fixCol(columnIndex);
long lo = slice.lo - 1;
long hi = slice.calcHi ? partition.size() : slice.hi + 1;
rows.clear();
for (int i = 0, n = keys.size(); i < n; i++) {
IndexCursor c = index.cursor(keys.get(i) & buckets);
while (c.hasNext()) {
long r = rec.rowid = c.next();
if (r > lo && r < hi && col.getInt(r) == keys.get(i) && (filter == null || filter.getBool(rec))) {
rows.add(r);
break;
}
}
}
rows.sort();
cursor = 0;
return this;
} catch (JournalException e) {
throw new JournalRuntimeException(e);
}
}
use of com.questdb.store.KVIndex in project questdb by bluestreak01.
the class KvIndexIntListHeadRowSource method prepareCursor.
@Override
public RowCursor prepareCursor(PartitionSlice slice) {
try {
Partition partition = rec.partition = slice.partition.open();
KVIndex index = partition.getIndexForColumn(columnIndex);
FixedColumn col = partition.fixCol(columnIndex);
long lo = slice.lo - 1;
long hi = slice.calcHi ? partition.size() : slice.hi + 1;
rows.clear();
for (int i = 0, n = values.size(); i < n; i++) {
IndexCursor c = index.cursor(values.get(i) & buckets);
long r = -1;
boolean found = false;
while (c.hasNext()) {
r = rec.rowid = c.next();
if (r > lo && r < hi && col.getInt(r) == values.get(i) && (filter == null || filter.getBool(rec))) {
found = true;
break;
}
}
if (found) {
rows.add(r);
}
}
rows.sort();
keyIndex = 0;
return this;
} catch (JournalException e) {
throw new JournalRuntimeException(e);
}
}
use of com.questdb.store.KVIndex in project questdb by bluestreak01.
the class KvIndexLongListHeadRowSource method prepareCursor.
@Override
public RowCursor prepareCursor(PartitionSlice slice) {
try {
Partition partition = rec.partition = slice.partition.open();
KVIndex index = partition.getIndexForColumn(columnIndex);
FixedColumn col = partition.fixCol(columnIndex);
long lo = slice.lo - 1;
long hi = slice.calcHi ? partition.size() : slice.hi + 1;
rows.clear();
for (int i = 0, n = values.size(); i < n; i++) {
IndexCursor c = index.cursor((int) (values.get(i) & buckets));
long r = -1;
boolean found = false;
while (c.hasNext()) {
r = rec.rowid = c.next();
if (r > lo && r < hi && col.getLong(r) == values.get(i) && (filter == null || filter.getBool(rec))) {
found = true;
break;
}
}
if (found) {
rows.add(r);
}
}
rows.sort();
keyIndex = 0;
return this;
} catch (JournalException e) {
throw new JournalRuntimeException(e);
}
}
use of com.questdb.store.KVIndex in project questdb by bluestreak01.
the class KvIndexLongLookupRowSource method prepareCursor.
@Override
public RowCursor prepareCursor(PartitionSlice slice) {
try {
column = slice.partition.fixCol(columnIndex);
KVIndex index = slice.partition.getIndexForColumn(columnIndex);
this.indexCursor = newCursor ? index.newFwdCursor(key) : index.fwdCursor(key);
this.lo = slice.lo - 1;
this.hi = slice.calcHi ? slice.partition.open().size() : slice.hi + 1;
} catch (JournalException e) {
throw new JournalRuntimeException(e);
}
return this;
}
Aggregations