This is an automated email from the ASF dual-hosted git repository.

thomasm pushed a commit to branch OAK-12057
in repository https://gitbox.apache.org/repos/asf/jackrabbit-oak.git


The following commit(s) were added to refs/heads/OAK-12057 by this push:
     new e8a9d63c25 OAK-12057 - Select same plan with or without LIMIT option 
(update test case)
e8a9d63c25 is described below

commit e8a9d63c25d9e35fcfcf968527797457b566f371
Author: Thomas Mueller <[email protected]>
AuthorDate: Wed Feb 4 15:15:05 2026 +0100

    OAK-12057 - Select same plan with or without LIMIT option (update test case)
---
 .../jackrabbit/oak/IndexCostEvaluationTest.java    | 115 ++++++++++++---------
 1 file changed, 67 insertions(+), 48 deletions(-)

diff --git 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/IndexCostEvaluationTest.java 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/IndexCostEvaluationTest.java
index 7f096cfc2a..fa79c2a0bd 100644
--- 
a/oak-jcr/src/test/java/org/apache/jackrabbit/oak/IndexCostEvaluationTest.java
+++ 
b/oak-jcr/src/test/java/org/apache/jackrabbit/oak/IndexCostEvaluationTest.java
@@ -17,10 +17,11 @@
 package org.apache.jackrabbit.oak;
 
 import ch.qos.logback.classic.Level;
-import org.apache.jackrabbit.oak.api.ContentRepository;
-import org.apache.jackrabbit.oak.api.ContentSession;
+import org.apache.jackrabbit.api.JackrabbitRepository;
+import org.apache.jackrabbit.api.JackrabbitSession;
 import org.apache.jackrabbit.oak.commons.junit.LogCustomizer;
 import org.apache.jackrabbit.oak.jcr.Jcr;
+import org.apache.jackrabbit.oak.jcr.query.QueryImpl;
 import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexPlan;
 import org.apache.jackrabbit.oak.query.QueryEngineSettings;
 import org.apache.jackrabbit.oak.query.index.FilterImpl;
@@ -28,7 +29,6 @@ import org.apache.jackrabbit.oak.spi.query.Cursor;
 import org.apache.jackrabbit.oak.spi.query.Filter;
 import org.apache.jackrabbit.oak.spi.query.QueryIndex;
 import org.apache.jackrabbit.oak.spi.query.QueryIndexProvider;
-import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider;
 import org.apache.jackrabbit.oak.spi.state.NodeState;
 import org.jetbrains.annotations.NotNull;
 import org.junit.After;
@@ -37,61 +37,68 @@ import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.TemporaryFolder;
 
+import javax.jcr.Repository;
+import javax.jcr.SimpleCredentials;
 import java.io.File;
-import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
-import static javax.jcr.query.Query.JCR_SQL2;
 import static org.junit.Assert.assertTrue;
 
 public class IndexCostEvaluationTest {
     @Rule
     public TemporaryFolder temporaryFolder = new TemporaryFolder(new 
File("target"));
 
-    private ContentSession session = null;
-    private LogCustomizer logCollector;
+    private Repository repository = null;
+    private JackrabbitSession session = null;
+    private LogCustomizer custom;
 
     @Before
     public void before() throws Exception {
-        logCollector = LogCustomizer
+
+
+        TestIndexProvider testProvider = new TestIndexProvider();
+        TestIndexProvider2 testProvider2 = new TestIndexProvider2();
+        TestIndexProvider3 testProvider3 = new TestIndexProvider3();
+
+        Jcr jcr = new Jcr()
+                .with((QueryIndexProvider) testProvider)
+                .with((QueryIndexProvider) testProvider2)
+                .with((QueryIndexProvider) testProvider3);
+
+        repository = jcr.createRepository();
+        custom = LogCustomizer
                 .forLogger(
                         "org.apache.jackrabbit.oak.query.QueryImpl")
                 .enable(Level.DEBUG).create();
-        logCollector.starting();
-        double luceneMinCost = 2.2;
-        double elasticMinCost = 2.1;
-        TestIndexProvider testProvider = new TestIndexProvider("test-index", 
luceneMinCost);
-        TestIndexProvider testProvider2 = new TestIndexProvider("test-index2", 
luceneMinCost);
-        TestIndexProvider testProvider3 = new TestIndexProvider("test-index3", 
elasticMinCost);
-
-        Jcr jcr = new Jcr(new Oak(), false)
-                .with(new OpenSecurityProvider())
-                .with(new InitialContent())
-                .with(testProvider)
-                .with(testProvider2)
-                .with(testProvider3);
-
-        ContentRepository repository = jcr.createContentRepository();
-        session = repository.login(null, null);
+        custom.starting();
+
+        session = (JackrabbitSession) repository.login(new 
SimpleCredentials("admin", "admin".toCharArray()));
+        session.getRootNode();
     }
 
+
     @After
-    public void after() throws IOException {
-        session.close();
-        logCollector.finished();
+    public void after() {
+        custom.finished();
+        session.logout();
+        if (repository instanceof JackrabbitRepository) {
+            ((JackrabbitRepository) repository).shutdown();
+        }
     }
 
     // In cases where two indexes have same min cost i.e. both indexes are on 
par, we don't skip cost evaluation
     // even of cost from previous index is less than min cost of new index.
     @Test
     public void costEvaluationTest() throws Exception {
-        String query = "SELECT * FROM [rep:Authorizable] WHERE 
[rep:principalName] = 'anonymous'";
-        session.getLatestRoot().getQueryEngine().executeQuery(query, JCR_SQL2, 
1, 0, null, null);
+
+        // run some non-trival query so that all indexes get a chance to reply
+        session.getWorkspace().getQueryManager().
+            createQuery("select * from [nt:base] where [abc] = 1", 
QueryImpl.JCR_SQL2).execute();
 
         boolean evaluationContinueLogPresent = false;
         boolean evaluationSkipLogPresent = false;
-        for (String log : logCollector.getLogs()) {
+        for (String log : custom.getLogs()) {
             if (log.equals("minCost: 2.1 of index :test-index2 > best Cost: 
2.0 from index: test-index, but both indexes have same minimum cost - cost 
evaluation will continue")) {
                 evaluationContinueLogPresent = true;
             }
@@ -103,12 +110,8 @@ public class IndexCostEvaluationTest {
         assertTrue(evaluationSkipLogPresent);
     }
 
-    private static class TestIndexProvider implements QueryIndexProvider {
-        private final TestIndex index;
-
-        public TestIndexProvider(String indexName, double minimumCost) {
-            this.index = new TestIndex(indexName, minimumCost);
-        }
+    private class TestIndexProvider implements QueryIndexProvider {
+        TestIndex index = new TestIndex();
 
         @Override
         public @NotNull List<? extends QueryIndex> getQueryIndexes(NodeState 
nodeState) {
@@ -116,19 +119,35 @@ public class IndexCostEvaluationTest {
         }
     }
 
-    private static class TestIndex implements QueryIndex, 
QueryIndex.AdvancedQueryIndex {
-
-        private final String name;
-        private final double minimumCost;
+    private class TestIndexProvider2 extends TestIndexProvider {
+        public TestIndexProvider2() {
+            this.index = new TestIndex() {
+                public String getIndexName() {
+                    return "test-index2";
+                }
+            };
+        }
+    }
 
-        public TestIndex(String indexName, double minimumCost) {
-            this.name = indexName;
-            this.minimumCost = minimumCost;
+    private class TestIndexProvider3 extends TestIndexProvider {
+        public TestIndexProvider3() {
+            this.index = new TestIndex() {
+                public String getIndexName() {
+                    return "test-index3";
+                }
+
+                public double getMinimumCost() {
+                    return PropertyIndexPlan.COST_OVERHEAD + 0.11;
+                }
+            };
         }
+    }
+
+    private class TestIndex implements QueryIndex, 
QueryIndex.AdvancedQueryIndex {
 
         @Override
         public double getMinimumCost() {
-            return minimumCost;
+            return PropertyIndexPlan.COST_OVERHEAD + 0.1;
         }
 
         @Override
@@ -148,15 +167,15 @@ public class IndexCostEvaluationTest {
 
         @Override
         public String getIndexName() {
-            return name;
+            return "test-index";
         }
 
         @Override
         public List<IndexPlan> getPlans(Filter filter, List<OrderEntry> 
sortOrder, NodeState rootState) {
             IndexPlan.Builder b = new IndexPlan.Builder();
             Filter f = new FilterImpl(null, "SELECT * FROM [nt:file]", new 
QueryEngineSettings());
-            IndexPlan plan1 = 
b.setEstimatedEntryCount(10).setPlanName("testIndexPlan1").setFilter(f).build();
-            List<IndexPlan> indexList = new ArrayList<>();
+            IndexPlan plan1 = 
b.setEstimatedEntryCount(1).setPlanName("testIndexPlan1").setFilter(f).build();
+            List<IndexPlan> indexList = new ArrayList<IndexPlan>();
 
             indexList.add(plan1);
             return indexList;
@@ -172,4 +191,4 @@ public class IndexCostEvaluationTest {
             return null;
         }
     }
-}
+}
\ No newline at end of file

Reply via email to