Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/NodeStateNodeTypeInfoProvider.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/NodeStateNodeTypeInfoProvider.java (revision 0) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/NodeStateNodeTypeInfoProvider.java (working copy) @@ -0,0 +1,100 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.oak.query; + +import static com.google.common.collect.Sets.newHashSet; +import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN; +import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME; +import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_MIXIN_SUBTYPES; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_NAMED_SINGLE_VALUED_PROPERTIES; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_PRIMARY_SUBTYPES; +import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_SUPERTYPES; + +import java.util.Set; + +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; +import org.apache.jackrabbit.oak.spi.state.NodeState; + +/** + * A nodetype info provider that is based on node states. + */ +public class NodeStateNodeTypeInfoProvider implements NodeTypeInfoProvider { + + private final NodeState types; + + public NodeStateNodeTypeInfoProvider(NodeState baseState) { + this.types = baseState. + getChildNode(JCR_SYSTEM). + getChildNode(JCR_NODE_TYPES); + } + + @Override + public NodeTypeInfo getNodeTypeInfo(String nodeTypeName) { + NodeState type = types.getChildNode(nodeTypeName); + return new NodeStateNodeTypeInfo(type); + } + + static class NodeStateNodeTypeInfo implements NodeTypeInfo { + + private final NodeState type; + + NodeStateNodeTypeInfo(NodeState type) { + this.type = type; + } + + @Override + public boolean exists() { + return type.exists(); + } + + @Override + public String getNodeTypeName() { + return type.getName(JCR_NODETYPENAME); + } + + @Override + public Set getSuperTypes() { + return newHashSet(type.getNames(REP_SUPERTYPES)); + } + + @Override + public Set getPrimarySubTypes() { + return newHashSet(type + .getNames(REP_PRIMARY_SUBTYPES)); + } + + @Override + public Set getMixinSubTypes() { + return newHashSet(type.getNames(REP_MIXIN_SUBTYPES)); + } + + @Override + public boolean isMixin() { + return type.getBoolean(JCR_ISMIXIN); + } + + @Override + public Iterable getNamesSingleValuesProperties() { + return type.getNames(REP_NAMED_SINGLE_VALUED_PROPERTIES); + } + + } + +} Property changes on: oak-core/src/main/java/org/apache/jackrabbit/oak/query/NodeStateNodeTypeInfoProvider.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java (revision 1744527) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngineImpl.java (working copy) @@ -18,8 +18,6 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.ImmutableSet.of; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import java.text.ParseException; import java.util.ArrayList; @@ -37,8 +35,8 @@ import org.apache.jackrabbit.oak.namepath.LocalNameMapper; import org.apache.jackrabbit.oak.namepath.NamePathMapper; import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.xpath.XPathToSQL2Converter; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.slf4j.MDC; @@ -157,12 +155,10 @@ NamePathMapper mapper = new NamePathMapperImpl( new LocalNameMapper(context.getRoot(), mappings)); - NodeState types = context.getBaseState() - .getChildNode(JCR_SYSTEM) - .getChildNode(JCR_NODE_TYPES); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(context.getBaseState()); QueryEngineSettings settings = context.getSettings(); - SQL2Parser parser = new SQL2Parser(mapper, types, settings); + SQL2Parser parser = new SQL2Parser(mapper, nodeTypes, settings); if (language.endsWith(NO_LITERALS)) { language = language.substring(0, language.length() - NO_LITERALS.length()); parser.setAllowNumberLiterals(false); Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java (revision 1744527) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java (working copy) @@ -42,6 +42,8 @@ import org.apache.jackrabbit.oak.query.ast.JoinConditionImpl; import org.apache.jackrabbit.oak.query.ast.JoinType; import org.apache.jackrabbit.oak.query.ast.LiteralImpl; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.Operator; import org.apache.jackrabbit.oak.query.ast.OrderingImpl; import org.apache.jackrabbit.oak.query.ast.PropertyExistenceImpl; @@ -51,7 +53,6 @@ import org.apache.jackrabbit.oak.query.ast.SourceImpl; import org.apache.jackrabbit.oak.query.ast.StaticOperandImpl; import org.apache.jackrabbit.oak.spi.query.PropertyValues; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -73,7 +74,7 @@ private static final int KEYWORD = 1, IDENTIFIER = 2, PARAMETER = 3, END = 4, VALUE = 5; private static final int MINUS = 12, PLUS = 13, OPEN = 14, CLOSE = 15; - private final NodeState types; + private final NodeTypeInfoProvider nodeTypes; // The query as an array of characters and character types private String statement; @@ -113,11 +114,12 @@ * Create a new parser. A parser can be re-used, but it is not thread safe. * * @param namePathMapper the name-path mapper to use - * @param types the node with the node type information + * @param nodeTypes the nodetypes + * @param settings the query engine settings */ - public SQL2Parser(NamePathMapper namePathMapper, NodeState types, QueryEngineSettings settings) { + public SQL2Parser(NamePathMapper namePathMapper, NodeTypeInfoProvider nodeTypes, QueryEngineSettings settings) { this.namePathMapper = namePathMapper; - this.types = checkNotNull(types); + this.nodeTypes = checkNotNull(nodeTypes); this.settings = checkNotNull(settings); } @@ -247,8 +249,8 @@ throw e2; } } - NodeState type = types.getChildNode(nodeTypeName); - if (!type.exists()) { + NodeTypeInfo nodeTypeInfo = nodeTypes.getNodeTypeInfo(nodeTypeName); + if (!nodeTypeInfo.exists()) { throw getSyntaxError("unknown node type"); } @@ -257,7 +259,7 @@ selectorName = readName(); } - return factory.selector(type, selectorName); + return factory.selector(nodeTypeInfo, selectorName); } private String readName() throws ParseException { Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java (revision 1744527) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java (working copy) @@ -21,7 +21,6 @@ import org.apache.jackrabbit.oak.api.PropertyValue; import org.apache.jackrabbit.oak.query.QueryImpl; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -147,8 +146,8 @@ return new SameNodeJoinConditionImpl(selector1Name, selector2Name, selector2Path); } - public SelectorImpl selector(NodeState type, String selectorName) { - return new SelectorImpl(type, selectorName); + public SelectorImpl selector(NodeTypeInfo nodeTypeInfo, String selectorName) { + return new SelectorImpl(nodeTypeInfo, selectorName); } public UpperCaseImpl upperCase(DynamicOperandImpl operand) { Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfo.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfo.java (revision 0) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfo.java (working copy) @@ -0,0 +1,59 @@ +package org.apache.jackrabbit.oak.query.ast; + +import java.util.Set; + +/** + * A nodetype info mechanism. + */ +public interface NodeTypeInfo { + + /** + * Check whether the nodetype exists. + * + * @return true if it exists + */ + boolean exists(); + + /** + * Get the name of the nodetype. + * + * @return the fully qualified name + */ + String getNodeTypeName(); + + /** + * Get the set of supertypes. + * + * @return the set + */ + Set getSuperTypes(); + + /** + * Get the set of primary subtypes. + * + * @return the set + */ + Set getPrimarySubTypes(); + + /** + * Get the set of mixin subtypes. + * + * @return the set + */ + Set getMixinSubTypes(); + + /** + * Check whether this is a mixin. + * + * @return true if it is a mixin, false if it is a primary type + */ + boolean isMixin(); + + /** + * Get the names of all single-valued properties. + * + * @return the names + */ + Iterable getNamesSingleValuesProperties(); + +} \ No newline at end of file Property changes on: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfo.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfoProvider.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfoProvider.java (revision 0) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfoProvider.java (working copy) @@ -0,0 +1,16 @@ +package org.apache.jackrabbit.oak.query.ast; + +/** + * A nodetype info mechanism. + */ +public interface NodeTypeInfoProvider { + + /** + * Verify that the given nodetype exists. + * + * @param nodeTypeName the fully qualified nodetype name + * @return the information + */ + NodeTypeInfo getNodeTypeInfo(String nodeTypeName); + +} \ No newline at end of file Property changes on: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeTypeInfoProvider.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java =================================================================== --- oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (revision 1744527) +++ oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (working copy) @@ -20,18 +20,11 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.Lists.newArrayList; -import static com.google.common.collect.Sets.newHashSet; -import static org.apache.jackrabbit.JcrConstants.JCR_ISMIXIN; import static org.apache.jackrabbit.JcrConstants.JCR_MIXINTYPES; -import static org.apache.jackrabbit.JcrConstants.JCR_NODETYPENAME; import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; import static org.apache.jackrabbit.JcrConstants.NT_BASE; import static org.apache.jackrabbit.oak.api.Type.NAME; import static org.apache.jackrabbit.oak.api.Type.NAMES; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_MIXIN_SUBTYPES; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_NAMED_SINGLE_VALUED_PROPERTIES; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_PRIMARY_SUBTYPES; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.REP_SUPERTYPES; import java.util.ArrayList; import java.util.List; @@ -91,7 +84,7 @@ /** * The node type associated with the {@link #nodeTypeName} */ - private final NodeState nodeType; + private final NodeTypeInfo nodeTypeInfo; private final String selectorName; @@ -163,21 +156,20 @@ private Tree lastTree; private String lastPath; - public SelectorImpl(NodeState nodeType, String selectorName) { - this.nodeType = checkNotNull(nodeType); + public SelectorImpl(NodeTypeInfo nodeTypeInfo, String selectorName) { + this.nodeTypeInfo = checkNotNull(nodeTypeInfo); this.selectorName = checkNotNull(selectorName); - this.nodeTypeName = nodeType.getName(JCR_NODETYPENAME); + this.nodeTypeName = nodeTypeInfo.getNodeTypeName(); this.matchesAllTypes = NT_BASE.equals(nodeTypeName); if (!this.matchesAllTypes) { - this.supertypes = newHashSet(nodeType.getNames(REP_SUPERTYPES)); + this.supertypes = nodeTypeInfo.getSuperTypes(); supertypes.add(nodeTypeName); - this.primaryTypes = newHashSet(nodeType - .getNames(REP_PRIMARY_SUBTYPES)); - this.mixinTypes = newHashSet(nodeType.getNames(REP_MIXIN_SUBTYPES)); - if (nodeType.getBoolean(JCR_ISMIXIN)) { + this.primaryTypes = nodeTypeInfo.getPrimarySubTypes(); + this.mixinTypes = nodeTypeInfo.getMixinSubTypes(); + if (nodeTypeInfo.isMixin()) { mixinTypes.add(nodeTypeName); } else { primaryTypes.add(nodeTypeName); @@ -229,7 +221,7 @@ } public Iterable getWildcardColumns() { - return nodeType.getNames(REP_NAMED_SINGLE_VALUED_PROPERTIES); + return nodeTypeInfo.getNamesSingleValuesProperties(); } @Override @@ -804,6 +796,6 @@ @Override public SourceImpl copyOf() { - return new SelectorImpl(nodeType, selectorName); + return new SelectorImpl(nodeTypeInfo, selectorName); } } Index: oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/IndexUpdateTest.java (working copy) @@ -16,7 +16,6 @@ */ package org.apache.jackrabbit.oak.plugins.index; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; import static org.apache.jackrabbit.JcrConstants.NT_BASE; import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.ASYNC_PROPERTY_NAME; import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.ASYNC_REINDEX_VALUE; @@ -25,7 +24,6 @@ import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_ASYNC_PROPERTY_NAME; import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.REINDEX_PROPERTY_NAME; import static org.apache.jackrabbit.oak.plugins.index.IndexUtils.createIndexDefinition; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -46,7 +44,10 @@ import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexLookup; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.index.FilterImpl; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; @@ -474,9 +475,8 @@ private Set find(PropertyIndexLookup lookup, String name, String value) { - NodeState system = root.getChildNode(JCR_SYSTEM); - NodeState types = system.getChildNode(JCR_NODE_TYPES); - NodeState type = types.getChildNode(NT_BASE); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = nodeTypes.getNodeTypeInfo(NT_BASE); SelectorImpl selector = new SelectorImpl(type, NT_BASE); Filter filter = new FilterImpl(selector, "SELECT * FROM [nt:base]", new QueryEngineSettings()); return Sets.newHashSet(lookup.query(filter, name, Index: oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/nodetype/NodeTypeIndexTest.java (working copy) @@ -16,8 +16,6 @@ */ package org.apache.jackrabbit.oak.plugins.index.nodetype; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.junit.Assert.assertEquals; import java.io.ByteArrayInputStream; @@ -26,8 +24,6 @@ import java.util.Arrays; import java.util.Set; -import com.google.common.collect.Sets; - import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.oak.api.Blob; import org.apache.jackrabbit.oak.api.Type; @@ -37,7 +33,10 @@ import org.apache.jackrabbit.oak.plugins.index.property.PropertyIndexEditorProvider; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.index.FilterImpl; import org.apache.jackrabbit.oak.spi.commit.CommitInfo; @@ -51,6 +50,8 @@ import org.junit.Before; import org.junit.Test; +import com.google.common.collect.Sets; + /** * {@code NodeTypeIndexTest} performs tests on {@link NodeTypeIndex}. */ @@ -102,9 +103,8 @@ } private static FilterImpl createFilter(NodeState root, String nodeTypeName) { - NodeState system = root.getChildNode(JCR_SYSTEM); - NodeState types = system.getChildNode(JCR_NODE_TYPES); - NodeState type = types.getChildNode(nodeTypeName); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = nodeTypes.getNodeTypeInfo(nodeTypeName); SelectorImpl selector = new SelectorImpl(type, nodeTypeName); return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", new QueryEngineSettings()); } Index: oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/AsyncPropertyIndexTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/AsyncPropertyIndexTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/AsyncPropertyIndexTest.java (working copy) @@ -37,7 +37,10 @@ import org.apache.jackrabbit.oak.plugins.index.IndexEditorProvider; import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.index.FilterImpl; import org.apache.jackrabbit.oak.spi.commit.EditorHook; @@ -51,8 +54,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; -; - /** * Test the asynchronous reindexing ability of an synchronous index */ @@ -113,9 +114,8 @@ } private static FilterImpl createFilter(NodeState root, String nodeTypeName) { - NodeState system = root.getChildNode(JCR_SYSTEM); - NodeState types = system.getChildNode(JCR_NODE_TYPES); - NodeState type = types.getChildNode(nodeTypeName); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = nodeTypes.getNodeTypeInfo(nodeTypeName); SelectorImpl selector = new SelectorImpl(type, nodeTypeName); return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", new QueryEngineSettings()); Index: oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/property/PropertyIndexTest.java (working copy) @@ -17,9 +17,7 @@ package org.apache.jackrabbit.oak.plugins.index.property; import static com.google.common.collect.ImmutableSet.of; -import static java.util.Arrays.asList; import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; import static org.apache.jackrabbit.JcrConstants.NT_BASE; import static org.apache.jackrabbit.JcrConstants.NT_FILE; import static org.apache.jackrabbit.JcrConstants.NT_UNSTRUCTURED; @@ -31,32 +29,24 @@ import static org.apache.jackrabbit.oak.plugins.index.counter.NodeCounterEditor.COUNT_PROPERTY_NAME; import static org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState.EMPTY_NODE; import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import static org.junit.matchers.JUnitMatchers.containsString; import java.util.Arrays; import java.util.Set; -import ch.qos.logback.classic.Level; -import ch.qos.logback.classic.LoggerContext; -import ch.qos.logback.classic.spi.ILoggingEvent; -import ch.qos.logback.core.Appender; -import ch.qos.logback.core.read.ListAppender; -import ch.qos.logback.core.spi.FilterReply; -import com.google.common.collect.Iterables; import org.apache.jackrabbit.oak.api.CommitFailedException; -import org.apache.jackrabbit.oak.api.Tree; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.plugins.index.IndexUpdateProvider; import org.apache.jackrabbit.oak.plugins.index.property.strategy.ContentMirrorStoreStrategy; import org.apache.jackrabbit.oak.plugins.memory.EmptyNodeState; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.Operator; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.index.FilterImpl; @@ -69,10 +59,18 @@ import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStateUtils; import org.junit.Test; +import org.slf4j.LoggerFactory; +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.LoggerContext; +import ch.qos.logback.classic.spi.ILoggingEvent; +import ch.qos.logback.core.Appender; +import ch.qos.logback.core.read.ListAppender; +import ch.qos.logback.core.spi.FilterReply; + import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Iterables; import com.google.common.collect.Sets; -import org.slf4j.LoggerFactory; /** * Test the Property2 index mechanism. @@ -400,9 +398,8 @@ } private static FilterImpl createFilter(NodeState root, String nodeTypeName) { - NodeState system = root.getChildNode(JCR_SYSTEM); - NodeState types = system.getChildNode(JCR_NODE_TYPES); - NodeState type = types.getChildNode(nodeTypeName); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = nodeTypes.getNodeTypeInfo(nodeTypeName); SelectorImpl selector = new SelectorImpl(type, nodeTypeName); return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", new QueryEngineSettings()); } Index: oak-core/src/test/java/org/apache/jackrabbit/oak/query/FilterTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/query/FilterTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/query/FilterTest.java (working copy) @@ -17,8 +17,6 @@ package org.apache.jackrabbit.oak.query; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -27,9 +25,9 @@ import java.text.ParseException; import org.apache.jackrabbit.oak.namepath.NamePathMapper; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.xpath.XPathToSQL2Converter; import org.apache.jackrabbit.oak.spi.query.Filter; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.junit.Ignore; import org.junit.Test; @@ -37,12 +35,11 @@ * Test filter conditions. */ public class FilterTest { + + private final NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(INITIAL_CONTENT); - private final NodeState types = INITIAL_CONTENT.getChildNode(JCR_SYSTEM) - .getChildNode(JCR_NODE_TYPES); + private final SQL2Parser p = new SQL2Parser(NamePathMapper.DEFAULT, nodeTypes, new QueryEngineSettings()); - private final SQL2Parser p = new SQL2Parser(NamePathMapper.DEFAULT, types, new QueryEngineSettings()); - private Filter createFilter(String xpath) throws ParseException { String sql = new XPathToSQL2Converter().convert(xpath); QueryImpl q = (QueryImpl) p.parse(sql); Index: oak-core/src/test/java/org/apache/jackrabbit/oak/query/LargeQueryTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/query/LargeQueryTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/query/LargeQueryTest.java (working copy) @@ -16,8 +16,6 @@ */ package org.apache.jackrabbit.oak.query; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -25,14 +23,13 @@ import java.text.ParseException; import java.util.Random; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.xpath.XPathToSQL2Converter; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.junit.Test; public class LargeQueryTest { - private final NodeState types = - INITIAL_CONTENT.getChildNode(JCR_SYSTEM).getChildNode(JCR_NODE_TYPES); + private final NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(INITIAL_CONTENT); @Test public void testSimpleOr() throws ParseException { @@ -113,7 +110,7 @@ sql2 = sql2.substring(0, xpathIndex); // should use union now assertTrue(sql2.indexOf(" or ") < 0); - SQL2Parser p = new SQL2Parser(null, types, new QueryEngineSettings()); + SQL2Parser p = new SQL2Parser(null, nodeTypes, new QueryEngineSettings()); p.parse(sql2); } Index: oak-core/src/test/java/org/apache/jackrabbit/oak/query/NativeQueryTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/query/NativeQueryTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/query/NativeQueryTest.java (working copy) @@ -16,33 +16,31 @@ */ package org.apache.jackrabbit.oak.query; +import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import java.text.ParseException; +import java.util.Iterator; + import org.apache.jackrabbit.oak.api.Result; import org.apache.jackrabbit.oak.api.ResultRow; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.core.ImmutableRoot; import org.apache.jackrabbit.oak.namepath.NamePathMapper; -import org.apache.jackrabbit.oak.spi.state.NodeState; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.junit.Test; -import java.text.ParseException; -import java.util.Iterator; - -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; -import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; - public class NativeQueryTest { - private final NodeState types = INITIAL_CONTENT.getChildNode(JCR_SYSTEM) - .getChildNode(JCR_NODE_TYPES); - private final ImmutableRoot ROOT = new ImmutableRoot(INITIAL_CONTENT); private final QueryEngineImpl QUERY_ENGINE = (QueryEngineImpl)ROOT.getQueryEngine(); - private final SQL2Parser p = new SQL2Parser(NamePathMapper.DEFAULT, types, new QueryEngineSettings()); + private final NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(INITIAL_CONTENT); + private final SQL2Parser p = new SQL2Parser(NamePathMapper.DEFAULT, nodeTypes, new QueryEngineSettings()); + + @Test public void dontTraverseForSuggest() throws Exception { String sql = "select [rep:suggest()] from [nt:base] where suggest('test')"; Index: oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2OptimiseQueryTest.java (working copy) @@ -20,12 +20,11 @@ import static com.google.common.collect.ImmutableList.of; import static javax.jcr.query.Query.JCR_SQL2; import static org.apache.jackrabbit.JcrConstants.JCR_PRIMARYTYPE; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; import static org.apache.jackrabbit.oak.api.Type.NAME; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.NT_OAK_UNSTRUCTURED; +import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; +import static org.apache.jackrabbit.oak.query.QueryEngineImpl.QuerySelectionMode.ALTERNATIVE; import static org.apache.jackrabbit.oak.query.QueryEngineImpl.QuerySelectionMode.CHEAPEST; -import static org.apache.jackrabbit.oak.query.QueryEngineImpl.QuerySelectionMode.ALTERNATIVE; import static org.apache.jackrabbit.oak.query.QueryEngineImpl.QuerySelectionMode.ORIGINAL; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertNotNull; @@ -49,8 +48,8 @@ import org.apache.jackrabbit.oak.namepath.NamePathMapperImpl; import org.apache.jackrabbit.oak.plugins.memory.MemoryNodeStore; import org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.spi.security.OpenSecurityProvider; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStore; import org.junit.Test; @@ -187,7 +186,7 @@ */ @Test public void optimise() throws ParseException { - SQL2Parser parser = new SQL2Parser(getMappings(), getTypes(), qeSettings); + SQL2Parser parser = new SQL2Parser(getMappings(), getNodeTypes(), qeSettings); String statement; Query original, optimised; @@ -232,8 +231,8 @@ new LocalNameMapper(root, QueryEngine.NO_MAPPINGS)); } - private NodeState getTypes() { - return store.getRoot().getChildNode(JCR_SYSTEM).getChildNode(JCR_NODE_TYPES); + private static NodeTypeInfoProvider getNodeTypes() { + return new NodeStateNodeTypeInfoProvider(INITIAL_CONTENT); } @Override Index: oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/query/SQL2ParserTest.java (working copy) @@ -16,15 +16,13 @@ */ package org.apache.jackrabbit.oak.query; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; import static org.junit.Assert.assertTrue; import java.text.ParseException; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.xpath.XPathToSQL2Converter; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.junit.Test; /** @@ -32,10 +30,9 @@ */ public class SQL2ParserTest { - private final NodeState types = - INITIAL_CONTENT.getChildNode(JCR_SYSTEM).getChildNode(JCR_NODE_TYPES); + private final NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(INITIAL_CONTENT); - private final SQL2Parser p = new SQL2Parser(null, types, new QueryEngineSettings()); + private final SQL2Parser p = new SQL2Parser(null, nodeTypes, new QueryEngineSettings()); @Test public void testIgnoreSqlComment() throws ParseException { Index: oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java =================================================================== --- oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java (revision 1744527) +++ oak-core/src/test/java/org/apache/jackrabbit/oak/query/XPathTest.java (working copy) @@ -16,15 +16,13 @@ */ package org.apache.jackrabbit.oak.query; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; import static org.junit.Assert.assertEquals; import java.text.ParseException; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.xpath.XPathToSQL2Converter; -import org.apache.jackrabbit.oak.spi.state.NodeState; import org.junit.Test; /** @@ -32,8 +30,8 @@ */ public class XPathTest { - private final NodeState types = - INITIAL_CONTENT.getChildNode(JCR_SYSTEM).getChildNode(JCR_NODE_TYPES); + private final NodeTypeInfoProvider nodeTypes = + new NodeStateNodeTypeInfoProvider(INITIAL_CONTENT); @Test public void test() throws ParseException { @@ -112,7 +110,7 @@ sql2 = formatSQL(sql2); expectedSql2 = formatSQL(expectedSql2); assertEquals(expectedSql2, sql2); - SQL2Parser p = new SQL2Parser(null, types, new QueryEngineSettings()); + SQL2Parser p = new SQL2Parser(null, nodeTypes, new QueryEngineSettings()); p.parse(sql2); } Index: oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java =================================================================== --- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java (revision 1744527) +++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/IndexPlannerTest.java (working copy) @@ -19,16 +19,41 @@ package org.apache.jackrabbit.oak.plugins.index.lucene; +import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.ImmutableSet.of; +import static javax.jcr.PropertyType.TYPENAME_STRING; +import static org.apache.jackrabbit.oak.api.Type.NAMES; +import static org.apache.jackrabbit.oak.api.Type.STRINGS; +import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES; +import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME; +import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME; +import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_RULES; +import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.ORDERED_PROP_NAMES; +import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION; +import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.NT_TEST; +import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.registerTestNodeType; +import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition; +import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition; +import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty; +import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + import java.io.IOException; import java.util.Collections; import javax.annotation.Nonnull; -import com.google.common.collect.ImmutableList; import org.apache.jackrabbit.oak.api.Type; import org.apache.jackrabbit.oak.commons.PathUtils; import org.apache.jackrabbit.oak.plugins.index.IndexConstants; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.Operator; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.fulltext.FullTextParser; @@ -36,6 +61,7 @@ import org.apache.jackrabbit.oak.spi.query.Filter; import org.apache.jackrabbit.oak.spi.query.PropertyValues; import org.apache.jackrabbit.oak.spi.query.QueryIndex; +import org.apache.jackrabbit.oak.spi.query.QueryIndex.OrderEntry; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.lucene.document.Document; @@ -45,35 +71,9 @@ import org.apache.lucene.index.IndexWriterConfig; import org.apache.lucene.store.Directory; import org.apache.lucene.store.RAMDirectory; -import org.junit.Ignore; import org.junit.Test; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.collect.ImmutableSet.of; -import static javax.jcr.PropertyType.TYPENAME_STRING; -import static org.apache.jackrabbit.JcrConstants.JCR_SYSTEM; -import static org.apache.jackrabbit.oak.api.Type.NAMES; -import static org.apache.jackrabbit.oak.api.Type.STRINGS; -import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.DECLARING_NODE_TYPES; -import static org.apache.jackrabbit.oak.plugins.index.IndexConstants.INDEX_DEFINITIONS_NAME; -import static org.apache.jackrabbit.oak.plugins.index.PathFilter.PROP_INCLUDED_PATHS; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_DATA_CHILD_NAME; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.INDEX_RULES; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.ORDERED_PROP_NAMES; -import static org.apache.jackrabbit.oak.plugins.index.lucene.LuceneIndexConstants.VERSION; -import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.NT_TEST; -import static org.apache.jackrabbit.oak.plugins.index.lucene.TestUtil.registerTestNodeType; -import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition; -import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition; -import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; -import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; -import static org.apache.jackrabbit.oak.spi.query.QueryIndex.OrderEntry; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; +import com.google.common.collect.ImmutableList; public class IndexPlannerTest { private NodeState root = INITIAL_CONTENT; @@ -594,9 +594,8 @@ } private FilterImpl createFilter(String nodeTypeName) { - NodeState system = root.getChildNode(JCR_SYSTEM); - NodeState types = system.getChildNode(JCR_NODE_TYPES); - NodeState type = types.getChildNode(nodeTypeName); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = nodeTypes.getNodeTypeInfo(nodeTypeName); SelectorImpl selector = new SelectorImpl(type, nodeTypeName); return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", new QueryEngineSettings()); } Index: oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java =================================================================== --- oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java (revision 1744527) +++ oak-lucene/src/test/java/org/apache/jackrabbit/oak/plugins/index/lucene/LuceneIndexTest.java (working copy) @@ -16,19 +16,6 @@ */ package org.apache.jackrabbit.oak.plugins.index.lucene; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import javax.annotation.Nonnull; -import javax.annotation.Nullable; -import javax.jcr.PropertyType; - import static com.google.common.collect.ImmutableList.copyOf; import static com.google.common.collect.ImmutableSet.of; import static com.google.common.collect.Iterators.transform; @@ -67,15 +54,21 @@ import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLuceneIndexDefinition; import static org.apache.jackrabbit.oak.plugins.index.lucene.util.LuceneIndexHelper.newLucenePropertyIndexDefinition; import static org.apache.jackrabbit.oak.plugins.memory.PropertyStates.createProperty; -import static org.apache.jackrabbit.oak.plugins.nodetype.NodeTypeConstants.JCR_NODE_TYPES; import static org.apache.jackrabbit.oak.plugins.nodetype.write.InitialContent.INITIAL_CONTENT; -import static org.apache.jackrabbit.oak.spi.query.QueryIndex.AdvancedQueryIndex; -import static org.apache.jackrabbit.oak.spi.query.QueryIndex.IndexPlan; -import com.google.common.base.Function; -import com.google.common.collect.Lists; -import com.google.common.collect.Maps; -import com.google.common.collect.Sets; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import javax.annotation.Nonnull; +import javax.annotation.Nullable; +import javax.jcr.PropertyType; + import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.jackrabbit.oak.api.Blob; @@ -88,7 +81,10 @@ import org.apache.jackrabbit.oak.plugins.memory.ArrayBasedBlob; import org.apache.jackrabbit.oak.plugins.segment.SegmentNodeStore; import org.apache.jackrabbit.oak.plugins.segment.memory.MemoryStore; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.Operator; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.fulltext.FullTextParser; @@ -105,6 +101,8 @@ import org.apache.jackrabbit.oak.spi.query.PropertyValues; import org.apache.jackrabbit.oak.spi.query.QueryConstants; import org.apache.jackrabbit.oak.spi.query.QueryIndex; +import org.apache.jackrabbit.oak.spi.query.QueryIndex.AdvancedQueryIndex; +import org.apache.jackrabbit.oak.spi.query.QueryIndex.IndexPlan; import org.apache.jackrabbit.oak.spi.state.NodeBuilder; import org.apache.jackrabbit.oak.spi.state.NodeState; import org.apache.jackrabbit.oak.spi.state.NodeStore; @@ -122,8 +120,12 @@ import org.junit.Assert; import org.junit.Test; +import com.google.common.base.Function; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import com.google.common.collect.Sets; @SuppressWarnings("ConstantConditions") public class LuceneIndexTest { @@ -909,9 +911,8 @@ } private FilterImpl createFilter(String nodeTypeName) { - NodeState system = root.getChildNode(JCR_SYSTEM); - NodeState types = system.getChildNode(JCR_NODE_TYPES); - NodeState type = types.getChildNode(nodeTypeName); + NodeTypeInfoProvider nodeTypes = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = nodeTypes.getNodeTypeInfo(nodeTypeName); SelectorImpl selector = new SelectorImpl(type, nodeTypeName); return new FilterImpl(selector, "SELECT * FROM [" + nodeTypeName + "]", new QueryEngineSettings()); } Index: oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java =================================================================== --- oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java (revision 1744527) +++ oak-solr-core/src/test/java/org/apache/jackrabbit/oak/plugins/index/solr/query/SolrQueryIndexTest.java (working copy) @@ -16,9 +16,6 @@ */ package org.apache.jackrabbit.oak.plugins.index.solr.query; -import javax.annotation.Nonnull; -import java.util.Arrays; -import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; @@ -30,7 +27,10 @@ import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfiguration; import org.apache.jackrabbit.oak.plugins.index.solr.configuration.OakSolrConfigurationProvider; import org.apache.jackrabbit.oak.plugins.index.solr.server.SolrServerProvider; +import org.apache.jackrabbit.oak.query.NodeStateNodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.QueryEngineSettings; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfo; +import org.apache.jackrabbit.oak.query.ast.NodeTypeInfoProvider; import org.apache.jackrabbit.oak.query.ast.Operator; import org.apache.jackrabbit.oak.query.ast.SelectorImpl; import org.apache.jackrabbit.oak.query.index.FilterImpl; @@ -45,7 +45,6 @@ import org.apache.solr.client.solrj.response.QueryResponse; import org.apache.solr.common.SolrDocument; import org.apache.solr.common.SolrDocumentList; -import org.apache.solr.common.SolrInputDocument; import org.apache.solr.common.params.SolrParams; import org.junit.Before; import org.junit.Ignore; @@ -92,7 +91,7 @@ @Test public void testNoPlanWithPathRestrictions() throws Exception { - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -109,7 +108,7 @@ builder.child("oak:index").child("solr").setProperty("pathRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -128,7 +127,7 @@ .setProperty("propertyRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -142,7 +141,7 @@ @Test public void testNoPlanWithPropertyRestrictions() throws Exception { - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -160,7 +159,7 @@ .setProperty("propertyRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -173,7 +172,7 @@ @Test public void testNoPlanWithPrimaryTypeRestrictions() throws Exception { - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -190,7 +189,7 @@ builder.child("oak:index").child("solr").setProperty("primaryTypes", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -209,7 +208,7 @@ .setProperty("primaryTypes", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -229,7 +228,7 @@ .setProperty("propertyRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -248,7 +247,7 @@ .setProperty("propertyRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -267,7 +266,7 @@ .setProperty("propertyRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -286,7 +285,7 @@ .setProperty("propertyRestrictions", true); nodeState = builder.getNodeState(); - SelectorImpl selector = new SelectorImpl(nodeState, "a"); + SelectorImpl selector = newSelector(nodeState, "a"); SolrQueryIndex solrQueryIndex = new SolrQueryIndex(null, null, null); @@ -320,7 +319,7 @@ public void testSize() throws Exception { NodeState root = mock(NodeState.class); when(root.getNames(any(String.class))).thenReturn(Collections.emptySet()); - SelectorImpl selector = new SelectorImpl(root, "a"); + SelectorImpl selector = newSelector(root, "a"); String sqlQuery = "select [jcr:path], [jcr:score] from [nt:base] as a where" + " contains([jcr:content/*], 'founded')"; SolrServer solrServer = TestUtils.createSolrServer(); @@ -350,7 +349,7 @@ public void testNoMoreThanThreeSolrRequests() throws Exception { NodeState root = mock(NodeState.class); when(root.getNames(any(String.class))).thenReturn(Collections.emptySet()); - SelectorImpl selector = new SelectorImpl(root, "a"); + SelectorImpl selector = newSelector(root, "a"); String sqlQuery = "select [jcr:path], [jcr:score] from [nt:base] as a where" + " contains([jcr:content/*], 'founded')"; SolrServer solrServer = mock(SolrServer.class); @@ -383,6 +382,12 @@ } assertEquals(3, response.getCounter()); } + + private static SelectorImpl newSelector(NodeState root, String name) { + NodeTypeInfoProvider types = new NodeStateNodeTypeInfoProvider(root); + NodeTypeInfo type = types.getNodeTypeInfo("nt:base"); + return new SelectorImpl(type, name); + } private class CountingResponse extends QueryResponse { @@ -407,4 +412,5 @@ return counter; } } + }