@Override public void query( IndexProgressor.NodeValueClient client, IndexOrder indexOrder, boolean needsValues, IndexQuery... query ) throws IndexNotApplicableKernelException { delegate.query( client, indexOrder, needsValues, query ); }
@Override public long countIndexedNodes( long nodeId, int[] propertyKeyIds, Value... propertyValues ) { return actual.countIndexedNodes( nodeId, propertyKeyIds, propertyValues ); }
@Override public void close() { if ( indexReaders != null ) { for ( IndexReader indexReader : indexReaders.values() ) { indexReader.close(); } indexReaders.clear(); } } }
private LongIterator queryIndexOrEmpty( IndexReader reader, IndexQuery[] query ) { final LongIterator indexedNodeIds; try { indexedNodeIds = reader.query( query ); } catch ( IndexNotApplicableKernelException e ) { throw new RuntimeException( format( "Consistency checking error: index provider does not support exact query %s", Arrays.toString( query ) ), e ); } return reader.hasFullValuePrecision( query ) ? indexedNodeIds : LookupFilter.exactIndexMatches( propertyReader, indexedNodeIds, query ); }
@Test public void canChangeExistingData() throws Exception { // GIVEN updateAndCommit( asList( add( nodeId, value ) ) ); // WHEN updateAndCommit( asList( change( nodeId, value, value2 ) ) ); IndexReader reader = accessor.newReader(); // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader.query( exact( PROP_ID, value2 ) ) ) ); assertEquals( emptySet(), PrimitiveLongCollections.toSet( reader.query( exact( PROP_ID, value ) ) ) ); reader.close(); }
@Override public IndexSampler createSampler() { return actual.createSampler(); }
long[] nodes = PrimitiveLongCollections.asArray( indexReader.query( IndexQuery.exists( 1 ) ) ); assertEquals( affectedNodes, nodes.length ); IndexSampler indexSampler = indexReader.createSampler(); IndexSample sample = indexSampler.sampleIndex(); assertEquals( affectedNodes, sample.indexSize() );
@Override public boolean hasFullValuePrecision( IndexQuery... predicates ) { return actual.hasFullValuePrecision( predicates ); }
@Test public void indexReaderShouldHonorRepeatableReads() throws Exception { // GIVEN updateAndCommit( asList( add( nodeId, value ) ) ); IndexReader reader = accessor.newReader(); // WHEN updateAndCommit( asList( remove( nodeId, value ) ) ); // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader.query( exact( PROP_ID, value ) ) ) ); reader.close(); }
@Override public IndexSampler createSampler() { return delegate.createSampler(); }
@Override public boolean hasFullValuePrecision( IndexQuery... predicates ) { return delegate.hasFullValuePrecision( predicates ); }
@Override public PrimitiveLongResourceIterator query( IndexQuery... predicates ) throws IndexNotApplicableKernelException { return delegate.query( predicates ); }
@Test public void canAddNewData() throws Exception { // WHEN updateAndCommit( asList( add( nodeId, value ), add( nodeId2, value2 ) ) ); IndexReader reader = accessor.newReader(); // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader.query( exact( PROP_ID, value ) ) ) ); reader.close(); }
@Override public long countIndexedNodes( long nodeId, int[] propertyKeyIds, Value... propertyValues ) { return delegate.countIndexedNodes( nodeId, propertyKeyIds, propertyValues ); }
@Before public void setup() throws IndexNotFoundKernelException { when( indexProxy.getDescriptor() ).thenReturn( indexDescriptor ); when( indexProxy.newReader() ).thenReturn( indexReader ); when( indexReader.createSampler() ).thenReturn( indexSampler ); when( indexSampler.sampleIndex() ).thenReturn( new IndexSample( indexSize, indexUniqueValues, indexSize ) ); } }
@Override public void close() { actual.close(); } }
@Override public boolean hasFullValuePrecision( IndexQuery... predicates ) { IndexSlot slot = slotSelector.selectSlot( predicates, IndexQuery::valueGroup ); if ( slot != null ) { return instanceSelector.select( slot ).hasFullValuePrecision( predicates ); } else { // UNKNOWN slot which basically means the EXISTS predicate if ( !(predicates.length == 1 && predicates[0] instanceof ExistsPredicate) ) { throw new IllegalStateException( "Selected IndexReader null for predicates " + Arrays.toString( predicates ) ); } return true; } } }
private PrimitiveLongResourceIterator innerQuery( IndexReader reader, IndexQuery[] predicates ) { try { return reader.query( predicates ); } catch ( IndexNotApplicableKernelException e ) { throw new InnerException( e ); } }
@Test public void canAddNewData() throws Exception { // WHEN updateAndCommit( asList( add( nodeId, values ), add( nodeId2, values2 ) ) ); IndexReader reader = accessor.newReader(); // THEN assertEquals( asSet( nodeId ), PrimitiveLongCollections.toSet( reader .query( exact( PROP_ID1, values[0] ), exact( PROP_ID2, values[1] ) ) ) ); reader.close(); }
@Override public long countIndexedNodes( long nodeId, int[] propertyKeyIds, Value... propertyValues ) { return instanceSelector.select( slotSelector.selectSlot( propertyValues, GROUP_OF ) ).countIndexedNodes( nodeId, propertyKeyIds, propertyValues ); }