Search in sources :

Example 1 with KVIndex

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);
        }
    }
}
Also used : IndexCursor(com.questdb.store.IndexCursor) Rnd(com.questdb.std.Rnd) IntLongPriorityQueue(com.questdb.std.IntLongPriorityQueue) KVIndex(com.questdb.store.KVIndex) AbstractTest(com.questdb.test.tools.AbstractTest) Test(org.junit.Test)

Example 2 with KVIndex

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);
    }
}
Also used : Partition(com.questdb.store.Partition) JournalException(com.questdb.std.ex.JournalException) IndexCursor(com.questdb.store.IndexCursor) KVIndex(com.questdb.store.KVIndex) FixedColumn(com.questdb.store.FixedColumn)

Example 3 with KVIndex

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);
    }
}
Also used : Partition(com.questdb.store.Partition) JournalException(com.questdb.std.ex.JournalException) IndexCursor(com.questdb.store.IndexCursor) JournalRuntimeException(com.questdb.common.JournalRuntimeException) KVIndex(com.questdb.store.KVIndex) FixedColumn(com.questdb.store.FixedColumn)

Example 4 with KVIndex

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);
    }
}
Also used : Partition(com.questdb.store.Partition) JournalException(com.questdb.std.ex.JournalException) IndexCursor(com.questdb.store.IndexCursor) JournalRuntimeException(com.questdb.common.JournalRuntimeException) KVIndex(com.questdb.store.KVIndex) FixedColumn(com.questdb.store.FixedColumn)

Example 5 with KVIndex

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;
}
Also used : JournalException(com.questdb.std.ex.JournalException) JournalRuntimeException(com.questdb.common.JournalRuntimeException) KVIndex(com.questdb.store.KVIndex)

Aggregations

KVIndex (com.questdb.store.KVIndex)13 JournalException (com.questdb.std.ex.JournalException)12 JournalRuntimeException (com.questdb.common.JournalRuntimeException)9 IndexCursor (com.questdb.store.IndexCursor)9 Partition (com.questdb.store.Partition)8 FixedColumn (com.questdb.store.FixedColumn)3 VariableColumn (com.questdb.store.VariableColumn)2 IntLongPriorityQueue (com.questdb.std.IntLongPriorityQueue)1 Rnd (com.questdb.std.Rnd)1 AbstractTest (com.questdb.test.tools.AbstractTest)1 Test (org.junit.Test)1