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/07 16:35:22 UTC

svn commit: r1556247 - in /jackrabbit/oak/trunk: oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/ oak-core/src/test/resources/org/apache/jackrabbit/oak/query/ oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/

Author: thomasm
Date: Tue Jan  7 15:35:21 2014
New Revision: 1556247

URL: http://svn.apache.org/r1556247
Log:
OAK-1308 XPath queries with ISO9075 escaped properties don't work

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java
    jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
    jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java?rev=1556247&r1=1556246&r2=1556247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java Tue Jan  7 15:35:21 2014
@@ -516,7 +516,7 @@ public class XPathToSQL2Converter {
         boolean isPath = false;
         while (true) {
             if (currentTokenType == IDENTIFIER) {
-                String name = readIdentifier();
+                String name = readPathSegment();
                 buff.append(name);
             } else if (readIf("*")) {
                 // any node
@@ -533,7 +533,7 @@ public class XPathToSQL2Converter {
                     // xpath supports @*, even thought jackrabbit may not
                     buff.append('*');
                 } else {
-                    buff.append(readIdentifier());
+                    buff.append(readPathSegment());
                 }
                 return new Expression.Property(currentSelector, buff.toString());
             } else {
@@ -649,7 +649,7 @@ public class XPathToSQL2Converter {
         if (readIf("*")) {
             return new Expression.Property(currentSelector, "*");
         }
-        return new Expression.Property(currentSelector, readIdentifier());
+        return new Expression.Property(currentSelector, readPathSegment());
     }
     
     private void readExcerpt() throws ParseException {

Modified: jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt?rev=1556247&r1=1556246&r2=1556247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/resources/org/apache/jackrabbit/oak/query/xpath.txt Tue Jan  7 15:35:21 2014
@@ -23,6 +23,11 @@
 # * new tests are typically be added on top, after the syntax docs
 # * use ascii character only
 
+# de-escape _x00.._
+
+xpath2sql /jcr:root//_x002e_test/element(*,rep:User)[_x002e_tokens/@jcr:primaryType]
+select b.[jcr:path] as [jcr:path], b.[jcr:score] as [jcr:score], b.* from [nt:base] as a inner join [rep:User] as b on ischildnode(b, a) where name(a) = '.test' and isdescendantnode(a, '/') and b.[.tokens/jcr:primaryType] is not null /* xpath: /jcr:root//_x002e_test/element(*,rep:User)[_x002e_tokens/@jcr:primaryType] */
+
 # union and in(..)
 
 xpath2sql //*[@x = 1 or @x = 2]

Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java?rev=1556247&r1=1556246&r2=1556247&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/query/QueryTest.java Tue Jan  7 15:35:21 2014
@@ -427,6 +427,31 @@ public class QueryTest extends AbstractR
         assertEquals("p1 p2", row.getValues()[0].getString());
     }
 
+    @SuppressWarnings("deprecation")
+    @Test
+    public void xpathEscapeTest() throws RepositoryException {
+        Session writer = createAdminSession();
+        Session reader = createAdminSession();
+        try {
+            Node rootNode = writer.getRootNode();
+            Node node = rootNode.addNode("test", "nt:unstructured");
+            node.addNode(".tokens");
+            writer.save();
+
+            QueryManager qm = reader.getWorkspace().getQueryManager();
+            Query q = qm.createQuery("/jcr:root//*[_x002e_tokens/@jcr:primaryType]", Query.XPATH);
+            NodeIterator res = q.execute().getNodes();
+            assertEquals(1, res.getSize());
+        } finally {
+            if (reader != null) {
+                reader.logout();
+            }
+            if (writer != null) {
+                writer.logout();
+            }
+        }
+    }
+
     @Test
     public void testOak1096() throws RepositoryException {
         Session writer = createAdminSession();