@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()); } }
/** * 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())); }
public static QueryKey deserialize(byte[] serializedIndexKey) { checkNotNull(serializedIndexKey); return new QueryKey(Util.deserializeAvroObject(serializedIndexKey, reader)); }
QueryKey key = QueryKey.deserialize(indexKeys); QueryType queryType = key.getQueryType(); switch (queryType) { case EXACT_KEY:
@Override public String toString() { final Objects.ToStringHelper toString = Objects.toStringHelper(this.getClass()); toString.add("Index", avroQueryKey.getIndexName()) .add("Type", avroQueryKey.getQueryType()); for (final Map.Entry<String, ByteBuffer> entry : getKeys().entrySet()) { toString.add("Key", format("%s: %s", entry.getKey(), entry.getValue())); } return toString.toString(); } }
@Test(expected = NullPointerException.class) public void testDeserializeInvalidSerializedSchema() { QueryKey.deserialize(null); }
@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()); }
@Test(expected = IllegalArgumentException.class) public void testIndexSchemaCreationEmptyIndexName() { new QueryKey("", QueryType.EXACT_KEY, ImmutableMap.<String, ByteBuffer>of()); }
@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()); }
@Test(expected = NullPointerException.class) public void testCreationInvalidQueryFields() { new QueryKey(TEST_INDEX, QueryType.EXACT_KEY, null); }
@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()); }
@Test(expected = NullPointerException.class) public void testCreationInvalidQueryType() { new QueryKey(TEST_INDEX, null, ImmutableMap.<String, ByteBuffer>of()); }
@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()); }
@Test(expected = NullPointerException.class) public void testCreationInvalidIndexName() { new QueryKey(null, QueryType.EXACT_KEY, ImmutableMap.<String, ByteBuffer>of()); }
@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()); }
@Override public QueryKey next() { return new QueryKey(indices.next(), queryTypes.next(), rows.next().getRecords()); } }
@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()); }
IndexSchema indexSchema = schema.getIndexSchema(indexName); QueryKey key = new QueryKey(indexName, QueryType.EXACT_KEY, row.getRecords()); Scanner scanner = t.indexScanExact(key);