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));