/** * Set the values of the index row based on a QueryKey. * * @param queryKey Query key * @param tableSchema Table schema * @return The current builder instance */ public IndexRowKeyBuilder withQueryKey(QueryKey queryKey, TableSchema tableSchema) { checkNotNull(queryKey, "queryKey must not be null."); checkNotNull(tableSchema, "tableSchema must not be null."); this.fields = queryKey.getKeys(); this.indexName = queryKey.getIndexName(); this.tableSchema = tableSchema; return this; }
@Override public Scanner indexScanExact(QueryKey key) { final TableSchema schema = store.getSchema(tableId); long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey row = IndexRowKeyBuilder .newBuilder(tableId, indexId) .withQueryKey(key, schema) .withSortOrder(SortOrder.Ascending) .build(); // Scan is [start, end) : increment to set end to next possible row return createScannerForRange(row.encode(), incrementRowKey(row.encode())); }
@Test public void testDeserializeValidSerializedSchemaAndIndexName() { final QueryKey key = new QueryKey(TEST_INDEX, QueryType.EXACT_KEY, ImmutableMap.<String, ByteBuffer>of()); final QueryKey actualKey = QueryKey.deserialize(key.serialize()); assertEquals(key.getIndexName(), actualKey.getIndexName()); assertEquals(key.getQueryType(), actualKey.getQueryType()); assertEquals(key.getKeys(), actualKey.getKeys()); } }
@Override public Scanner descendingIndexScan(QueryKey key) { long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey startRow = IndexRowKeyBuilder.newBuilder(tableId, indexId) .withSortOrder(SortOrder.Descending) .build(); IndexRowKey endRow = IndexRowKeyBuilder.newBuilder(tableId, indexId + 1) .withSortOrder(SortOrder.Descending) .build(); return createScannerForRange(startRow.encode(), endRow.encode()); }
@Override public Scanner ascendingIndexScan(QueryKey key) { long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey startRow = IndexRowKeyBuilder .newBuilder(tableId, indexId) .withSortOrder(SortOrder.Ascending) .build(); IndexRowKey endRow = IndexRowKeyBuilder .newBuilder(tableId, indexId + 1) .withSortOrder(SortOrder.Ascending) .build(); return createScannerForRange(startRow.encode(), endRow.encode()); }
@Override public Scanner ascendingIndexScanAt(QueryKey key) { final TableSchema schema = store.getSchema(tableId); long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey startRow = IndexRowKeyBuilder .newBuilder(tableId, indexId) .withQueryKey(key, schema) .withSortOrder(SortOrder.Ascending) .build(); IndexRowKey endRow = IndexRowKeyBuilder .newBuilder(tableId, indexId + 1) .withSortOrder(SortOrder.Ascending) .build(); return createScannerForRange(startRow.encode(), endRow.encode()); }
@Override public Scanner descendingIndexScanAt(QueryKey key) { final TableSchema schema = store.getSchema(tableId); long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey startRow = IndexRowKeyBuilder .newBuilder(tableId, indexId) .withQueryKey(key, schema) .withSortOrder(SortOrder.Descending) .build(); IndexRowKey endRow = IndexRowKeyBuilder .newBuilder(tableId, indexId + 1) .withSortOrder(SortOrder.Descending) .build(); return createScannerForRange(startRow.encode(), endRow.encode()); }
@Override public Scanner ascendingIndexScanAfter(QueryKey key) { final TableSchema schema = store.getSchema(tableId); long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey startRow = IndexRowKeyBuilder .newBuilder(tableId, indexId) .withQueryKey(key, schema) .withSortOrder(SortOrder.Ascending) .build(); IndexRowKey endRow = IndexRowKeyBuilder.newBuilder(tableId, indexId + 1) .withSortOrder(SortOrder.Ascending) .build(); return createScannerForRange(incrementRowKey(startRow.encode()), endRow.encode()); }
@Override public Scanner descendingIndexScanBefore(QueryKey key) { final TableSchema schema = store.getSchema(tableId); long indexId = store.getIndexId(tableId, key.getIndexName()); IndexRowKey startRow = IndexRowKeyBuilder .newBuilder(tableId, indexId) .withQueryKey(key, schema) .withSortOrder(SortOrder.Descending) .build(); IndexRowKey endRow = IndexRowKeyBuilder .newBuilder(tableId, indexId + 1) .withSortOrder(SortOrder.Descending) .build(); return createScannerForRange(incrementRowKey(startRow.encode()), endRow.encode()); }