@Override public int propertyKey( int offset ) { return query[offset].propertyKeyId(); }
private static int[] getPropertyIds( IndexQuery[] queries ) { int[] propertyIds = new int[queries.length]; for ( int i = 0; i < queries.length; i++ ) { propertyIds[i] = queries[i].propertyKeyId(); } return propertyIds; }
private static boolean isInvalidQuery( int labelId, IndexQuery[] queries ) { boolean invalidQuery = labelId == TokenRead.NO_TOKEN; for ( IndexQuery query : queries ) { int propertyKeyId = query.propertyKeyId(); invalidQuery = invalidQuery || propertyKeyId == TokenRead.NO_TOKEN; } return invalidQuery; }
private static IndexQuery[] getReorderedIndexQueries( int[] indexPropertyIds, IndexQuery[] queries ) { IndexQuery[] orderedQueries = new IndexQuery[queries.length]; for ( int i = 0; i < indexPropertyIds.length; i++ ) { int propertyKeyId = indexPropertyIds[i]; for ( IndexQuery query : queries ) { if ( query.propertyKeyId() == propertyKeyId ) { orderedQueries[i] = query; break; } } } return orderedQueries; }
int propertyKeyId = predicate.propertyKeyId(); Value value = accessor.getNodePropertyValue( nodeId, propertyKeyId ); if ( !predicate.acceptsValue( value ) )
private ResourceIterator<Node> nodesByLabelAndProperty( KernelTransaction transaction, int labelId, IndexQuery query ) { Statement statement = transaction.acquireStatement(); Read read = transaction.dataRead(); if ( query.propertyKeyId() == TokenRead.NO_TOKEN || labelId == TokenRead.NO_TOKEN ) { statement.close(); return emptyResourceIterator(); } IndexReference index = transaction.schemaRead().index( labelId, query.propertyKeyId() ); if ( index != IndexReference.NO_INDEX ) { // Ha! We found an index - let's use it to find matching nodes try { NodeValueIndexCursor cursor = transaction.cursors().allocateNodeValueIndexCursor(); read.nodeIndexSeek( index, cursor, IndexOrder.NONE, false, query ); return new NodeCursorResourceIterator<>( cursor, statement, this::newNodeProxy ); } catch ( KernelException e ) { // weird at this point but ignore and fallback to a label scan } } return getNodesByLabelAndPropertyWithoutIndex( statement, labelId, query ); }
private boolean acceptByStoreFiltering( long reference, int storeLookups, Value[] values ) { // Initialize the property cursor scan read.singleNode( reference, node ); if ( !node.next() ) { // This node doesn't exist, therefore it cannot be accepted property.close(); return false; } node.properties( property ); while ( storeLookups > 0 && property.next() ) { for ( int i = 0; i < filters.length; i++ ) { IndexQuery filter = filters[i]; if ( filter != null && (values == null || values[i] == NO_VALUE) && property.propertyKey() == filter.propertyKeyId() ) { if ( !filter.acceptsValueAt( property ) ) { return false; } storeLookups--; } } } return storeLookups == 0; }
if ( propertyCursor.propertyKey() == query.propertyKeyId() )
private static int[] getPropertyIds( IndexQuery[] queries ) { int[] propertyIds = new int[queries.length]; for ( int i = 0; i < queries.length; i++ ) { propertyIds[i] = queries[i].propertyKeyId(); } return propertyIds; }
private static boolean isInvalidQuery( int labelId, IndexQuery[] queries ) { boolean invalidQuery = labelId == TokenRead.NO_TOKEN; for ( IndexQuery query : queries ) { int propertyKeyId = query.propertyKeyId(); invalidQuery = invalidQuery || propertyKeyId == TokenRead.NO_TOKEN; } return invalidQuery; }
@Override public int propertyKey( int offset ) { return query[offset].propertyKeyId(); }
private static IndexQuery[] getReorderedIndexQueries( int[] indexPropertyIds, IndexQuery[] queries ) { IndexQuery[] orderedQueries = new IndexQuery[queries.length]; for ( int i = 0; i < indexPropertyIds.length; i++ ) { int propertyKeyId = indexPropertyIds[i]; for ( IndexQuery query : queries ) { if ( query.propertyKeyId() == propertyKeyId ) { orderedQueries[i] = query; break; } } } return orderedQueries; }
int propertyKeyId = predicate.propertyKeyId(); Value value = accessor.getNodePropertyValue( nodeId, propertyKeyId ); if ( !predicate.acceptsValue( value ) )
private ResourceIterator<Node> nodesByLabelAndProperty( KernelTransaction transaction, int labelId, IndexQuery query ) { Statement statement = transaction.acquireStatement(); Read read = transaction.dataRead(); if ( query.propertyKeyId() == TokenRead.NO_TOKEN || labelId == TokenRead.NO_TOKEN ) { statement.close(); return emptyResourceIterator(); } IndexReference index = transaction.schemaRead().index( labelId, query.propertyKeyId() ); if ( index != IndexReference.NO_INDEX ) { // Ha! We found an index - let's use it to find matching nodes try { NodeValueIndexCursor cursor = transaction.cursors().allocateNodeValueIndexCursor(); read.nodeIndexSeek( index, cursor, IndexOrder.NONE, false, query ); return new NodeCursorResourceIterator<>( cursor, statement, this::newNodeProxy ); } catch ( KernelException e ) { // weird at this point but ignore and fallback to a label scan } } return getNodesByLabelAndPropertyWithoutIndex( statement, labelId, query ); }
if ( propertyCursor.propertyKey() == query.propertyKeyId() )
private boolean acceptByStoreFiltering( long reference, int storeLookups, Value[] values ) { // Initialize the property cursor scan read.singleNode( reference, node ); if ( !node.next() ) { // This node doesn't exist, therefore it cannot be accepted property.close(); return false; } node.properties( property ); while ( storeLookups > 0 && property.next() ) { for ( int i = 0; i < filters.length; i++ ) { IndexQuery filter = filters[i]; if ( filter != null && (values == null || values[i] == NO_VALUE) && property.propertyKey() == filter.propertyKeyId() ) { if ( !filter.acceptsValueAt( property ) ) { return false; } storeLookups--; } } } return storeLookups == 0; }