private StreamReader selectQueryReader() throws InstantiationException, IllegalAccessException { final ORExpression query = condition.getQueryExpression(); IndexDefinition[] indexDefs = entityDef.getIndexes(); // Index just works with query condition if (indexDefs != null && condition.getQueryExpression()!=null) { List<byte[]> rowkeys = new ArrayList<>(); for (IndexDefinition index : indexDefs) { // Check unique index first if (index.isUnique()) { final IndexDefinition.IndexType type = index.canGoThroughIndex(query, rowkeys); if (!IndexDefinition.IndexType.NON_INDEX.equals(type)) { LOG.info("Selectd query unique index " + index.getIndexName() + " for query: " + condition.getQueryExpression()); return new UniqueIndexStreamReader(index, condition, rowkeys); } } } for (IndexDefinition index : indexDefs) { // Check non-clustered index if (!index.isUnique()) { final IndexDefinition.IndexType type = index.canGoThroughIndex(query, rowkeys); if (!IndexDefinition.IndexType.NON_INDEX.equals(type)) { LOG.info("Selectd query non clustered index " + index.getIndexName() + " for query: " + condition.getQueryExpression().toString()); return new NonClusteredIndexStreamReader(index, condition, rowkeys); } } } } return new GenericEntityScanStreamReader(entityDef, condition, this.prefix); }
private static void checkPrefix(EntityDefinition entityDef) { final Integer entityPrefixHashcode = entityDef.getPrefix().hashCode(); if (entityPrefixMap.containsKey(entityDef.getTable())) { final Map<Integer, EntityDefinition> entityHashMap = entityPrefixMap.get(entityDef.getTable()); if (entityHashMap.containsKey(entityPrefixHashcode) && (!entityDef.equals(entityHashMap.get(entityPrefixHashcode)))) { throw new IllegalArgumentException("Failed to register entity " + entityDef.getClass().getName() + ", because of the prefix hash code conflict! The entity prefix " + entityDef.getPrefix() + " has already been registered by entity service " + entityHashMap.get(entityPrefixHashcode).getService()); } final IndexDefinition[] indexes = entityDef.getIndexes(); if (indexes != null) { for (IndexDefinition index : indexes) { final Integer indexPrefixHashcode = index.getIndexPrefix().hashCode(); if (entityHashMap.containsKey(indexPrefixHashcode)) { throw new IllegalArgumentException("Failed to register entity " + entityDef.getClass().getName() + ", because of the prefix hash code conflict! The index prefix " + index.getIndexPrefix() + " has already been registered by entity " + entityHashMap.get(indexPrefixHashcode).getService()); } final Map<Integer, IndexDefinition> indexHashMap = indexPrefixMap.get(entityDef.getTable()); if (indexHashMap != null && indexHashMap.containsKey(indexPrefixHashcode) && (!index.equals(indexHashMap.get(indexPrefixHashcode)))) { throw new IllegalArgumentException("Failed to register entity " + entityDef.getClass().getName() + ", because of the prefix hash code conflict! The index prefix " + index.getIndexPrefix() + " has already been registered by entity " + indexHashMap.get(indexPrefixHashcode).getEntityDefinition().getService()); } } } } }
public byte[] generateIndexRowkey(TaggedLogAPIEntity entity) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException { if (entity.getClass() != entityDef.getEntityClass()) { throw new IllegalArgumentException("Expected entity class: " + entityDef.getEntityClass().getName() + ", but got class " + entity.getClass().getName()); } final byte[][] indexValues = generateIndexValues(entity); final int[] partitionHashCodes = generatePartitionHashCodes(entity); SortedMap<Integer, Integer> tagMap = null; if (!index.unique()) { // non cluster index tagMap = RowkeyBuilder.generateSortedTagMap(entityDef.getPartitions(), entity.getTags()); } return generateUniqueIndexRowkey(indexValues, partitionHashCodes, tagMap); }
final byte[] indexRowkey = index.generateIndexRowkey(entity); rowkeys.add(indexRowkey);
for(IndexDefinition idef : indexDef){ ObjectNode idn = JsonNodeFactory.instance.objectNode(); idn.put("indexPrefix",idef.getIndexPrefix()); if(idef.getIndex()!=null){ ObjectNode index = JsonNodeFactory.instance.objectNode(); index.put("name",idef.getIndex().name()); index.put("columns",arrayNode(idef.getIndex().columns())); idn.put("index",index);
@Override public InternalLog read() throws IOException { if (entityResults == null) { throw new IllegalArgumentException("entityResults haven't been initialized before reading"); } InternalLog t = null; while (entityResults.length > ++index) { Result r = entityResults[index]; if (r != null) { if (r.getRow() == null) { continue; } t = HBaseInternalLogHelper.parse(indexDef.getEntityDefinition(), r, qualifiers); break; } } return t; }
@Test public void testIndexDefinition() throws InstantiationException, IllegalAccessException { EntityDefinition ed = EntityDefinitionManager .getEntityDefinitionByEntityClass(TestLogAPIEntity.class); if (ed == null) { EntityDefinitionManager.registerEntity(TestLogAPIEntity.class); ed = EntityDefinitionManager.getEntityDefinitionByEntityClass(TestLogAPIEntity.class); } Assert.assertNotNull(ed); IndexDefinition[] indexDefinitions = ed.getIndexes(); Assert.assertNotNull(indexDefinitions); Assert.assertEquals(2, indexDefinitions.length); for (IndexDefinition def : indexDefinitions) { Assert.assertNotNull(def.getIndexName()); Assert.assertNotNull(def.getIndexColumns()); Assert.assertEquals(1, def.getIndexColumns().length); } }
indexPrefixMap.put(table, indexHashMap); indexHashMap.put(index.getIndexPrefix().hashCode(), index);
for (AtomicExpression ae : andExpr.getAtomicExprList()) { final String fieldName = parseEntityAttribute(ae.getKey()); if (fieldName != null && ComparisonOperator.EQUAL.equals(ae.getOp())) { indexfieldMap.put(fieldName, ae.getValue()); indexFieldValues[i] = value.getBytes(); final byte[] rowkey = generateUniqueIndexRowkey(indexFieldValues, partitionValueHashs, null); if (rowkeys != null) { rowkeys.add(rowkey);
public UniqueIndexStreamReader(IndexDefinition indexDef, SearchCondition condition) { super(indexDef, condition, new ArrayList<byte[]>()); final IndexType type = indexDef.canGoThroughIndex(condition.getQueryExpression(), indexRowkeys); if (!IndexType.UNIQUE_INDEX.equals(type)) { throw new IllegalArgumentException("This query can't go through index: " + condition.getQueryExpression()); } }
for (int i = 0; i < inds.length; ++i) { final Index ind = inds[i]; indexDefinitions[i] = new IndexDefinition(ed, ind);
final byte[] indexRowkey = index.generateIndexRowkey(entity); rowkeys.add(indexRowkey);
for(IndexDefinition idef : indexDef){ ObjectNode idn = JsonNodeFactory.instance.objectNode(); idn.put("indexPrefix",idef.getIndexPrefix()); if(idef.getIndex()!=null){ ObjectNode index = JsonNodeFactory.instance.objectNode(); index.put("name",idef.getIndex().name()); index.put("columns",arrayNode(idef.getIndex().columns())); idn.put("index",index);
@Override public InternalLog read() throws IOException { if (entityResults == null) { throw new IllegalArgumentException("entityResults haven't been initialized before reading"); } InternalLog t = null; while (entityResults.length > ++index) { Result r = entityResults[index]; if (r != null) { if (r.getRow() == null) { continue; } t = HBaseInternalLogHelper.parse(indexDef.getEntityDefinition(), r, qualifiers); break; } } return t; }
indexPrefixMap.put(table, indexHashMap); indexHashMap.put(index.getIndexPrefix().hashCode(), index);
for(AtomicExpression ae : andExpr.getAtomicExprList()) { final String fieldName = parseEntityAttribute(ae.getKey()); if(fieldName != null && ComparisonOperator.EQUAL.equals(ae.getOp())){ indexfieldMap.put(fieldName, ae.getValue()); indexFieldValues[i] = value.getBytes(); final byte[] rowkey = generateUniqueIndexRowkey(indexFieldValues, partitionValueHashs, null); if (rowkeys != null) { rowkeys.add(rowkey);
public NonClusteredIndexStreamReader(IndexDefinition indexDef, SearchCondition condition) { super(indexDef, condition, new ArrayList<byte[]>()); final IndexType type = indexDef.canGoThroughIndex(condition.getQueryExpression(), indexRowkeys); if (!IndexType.NON_CLUSTER_INDEX.equals(type)) { throw new IllegalArgumentException("This query can't go through index: " + condition.getQueryExpression()); } }
for (int i = 0; i < inds.length; ++i) { final Index ind = inds[i]; indexDefinitions[i] = new IndexDefinition(ed, ind);
for (IndexDefinition index : indexDefs) { if (index.isUnique()) { final IndexDefinition.IndexType type = index.canGoThroughIndex(query, rowkeys); if (!IndexDefinition.IndexType.NON_INDEX.equals(type)) { LOG.info("Selectd query unique index " + index.getIndexName() + " for query: " + condition.getQueryExpression()); return new UniqueIndexStreamReader(index, condition, rowkeys); if (!index.isUnique()) { final IndexDefinition.IndexType type = index.canGoThroughIndex(query, rowkeys); if (!IndexDefinition.IndexType.NON_INDEX.equals(type)) { LOG.info("Selectd query non clustered index " + index.getIndexName() + " for query: " + condition.getQueryExpression().toString()); return new NonClusteredIndexStreamReader(index, condition, rowkeys);
for (int i = 0; i < indexDefs.length; ++i) { final IndexDefinition indexDef = indexDefs[i]; final byte[] indexRowkey = indexDef.generateIndexRowkey(entity); indexRowkeys.add(indexRowkey);