You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by th...@apache.org on 2014/01/30 15:03:58 UTC
svn commit: r1562831 - in /jackrabbit/oak/trunk/oak-core/src:
main/java/org/apache/jackrabbit/oak/query/ast/
main/java/org/apache/jackrabbit/oak/spi/query/
test/resources/org/apache/jackrabbit/oak/query/
Author: thomasm
Date: Thu Jan 30 14:03:58 2014
New Revision: 1562831
URL: http://svn.apache.org/r1562831
Log:
OAK-1372 XPath queries with both path and property restrictions are slow (apply the selector condition to the filter)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1562831&r1=1562830&r2=1562831&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Thu Jan 30 14:03:58 2014
@@ -265,6 +265,9 @@ public class SelectorImpl extends Source
FullTextExpression ft = queryConstraint.getFullTextConstraint(this);
f.setFullTextConstraint(ft);
}
+ if (selectorCondition != null) {
+ selectorCondition.restrict(f);
+ }
return f;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java?rev=1562831&r1=1562830&r2=1562831&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/CompositeQueryIndexProvider.java Thu Jan 30 14:03:58 2014
@@ -33,6 +33,16 @@ import com.google.common.collect.Lists;
*/
public class CompositeQueryIndexProvider implements QueryIndexProvider {
+ private final List<QueryIndexProvider> providers;
+
+ private CompositeQueryIndexProvider(List<QueryIndexProvider> providers) {
+ this.providers = providers;
+ }
+
+ public CompositeQueryIndexProvider(QueryIndexProvider... providers) {
+ this(Arrays.asList(providers));
+ }
+
@Nonnull
public static QueryIndexProvider compose(
@Nonnull Collection<QueryIndexProvider> providers) {
@@ -51,16 +61,6 @@ public class CompositeQueryIndexProvider
}
}
- private final List<QueryIndexProvider> providers;
-
- private CompositeQueryIndexProvider(List<QueryIndexProvider> providers) {
- this.providers = providers;
- }
-
- public CompositeQueryIndexProvider(QueryIndexProvider... providers) {
- this(Arrays.asList(providers));
- }
-
@Override @Nonnull
public List<? extends QueryIndex> getQueryIndexes(NodeState nodeState) {
List<QueryIndex> indexes = Lists.newArrayList();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java?rev=1562831&r1=1562830&r2=1562831&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/spi/query/Filter.java Thu Jan 30 14:03:58 2014
@@ -52,9 +52,9 @@ public interface Filter {
/**
* Get the fulltext search conditions, if any.
*
- * @deprecated
* @return the conditions (an empty collection if not used)
*/
+ @Deprecated
Collection<String> getFulltextConditions();
/**
@@ -199,7 +199,7 @@ public interface Filter {
}
buff.append(p.toString());
}
- buff.append(' ');
+ buff.append(')');
return buff.toString();
}
Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt?rev=1562831&r1=1562830&r2=1562831&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/sql2_index.txt Thu Jan 30 14:03:58 2014
@@ -23,7 +23,8 @@
# * new tests are typically be added on top, after the syntax docs
# * use ascii character only
-# property type (value prefix) index
+explain select e.[jcr:path] from [nt:base] as a inner join [nt:base] as b on ischildnode(b, a) inner join [nt:base] as c on ischildnode(c, b) inner join [nt:base] as d on ischildnode(d, c) inner join [nt:base] as e on ischildnode(e, d) where name(a) = 'a' and isdescendantnode(a, '/b') and name(b) = 'c' and name(c) = 'd' and name(d) = 'e' and (e.[type] = '1' or e.[type] = '2' or e.[type] = '3' or e.[type] = '4')
+[nt:base] as [a] /* traverse "/b//*" where (name([a]) = cast('a' as string)) and (isdescendantnode([a], [/b])) */ inner join [nt:base] as [b] /* traverse "/path/from/the/join/selector/*" where name([b]) = cast('c' as string) */ on ischildnode([b], [a]) inner join [nt:base] as [c] /* traverse "/path/from/the/join/selector/*" where name([c]) = cast('d' as string) */ on ischildnode([c], [b]) inner join [nt:base] as [d] /* traverse "/path/from/the/join/selector/*" where name([d]) = cast('e' as string) */ on ischildnode([d], [c]) inner join [nt:base] as [e] /* traverse "/path/from/the/join/selector/*" where ([e].[type] is not null) and ([e].[type] in(cast('1' as string), cast('2' as string), cast('3' as string), cast('4' as string))) */ on ischildnode([e], [d])
explain select excerpt(.) from [nt:resource] where contains(*, 'jackrabbit')
[nt:resource] as [nt:resource] /* traverse "*" where contains([nt:resource].[*], cast('jackrabbit' as string)) */