You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2009/05/01 17:29:17 UTC
svn commit: r770712 - in
/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query:
qom/JoinImpl.java qom/JoinType.java qom/QueryObjectModelFactoryImpl.java
sql2/Parser.java
Author: jukka
Date: Fri May 1 15:29:17 2009
New Revision: 770712
URL: http://svn.apache.org/viewvc?rev=770712&view=rev
Log:
JCR-2095: Use an enumeration for QOM join types
Implement the o.a.j.spi.commons.query.qom.JoinType enumeration and use it in the generic query engine.
Added:
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinType.java
Modified:
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinImpl.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinImpl.java?rev=770712&r1=770711&r2=770712&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinImpl.java Fri May 1 15:29:17 2009
@@ -40,7 +40,7 @@
/**
* The join type.
*/
- private final String joinType;
+ private final JoinType joinType;
/**
* The join condition.
@@ -50,7 +50,7 @@
JoinImpl(NamePathResolver resolver,
SourceImpl left,
SourceImpl right,
- String joinType,
+ JoinType joinType,
JoinConditionImpl joinCondition) {
super(resolver);
this.left = left;
@@ -59,6 +59,10 @@
this.joinCondition = joinCondition;
}
+ public JoinType getJoinTypeInstance() {
+ return joinType;
+ }
+
/**
* Gets the left node-tuple source.
*
@@ -86,7 +90,7 @@
* </ul>
*/
public String getJoinType() {
- return joinType;
+ return joinType.toString();
}
/**
Added: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinType.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinType.java?rev=770712&view=auto
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinType.java (added)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/JoinType.java Fri May 1 15:29:17 2009
@@ -0,0 +1,94 @@
+/*
+ * 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.spi.commons.query.qom;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.query.qom.Join;
+import javax.jcr.query.qom.JoinCondition;
+import javax.jcr.query.qom.QueryObjectModelConstants;
+import javax.jcr.query.qom.QueryObjectModelFactory;
+import javax.jcr.query.qom.Source;
+
+/**
+ * Enumeration of the JCR 2.0 join types.
+ *
+ * @since Apache Jackrabbit 2.0
+ */
+public enum JoinType {
+
+ INNER(QueryObjectModelConstants.JCR_JOIN_TYPE_INNER),
+
+ LEFT("{http://www.jcp.org/jcr/1.0}joinTypeLeftOuter"),
+ // LEFT(QueryObjectModelConstants.JCR_JOIN_TYPE_LEFT_OUTER),
+
+ RIGHT("{http://www.jcp.org/jcr/1.0}joinTypeRightOuter");
+ // RIGHT(QueryObjectModelConstants.JCR_JOIN_TYPE_RIGHT_OUTER);
+
+ /**
+ * JCR name of this join type.
+ */
+ private final String name;
+
+ private JoinType(String name) {
+ this.name = name;
+ }
+
+ /**
+ * Returns the join of the given sources.
+ *
+ * @param factory factory for creating the join
+ * @param left left join source
+ * @param right right join source
+ * @param condition join condition
+ * @return join
+ * @throws RepositoryException if the join can not be created
+ */
+ public Join join(
+ QueryObjectModelFactory factory,
+ Source left, Source right, JoinCondition condition)
+ throws RepositoryException {
+ return factory.join(left, right, name, condition);
+ }
+
+ /**
+ * Returns the JCR 2.0 name of this join type.
+ *
+ * @see QueryObjectModelConstants
+ * @return JCR name of this join type
+ */
+ public String toString() {
+ return name;
+ }
+
+ /**
+ * Returns the join type with the given JCR name.
+ *
+ * @param name JCR name of a join type
+ * @return join type with the given name
+ * @throws RepositoryException if the given name is unknown
+ */
+ public static JoinType getJoinTypeByName(String name)
+ throws RepositoryException {
+ for (JoinType type : JoinType.values()) {
+ if (type.name.equals(name)) {
+ return type;
+ }
+ }
+ throw new RepositoryException("Unknown join type name: " + name);
+ }
+
+}
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java?rev=770712&r1=770711&r2=770712&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/qom/QueryObjectModelFactoryImpl.java Fri May 1 15:29:17 2009
@@ -67,15 +67,9 @@
*/
public abstract class QueryObjectModelFactoryImpl implements QueryObjectModelFactory {
- private static final Set<String> VALID_JOIN_TYPES = new HashSet<String>();
-
private static final Set<String> VALID_ORDERS = new HashSet<String>();
static {
- VALID_JOIN_TYPES.add(QueryObjectModelConstants.JCR_JOIN_TYPE_INNER);
- VALID_JOIN_TYPES.add(QueryObjectModelConstants.JCR_JOIN_TYPE_LEFT_OUTER);
- VALID_JOIN_TYPES.add(QueryObjectModelConstants.JCR_JOIN_TYPE_RIGHT_OUTER);
-
VALID_ORDERS.add(QueryObjectModelConstants.JCR_ORDER_ASCENDING);
VALID_ORDERS.add(QueryObjectModelConstants.JCR_ORDER_DESCENDING);
}
@@ -225,7 +219,7 @@
*
* @param left the left node-tuple source; non-null
* @param right the right node-tuple source; non-null
- * @param joinType either <ul> <li>{@link QueryObjectModelConstants#JCR_JOIN_TYPE_INNER},</li>
+ * @param joinTypeName either <ul> <li>{@link QueryObjectModelConstants#JCR_JOIN_TYPE_INNER},</li>
* <li>{@link QueryObjectModelConstants#JCR_JOIN_TYPE_LEFT_OUTER},</li>
* <li>{@link QueryObjectModelConstants#JCR_JOIN_TYPE_RIGHT_OUTER}</li>
* </ul>
@@ -237,7 +231,7 @@
*/
public Join join(Source left,
Source right,
- String joinType,
+ String joinTypeName,
JoinCondition joinCondition)
throws InvalidQueryException, RepositoryException {
if (!(left instanceof SourceImpl) || !(right instanceof SourceImpl)) {
@@ -246,11 +240,12 @@
if (!(joinCondition instanceof JoinConditionImpl)) {
throw new RepositoryException("Unknwon JoinCondition implementation");
}
- if (!VALID_JOIN_TYPES.contains(joinType)) {
- throw new RepositoryException("Invalid joinType");
- }
- return new JoinImpl(resolver, (SourceImpl) left, (SourceImpl) right,
- joinType, (JoinConditionImpl) joinCondition);
+ return new JoinImpl(
+ resolver,
+ (SourceImpl) left,
+ (SourceImpl) right,
+ JoinType.getJoinTypeByName(joinTypeName),
+ (JoinConditionImpl) joinCondition);
}
/**
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java?rev=770712&r1=770711&r2=770712&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java Fri May 1 15:29:17 2009
@@ -35,12 +35,12 @@
import javax.jcr.query.qom.PropertyExistence;
import javax.jcr.query.qom.PropertyValue;
import javax.jcr.query.qom.QueryObjectModel;
-import javax.jcr.query.qom.QueryObjectModelConstants;
import javax.jcr.query.qom.QueryObjectModelFactory;
import javax.jcr.query.qom.Selector;
import javax.jcr.query.qom.Source;
import javax.jcr.query.qom.StaticOperand;
+import org.apache.jackrabbit.spi.commons.query.qom.JoinType;
import org.apache.jackrabbit.spi.commons.query.qom.Operator;
/**
@@ -169,15 +169,15 @@
selectors.add(selector);
Source source = selector;
while (true) {
- String type;
+ JoinType type;
if (readIf("RIGHT")) {
read("OUTER");
- type = QueryObjectModelConstants.JCR_JOIN_TYPE_RIGHT_OUTER;
+ type = JoinType.RIGHT;
} else if (readIf("LEFT")) {
read("OUTER");
- type = QueryObjectModelConstants.JCR_JOIN_TYPE_LEFT_OUTER;
+ type = JoinType.LEFT;
} else if (readIf("INNER")) {
- type = QueryObjectModelConstants.JCR_JOIN_TYPE_INNER;
+ type = JoinType.INNER;
} else {
break;
}
@@ -186,7 +186,7 @@
selectors.add(selector);
read("ON");
JoinCondition on = parseJoinCondition();
- source = factory.join(source, selector, type, on);
+ source = type.join(factory, source, selector, on);
}
return source;
}