@Override protected boolean acceptValue( Value[] values ) { for ( int i = 0; i < values.length; i++ ) { if ( !filter[i].acceptsValue( values[i] ) ) { return false; } } return true; }
@Override boolean acceptValues( Value[] values ) { for ( int i = 0; i < values.length; i++ ) { if ( !filters[i].acceptsValue( values[i] ) ) { return false; } } return true; } }
public boolean acceptsValueAt( PropertyCursor property ) { return acceptsValue( property.propertyValue() ); }
private boolean test( IndexQuery p, Object x ) { return p.acceptsValue( x instanceof Value ? (Value)x : Values.of( x ) ); } }
@Override public boolean acceptNode( long reference, Value... values ) { //noinspection SimplifiableIfStatement if ( values.length > 1 ) { return false; } return filter.acceptsValue( values[0] ) && iter.acceptNode( reference, values ); }
else if ( !filter.acceptsValue( values[i] ) )
if ( !predicate.acceptsValue( value ) )
private static AddedAndRemoved indexUpdatesForScanAndFilter( ReadableTransactionState txState, IndexDescriptor descriptor, IndexQuery filter, IndexOrder indexOrder ) { Map<ValueTuple,? extends LongDiffSets> updates = getUpdates( txState, descriptor, indexOrder ); if ( updates == null ) { return EMPTY_ADDED_AND_REMOVED; } MutableLongList added = LongLists.mutable.empty(); MutableLongSet removed = LongSets.mutable.empty(); for ( Map.Entry<ValueTuple,? extends LongDiffSets> entry : updates.entrySet() ) { ValueTuple key = entry.getKey(); if ( filter == null || filter.acceptsValue( key.getOnlyValue() ) ) { LongDiffSets diffSet = entry.getValue(); added.addAll( diffSet.getAdded() ); removed.addAll( diffSet.getRemoved() ); } } return new AddedAndRemoved( indexOrder == IndexOrder.DESCENDING ? added.asReversed() : added, removed ); }
IndexQuery[] predicates = new IndexQuery[]{mock( IndexQuery.class )}; Predicate<String> filter = string -> string.contains( "a" ); when( predicates[0].acceptsValue( any( Value.class ) ) ).then( invocation -> filter.test( ((TextValue)invocation.getArgument( 0 )).stringValue() ) ); FilteringNativeHitIterator<StringIndexKey,NativeIndexValue> iterator = new FilteringNativeHitIterator<>( cursor, new ArrayList<>(), predicates ); List<Long> result = new ArrayList<>();
private static AddedWithValuesAndRemoved indexUpdatesWithValuesScanAndFilter( ReadableTransactionState txState, IndexDescriptor descriptor, IndexQuery filter, IndexOrder indexOrder ) { Map<ValueTuple,? extends LongDiffSets> updates = getUpdates( txState, descriptor, indexOrder ); if ( updates == null ) { return EMPTY_ADDED_AND_REMOVED_WITH_VALUES; } MutableList<NodeWithPropertyValues> added = Lists.mutable.empty(); MutableLongSet removed = LongSets.mutable.empty(); for ( Map.Entry<ValueTuple,? extends LongDiffSets> entry : updates.entrySet() ) { ValueTuple key = entry.getKey(); if ( filter == null || filter.acceptsValue( key.getOnlyValue() ) ) { Value[] values = key.getValues(); LongDiffSets diffSet = entry.getValue(); diffSet.getAdded().each( nodeId -> added.add( new NodeWithPropertyValues( nodeId, values ) ) ); removed.addAll( diffSet.getRemoved() ); } } return new AddedWithValuesAndRemoved( indexOrder == IndexOrder.DESCENDING ? added.asReversed() : added, removed ); }
IndexQuery[] predicates = new IndexQuery[]{mock( IndexQuery.class )}; Predicate<String> filter = string -> string.contains( "a" ); when( predicates[0].acceptsValue( any( Value.class ) ) ).then( invocation -> filter.test( ((TextValue)invocation.getArgument( 0 )).stringValue() ) ); FilteringNativeHitIndexProgressor<StringIndexKey,NativeIndexValue> progressor = new FilteringNativeHitIndexProgressor<>( cursor, valueClient, new ArrayList<>(), predicates );
/** * Run the Value[] from a particular entityId through the list of IndexQuery[] predicates to see if they all accept the value. */ private boolean passesFilter( long entityId, IndexQuery[] predicates ) { if ( predicates.length == 1 && predicates[0] instanceof IndexQuery.ExistsPredicate ) { return true; } Value[] values = committedValues.get( entityId ); for ( int i = 0; i < values.length; i++ ) { IndexQuery predicate = predicates[i]; if ( predicate.valueGroup() == ValueGroup.GEOMETRY || predicate.valueGroup() == ValueGroup.GEOMETRY_ARRAY || (predicate.valueGroup() == ValueGroup.NUMBER && !testSuite.supportFullValuePrecisionForNumbers()) ) { if ( !predicates[i].acceptsValue( values[i] ) ) { return false; } } // else there's no functional need to let values, other than those of GEOMETRY type, to pass through the IndexQuery filtering // avoiding this filtering will have testing be more strict in what index readers returns. } return true; }
@Override protected boolean acceptValue( Value[] values ) { for ( int i = 0; i < values.length; i++ ) { if ( !filter[i].acceptsValue( values[i] ) ) { return false; } } return true; }
@Override boolean acceptValues( Value[] values ) { for ( int i = 0; i < values.length; i++ ) { if ( !filters[i].acceptsValue( values[i] ) ) { return false; } } return true; } }
public boolean acceptsValueAt( PropertyCursor property ) { return acceptsValue( property.propertyValue() ); }
else if ( !filter.acceptsValue( values[i] ) )
if ( !predicate.acceptsValue( value ) )
private static AddedAndRemoved indexUpdatesForScanAndFilter( ReadableTransactionState txState, IndexDescriptor descriptor, IndexQuery filter, IndexOrder indexOrder ) { Map<ValueTuple,? extends LongDiffSets> updates = getUpdates( txState, descriptor, indexOrder ); if ( updates == null ) { return EMPTY_ADDED_AND_REMOVED; } MutableLongList added = LongLists.mutable.empty(); MutableLongSet removed = LongSets.mutable.empty(); for ( Map.Entry<ValueTuple,? extends LongDiffSets> entry : updates.entrySet() ) { ValueTuple key = entry.getKey(); if ( filter == null || filter.acceptsValue( key.getOnlyValue() ) ) { LongDiffSets diffSet = entry.getValue(); added.addAll( diffSet.getAdded() ); removed.addAll( diffSet.getRemoved() ); } } return new AddedAndRemoved( indexOrder == IndexOrder.DESCENDING ? added.asReversed() : added, removed ); }
private static AddedWithValuesAndRemoved indexUpdatesWithValuesScanAndFilter( ReadableTransactionState txState, IndexDescriptor descriptor, IndexQuery filter, IndexOrder indexOrder ) { Map<ValueTuple,? extends LongDiffSets> updates = getUpdates( txState, descriptor, indexOrder ); if ( updates == null ) { return EMPTY_ADDED_AND_REMOVED_WITH_VALUES; } MutableList<NodeWithPropertyValues> added = Lists.mutable.empty(); MutableLongSet removed = LongSets.mutable.empty(); for ( Map.Entry<ValueTuple,? extends LongDiffSets> entry : updates.entrySet() ) { ValueTuple key = entry.getKey(); if ( filter == null || filter.acceptsValue( key.getOnlyValue() ) ) { Value[] values = key.getValues(); LongDiffSets diffSet = entry.getValue(); diffSet.getAdded().each( nodeId -> added.add( new NodeWithPropertyValues( nodeId, values ) ) ); removed.addAll( diffSet.getRemoved() ); } } return new AddedWithValuesAndRemoved( indexOrder == IndexOrder.DESCENDING ? added.asReversed() : added, removed ); }