@Override NodeValueIndexCursor queryExists( KernelTransaction ktx ) throws KernelException { return indexQuery( ktx, indexDescriptor, IndexQuery.exists( stringPropId1 ) ); }
@Override NodeValueIndexCursor queryExists( KernelTransaction ktx ) throws KernelException { return indexQuery( ktx, indexDescriptor, IndexQuery.exists( numberPropId1 ) ); }
@Test void scanQueryReachSearcher() throws Exception { IndexReader simpleIndexReader = getUniqueSimpleReader(); simpleIndexReader.query( IndexQuery.exists( 1 ) ); verify( indexSearcher ).search( any( MatchAllDocsQuery.class ), any( DocValuesCollector.class ) ); }
private void doTestShouldHandleLargeAmountOfDuplicates( Object value ) throws Exception { List<IndexEntryUpdate<?>> updates = new ArrayList<>(); List<Long> nodeIds = new ArrayList<>(); for ( long i = 0; i < 1000; i++ ) { nodeIds.add( i ); updates.add( add( i, descriptor.schema(), value ) ); } updateAndCommit( updates ); assertThat( query( exists( 1 ) ), equalTo( nodeIds ) ); }
@Test public void shouldScanAllValues() throws Exception { // GIVEN List<IndexEntryUpdate<?>> updates = updates( valueSet1 ); updateAndCommit( updates ); Long[] allNodes = valueSet1.stream().map( x -> x.nodeId ).toArray( Long[]::new ); // THEN int propertyKeyId = descriptor.schema().getPropertyId(); List<Long> result = query( IndexQuery.exists( propertyKeyId ) ); assertThat( result, containsInAnyOrder( allNodes ) ); }
@Test public void scanOverPartitions() throws Exception { PartitionedIndexReader indexReader = createPartitionedReaderFromReaders(); IndexQuery.ExistsPredicate query = IndexQuery.exists( 1 ); when( indexReader1.query( query ) ).thenReturn( PrimitiveLongResourceCollections.iterator( null, 1 ) ); when( indexReader2.query( query ) ).thenReturn( PrimitiveLongResourceCollections.iterator( null, 2 ) ); when( indexReader3.query( query ) ).thenReturn( PrimitiveLongResourceCollections.iterator( null, 3 ) ); LongSet results = PrimitiveLongCollections.asSet( indexReader.query( query ) ); verifyResult( results ); }
@Test void defaultQueryImplementationMustThrowForUnsupportedIndexOrder() { // Given IndexReader indexReader = stubIndexReader(); // Then String expectedMessage = String.format( "This reader only have support for index order %s. Provided index order was %s.", IndexOrder.NONE, IndexOrder.ASCENDING ); UnsupportedOperationException operationException = assertThrows( UnsupportedOperationException.class, () -> indexReader.query( new SimpleNodeValueClient(), IndexOrder.ASCENDING, false, IndexQuery.exists( 1 ) ) ); assertEquals( expectedMessage, operationException.getMessage() ); }
@Test public void testIndexSeekAndScan() throws Exception { updateAndCommit( asList( add( 1L, descriptor.schema(), "a" ), add( 2L, descriptor.schema(), "a" ), add( 3L, descriptor.schema(), "b" ) ) ); assertThat( query( exact( 1, "a" ) ), equalTo( asList( 1L, 2L ) ) ); assertThat( query( exists( 1 ) ), equalTo( asList( 1L, 2L, 3L ) ) ); }
@Test public void testIndexSeekAndScan() throws Exception { updateAndCommit( asList( add( 1L, descriptor.schema(), "a" ), add( 2L, descriptor.schema(), "b" ), add( 3L, descriptor.schema(), "c" ) ) ); assertThat( query( exact( 1, "a" ) ), equalTo( singletonList( 1L ) ) ); assertThat( query( IndexQuery.exists( 1 ) ), equalTo( asList( 1L, 2L, 3L ) ) ); } }
private void testIndexScanAndSeekExactWithExact( Value a, Value b ) throws Exception { updateAndCommit( asList( add( 1L, descriptor.schema(), a, a ), add( 2L, descriptor.schema(), b, b ), add( 3L, descriptor.schema(), a, b ) ) ); assertThat( query( exact( 0, a ), exact( 1, a ) ), equalTo( singletonList( 1L ) ) ); assertThat( query( exact( 0, b ), exact( 1, b ) ), equalTo( singletonList( 2L ) ) ); assertThat( query( exact( 0, a ), exact( 1, b ) ), equalTo( singletonList( 3L ) ) ); assertThat( query( exists( 1 ) ), equalTo( asList( 1L, 2L, 3L ) ) ); }
private void testIndexSeekExactWithExists( Value a, Value b ) throws Exception { Assume.assumeTrue( "Assume support for granular composite queries", testSuite.supportsGranularCompositeQueries() ); updateAndCommit( asList( add( 1L, descriptor.schema(), a, Values.of( 1 ) ), add( 2L, descriptor.schema(), b, Values.of( "abv" ) ), add( 3L, descriptor.schema(), a, Values.of( false ) ) ) ); assertThat( query( exact( 0, a ), exists( 1 ) ), equalTo( asList( 1L, 3L ) ) ); assertThat( query( exact( 0, b ), exists( 1 ) ), equalTo( singletonList( 2L ) ) ); }
@Test public void shouldReturnNoEntriesForExistsPredicateForEmptyIndex() throws Exception { // when IndexReader reader = accessor.newReader(); LongIterator result = query( reader, IndexQuery.exists( 0 ) ); // then long[] actual = PrimitiveLongCollections.asArray( result ); assertEquals( 0, actual.length ); }
@Test public void shouldReturnAllEntriesForExistsPredicate() throws Exception { // given IndexEntryUpdate<IndexDescriptor>[] updates = someUpdatesSingleType(); processAll( updates ); // when IndexReader reader = accessor.newReader(); LongIterator result = query( reader, IndexQuery.exists( 0 ) ); // then assertEntityIdHits( extractEntityIds( updates, alwaysTrue() ), result ); }
@Test public void shouldRejectNodeNotInUse() { // given NodeValueClientFilter filter = initializeFilter( IndexQuery.exists( 12 ) ); // when filter.next(); assertFalse( filter.acceptNode( 17, null ) ); filter.close(); // then assertEvents( initialize(), Event.NEXT, Event.CLOSE ); }
@Test public void shouldRejectNodeWithNoProperties() { // given node.withNode( 17 ); NodeValueClientFilter filter = initializeFilter( IndexQuery.exists( 12 ) ); // when filter.next(); assertFalse( filter.acceptNode( 17, null ) ); filter.close(); // then assertEvents( initialize(), Event.NEXT, Event.CLOSE ); }
@Test public void shouldNotAcceptNodeWithoutMatchingProperty() { // given node.withNode( 17, new long[0], genericMap( 7, stringValue( "wrong" ) ) ); NodeValueClientFilter filter = initializeFilter( IndexQuery.exists( 12 ) ); // when filter.next(); assertFalse( filter.acceptNode( 17, null ) ); filter.close(); // then assertEvents( initialize(), Event.NEXT, Event.CLOSE ); }
@Test public void shouldAcceptNodeWithMatchingProperty() { // given node.withNode( 17, new long[0], genericMap( 12, stringValue( "hello" ) ) ); NodeValueClientFilter filter = initializeFilter( IndexQuery.exists( 12 ) ); // when filter.next(); assertTrue( filter.acceptNode( 17, null ) ); filter.close(); // then assertEvents( initialize(), Event.NEXT, new Event.Node( 17, null ), Event.CLOSE ); }
@Test public void testExists() { ExistsPredicate p = IndexQuery.exists( propId ); assertTrue( test( p, "string" ) ); assertTrue( test( p, 1 ) ); assertTrue( test( p, 1.0 ) ); assertTrue( test( p, true ) ); assertTrue( test( p, new long[]{1L} ) ); assertTrue( test( p, Values.pointValue( CoordinateReferenceSystem.WGS84, 12.3, 45.6 ) ) ); assertFalse( test( p, null ) ); }