query.bindValue("author", session.getValueFactory().createValue("author1")); validateQuery() .useNoIndexes() .rowCount(1) .hasNodesAtPaths("/book1") final List<String> expectedPaths = new ArrayList<>(Arrays.asList("/book1", "/book2")); validateQuery() .useNoIndexes() .rowCount(2) .onEachRow(new ValidateQuery.Predicate() {
validateQuery().rowCount(1L).useNoIndexes().validate(query, query.execute()); validateQuery().rowCount(1L).useNoIndexes().validate(query, query.execute()); validateQuery().rowCount(2L).useNoIndexes().validate(query, query.execute()); validateQuery().rowCount(2L).useNoIndexes().validate(query, query.execute());
validateQuery().useNoIndexes().rowCount(3L).validate(query, query.execute());
validateQuery().rowCount(0L).useNoIndexes().validate(query, query.execute()); validateQuery().rowCount(1L).useNoIndexes().validate(query, query.execute());
@Test public void shouldUseSingleColumnNodePathIndexInQueryAgainstSameNodeType() throws Exception { registerValueIndex("pathIndex", "nt:unstructured", "Node path index", "*", "jcr:path", PropertyType.PATH); // print = true; // Add a node that uses this type ... Node book1 = session().getRootNode().addNode("myFirstBook"); book1.addMixin("mix:title"); book1.setProperty("jcr:title", "The Title"); Node book2 = session().getRootNode().addNode("mySecondBook"); book2.addMixin("mix:title"); book2.setProperty("jcr:title", "A Different Title"); Node other = book2.addNode("chapter"); other.setProperty("propA", "a value for property A"); other.setProperty("jcr:title", "The Title"); session.save(); // Issues a query that should NOT use this index because direct lookup by path is lower cost ... Query query = jcrSql2Query("SELECT * FROM [nt:unstructured] WHERE [jcr:path] = '/myFirstBook'"); validateQuery().rowCount(1L).useIndex("NodeByPath").considerIndex("pathIndex").validate(query, query.execute()); // Issues a query that should NOT use this index ... query = jcrSql2Query("SELECT * FROM [nt:unstructured] WHERE [jcr:path] LIKE '/my%Book'"); validateQuery().rowCount(2L).useNoIndexes().validate(query, query.execute()); // Issues some queries that should use this index ... query = jcrSql2Query("SELECT * FROM [nt:unstructured] WHERE [jcr:path] > '/mySecondBook'"); validateQuery().rowCount(1L).useIndex("pathIndex").validate(query, query.execute()); query = jcrSql2Query("SELECT * FROM [nt:unstructured] WHERE PATH() > '/mySecondBook'"); validateQuery().rowCount(1L).useIndex("pathIndex").validate(query, query.execute()); }
@Test @FixFor( "MODE-2583 ") public void shouldNotUseIndexesWhichHaveBeenRemovedFromConfiguration() throws Exception { // clean the indexes TestingUtil.waitUntilFolderCleanedUp("target/startup_test_indexes"); RepositoryConfiguration configuration = startRunStop(this::addNodeAndAssertIndexUsed, "config/repo-config-persistent-local-indexes.json"); MutableDocument configDoc = configuration.edit().asMutableDocument(); configDoc.remove(RepositoryConfiguration.FieldName.INDEXES); TestingUtil.waitUntilFolderCleanedUp("target/startup_test_indexes"); startRunStop(repository -> { JcrSession session = repository.login(); // force a re-index of the entire workspace session.getWorkspace().reindex(); //then check that still only 1 node is returned String sql = "select [jcr:path] from [nt:unstructured] where [jcr:name] = 'testRoot'"; Query query = session.getWorkspace().getQueryManager().createQuery(sql, Query.JCR_SQL2); ValidateQuery.validateQuery().rowCount(1).useNoIndexes().validate(query, query.execute()); session.logout(); }, new RepositoryConfiguration(configDoc, "updated_config")); }