jackrabbit-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From alexparvule...@apache.org
Subject svn commit: r1126557 - in /jackrabbit/branches/2.2: ./ jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/ jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/
Date Mon, 23 May 2011 15:59:13 GMT
Author: alexparvulescu
Date: Mon May 23 15:59:13 2011
New Revision: 1126557

URL: http://svn.apache.org/viewvc?rev=1126557&view=rev
Log:
2.2 merged revisions 1126551 and 1126550 (JCR-2939)

Added:
    jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2PathEscapingTest.java
  (with props)
Modified:
    jackrabbit/branches/2.2/   (props changed)
    jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java
    jackrabbit/branches/2.2/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/QOMFormatter.java

Propchange: jackrabbit/branches/2.2/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Mon May 23 15:59:13 2011
@@ -2,4 +2,4 @@
 /jackrabbit/sandbox/JCR-1456:774917-886178
 /jackrabbit/sandbox/JCR-2170:812417-816332
 /jackrabbit/sandbox/tripod-JCR-2209:795441-795863
-/jackrabbit/trunk:1038201,1038203,1038205,1038657,1039064,1039347,1039408,1039422-1039423,1039888,1039946,1040033,1040090,1040459,1040601,1040606,1040661,1040958,1041379,1041439,1041761,1042643,1042647,1042978-1042982,1043084-1043086,1043088,1043343,1043357-1043358,1043430,1043554,1043616,1043618,1043637,1043656,1043893,1043897,1044239,1044312,1044451,1044613,1049473,1049491,1049514,1049518,1049520,1049859,1049870,1049874,1049878,1049880,1049883,1049889,1049891,1049894-1049895,1049899-1049901,1049909-1049911,1049915-1049916,1049919,1049923,1049925,1049931,1049936,1049939,1050212,1050298,1050346,1050551,1055068,1055070-1055071,1055116-1055117,1055127,1055134,1055164,1055498,1060431,1060434,1060753,1063756,1064670,1065599,1065622,1066059,1066071,1069831,1071562,1071573,1071680,1074140,1079314,1079317,1080186,1080540,1087304,1088991,1089032,1089053,1089436,1092106,1092117,1097513-1097514,1098963-1098964,1099033
+/jackrabbit/trunk:1038201,1038203,1038205,1038657,1039064,1039347,1039408,1039422-1039423,1039888,1039946,1040033,1040090,1040459,1040601,1040606,1040661,1040958,1041379,1041439,1041761,1042643,1042647,1042978-1042982,1043084-1043086,1043088,1043343,1043357-1043358,1043430,1043554,1043616,1043618,1043637,1043656,1043893,1043897,1044239,1044312,1044451,1044613,1049473,1049491,1049514,1049518,1049520,1049859,1049870,1049874,1049878,1049880,1049883,1049889,1049891,1049894-1049895,1049899-1049901,1049909-1049911,1049915-1049916,1049919,1049923,1049925,1049931,1049936,1049939,1050212,1050298,1050346,1050551,1055068,1055070-1055071,1055116-1055117,1055127,1055134,1055164,1055498,1060431,1060434,1060753,1063756,1064670,1065599,1065622,1066059,1066071,1069831,1071562,1071573,1071680,1074140,1079314,1079317,1080186,1080540,1087304,1088991,1089032,1089053,1089436,1092106,1092117,1092683,1097513-1097514,1098963-1098964,1099033

Modified: jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java?rev=1126557&r1=1126556&r2=1126557&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java
(original)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/AbstractQueryTest.java
Mon May 23 15:59:13 2011
@@ -257,7 +257,7 @@ public class AbstractQueryTest extends A
             return qm.createQuery(statement, Query.XPATH).execute();
         }
     }
-    
+
     protected QueryResult executeSQL2Query(String statement)
             throws RepositoryException {
         return qm.createQuery(statement, JCR_SQL2).execute();

Added: jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2PathEscapingTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2PathEscapingTest.java?rev=1126557&view=auto
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2PathEscapingTest.java
(added)
+++ jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2PathEscapingTest.java
Mon May 23 15:59:13 2011
@@ -0,0 +1,130 @@
+/*
+ * 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.core.query;
+
+import javax.jcr.Node;
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.query.qom.Column;
+import javax.jcr.query.qom.Constraint;
+import javax.jcr.query.qom.QueryObjectModel;
+import javax.jcr.query.qom.QueryObjectModelFactory;
+import javax.jcr.query.qom.Source;
+
+import org.apache.jackrabbit.commons.JcrUtils;
+
+/**
+ * Test case for path escaping
+ * 
+ * Inspired by <a
+ * href="https://issues.apache.org/jira/browse/JCR-2939">JCR-2939</a>
+ * 
+ */
+public class SQL2PathEscapingTest extends AbstractQueryTest {
+
+    private Node n1;
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        n1 = testRootNode.addNode("a b");
+        n1.addNode("x");
+        n1.addNode("y");
+        testRootNode.getSession().save();
+    }
+
+    @Override
+    protected void tearDown() throws Exception {
+        for (Node c : JcrUtils.getChildNodes(testRootNode)) {
+            testRootNode.getSession().removeItem(c.getPath());
+        }
+        testRootNode.getSession().save();
+        super.tearDown();
+    }
+
+    /**
+     * not escaping the spaced path will not get you anything
+     * 
+     * @throws Exception
+     */
+    public void testGetChildrenNoEscaping() throws Exception {
+        StringBuilder select = new StringBuilder();
+        select.append("select * from [nt:base] AS selector where ISCHILDNODE(selector, ["
+                + n1.getPath() + "]) ");
+        checkResult(executeSQL2Query(select.toString()), 0);
+    }
+
+    /**
+     * 
+     * escaping the entire path should work
+     * 
+     * @throws Exception
+     * 
+     */
+    public void testGetChildrenEscapedFull() throws Exception {
+        StringBuilder select = new StringBuilder();
+        select.append("select * from [nt:base] AS selector where ISCHILDNODE(selector, ['"
+                + n1.getPath() + "']) ");
+        checkResult(executeSQL2Query(select.toString()), 2);
+    }
+
+    /**
+     * escaping just the spaced path should work too
+     * 
+     * @throws Exception
+     */
+    public void testGetChildrenEscapedNode() throws Exception {
+        String path = n1.getParent().getPath() + "/'" + "a b" + "'";
+        StringBuilder select = new StringBuilder();
+        select.append("select * from [nt:base] AS selector where ISCHILDNODE(selector, ["
+                + path + "]) ");
+        checkResult(executeSQL2Query(select.toString()), 2);
+    }
+
+    /**
+     * will build a query directly via the api using a spaced path
+     * 
+     * @throws Exception
+     */
+    public void testGetChildrenApiDirect() throws Exception {
+        QueryObjectModelFactory qomf = qm.getQOMFactory();
+        Source source1 = qomf.selector(NodeType.NT_BASE, "selector");
+        Column[] columns = new Column[] { qomf.column("selector", null, null) };
+        Constraint constraint2 = qomf.childNode("selector", n1.getPath());
+        QueryObjectModel qom = qomf.createQuery(source1, constraint2, null,
+                columns);
+        checkResult(qom.execute(), 2);
+    }
+
+    /**
+     * the statement behind the api should be consistent, and return a similar
+     * query. in our case it should escape the paths that have spaces in them by
+     * enclosing them in single quotes
+     * 
+     * @throws Exception
+     */
+    public void testGetChildrenApiStatement() throws Exception {
+
+        QueryObjectModelFactory qomf = qm.getQOMFactory();
+        Source source1 = qomf.selector(NodeType.NT_BASE, "selector");
+        Column[] columns = new Column[] { qomf.column("selector", null, null) };
+        Constraint constraint2 = qomf.childNode("selector", n1.getPath());
+        QueryObjectModel qom = qomf.createQuery(source1, constraint2, null,
+                columns);
+        checkResult(executeSQL2Query(qom.getStatement()), 2);
+    }
+
+}

Propchange: jackrabbit/branches/2.2/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2PathEscapingTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: jackrabbit/branches/2.2/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/QOMFormatter.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.2/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/QOMFormatter.java?rev=1126557&r1=1126556&r2=1126557&view=diff
==============================================================================
--- jackrabbit/branches/2.2/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/QOMFormatter.java
(original)
+++ jackrabbit/branches/2.2/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/sql2/QOMFormatter.java
Mon May 23 15:59:13 2011
@@ -508,8 +508,15 @@ public class QOMFormatter implements Que
         if (isSimpleName(path)) {
             append(path);
         } else {
+            boolean needQuotes = path.contains(" ");
             append("[");
+            if (needQuotes) {
+                append("'");
+            }
             append(path);
+            if (needQuotes) {
+                append("'");
+            }
             append("]");
         }
     }



Mime
View raw message