Author: thomasm
Date: Tue Apr 23 08:23:33 2019
New Revision: 1857996

URL: http://svn.apache.org/viewvc?rev=1857996&view=rev
Log:
OAK-7256 When query with OR is divided into union of queries, options (like 
index tag) are not passed into subqueries

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java
    
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java?rev=1857996&r1=1857995&r2=1857996&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryImpl.java
 Tue Apr 23 08:23:33 2019
@@ -1425,6 +1425,7 @@ public class QueryImpl implements Query
         u.setExplain(explain);
         u.setMeasure(measure);
         u.setInternal(isInternal);
+        u.setQueryOptions(queryOptions);
         return u;
     }
     
@@ -1448,7 +1449,10 @@ public class QueryImpl implements Query
             this.settings,
             this.stats);
         copy.explain = this.explain;
+        copy.measure = this.measure;
+        copy.isInternal = this.isInternal;
         copy.distinct = this.distinct;
+        copy.queryOptions = this.queryOptions;
         
         return copy;        
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java?rev=1857996&r1=1857995&r2=1857996&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/UnionQueryImpl.java
 Tue Apr 23 08:23:33 2019
@@ -416,6 +416,10 @@ public class UnionQueryImpl implements Q
         right.verifyNotPotentiallySlow();
     }
     
+    public Query[] getChildren() {
+        return new Query[] { left, right };
+    }
+    
     public QueryExecutionStats getQueryExecutionStats() {
         return left.getQueryExecutionStats();
     }

Modified: 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java?rev=1857996&r1=1857995&r2=1857996&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java
 Tue Apr 23 08:23:33 2019
@@ -276,6 +276,21 @@ public class SQL2OptimiseQueryTest exten
         assertEquals(expected,  optimized);
     }
     
+    @Test
+    public void optimizeKeepsQueryOptions() throws ParseException {
+        SQL2Parser parser = SQL2ParserTest.createTestSQL2Parser(
+                getMappings(), getNodeTypes(), qeSettings);
+        Query original;
+        String statement = "select * from [nt:unstructured] as [c] " + 
+                "where [a]=1 or [b]=2 option(index tag x)";
+        original = parser.parse(statement, false);
+        assertNotNull(original);
+        UnionQueryImpl alt = (UnionQueryImpl) original.buildAlternativeQuery();
+        for(Query c : alt.getChildren()) {
+            assertEquals("x", ((QueryImpl) c).getQueryOptions().indexTag);
+        }
+    }
+    
     private NamePathMapper getMappings() {
         return new NamePathMapperImpl(
             new LocalNameMapper(root, QueryEngine.NO_MAPPINGS));


Reply via email to