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 al...@apache.org on 2012/10/03 12:50:11 UTC

svn commit: r1393402 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query: Query.java ast/NodeNameImpl.java

Author: alexparvulescu
Date: Wed Oct  3 10:50:11 2012
New Revision: 1393402

URL: http://svn.apache.org/viewvc?rev=1393402&view=rev
Log:
OAK-328 jcr:like(fn:name(), '%:content') should not match jcr:content

Modified:
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1393402&r1=1393401&r2=1393402&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java Wed Oct  3 10:50:11 2012
@@ -474,7 +474,7 @@ public class Query {
             case PropertyType.DECIMAL:
                 return vf.createValue(v.getString(), PropertyType.DECIMAL);
             case PropertyType.NAME:
-                return vf.createValue(getOakPath(v.getString()), PropertyType.NAME);
+                return vf.createValue(getOakPath(v.getString(), true), PropertyType.NAME);
             case PropertyType.PATH:
                 return vf.createValue(v.getString(), PropertyType.PATH);
             case PropertyType.REFERENCE:
@@ -504,7 +504,7 @@ public class Query {
         }
     }
 
-    public String getOakPath(String jcrPath) {
+    public String getOakPath(String jcrPath, boolean errorOnInvalidPath) {
         NamePathMapper m = getNamePathMapper();
         if (m == null) {
             // to simplify testing, a getNamePathMapper isn't required
@@ -512,6 +512,9 @@ public class Query {
         }
         String p = m.getOakPath(jcrPath);
         if (p == null) {
+            if (!errorOnInvalidPath) {
+                return null;
+            }
             throw new IllegalArgumentException("Not a valid JCR path: " + jcrPath);
         }
         return p;

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1393402&r1=1393401&r2=1393402&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java Wed Oct  3 10:50:11 2012
@@ -77,6 +77,10 @@ public class NodeNameImpl extends Dynami
         String path = v.getString();
         // Name escaping (convert _x0020_ to space)
         path = decodeName(path);
+        if (path == null) {
+            f.setAlwaysFalse();
+            return;
+        }
         if (PathUtils.isAbsolute(path)) {
             throw new IllegalArgumentException("NAME() comparison with absolute path are not allowed: " + path);
         }
@@ -95,7 +99,7 @@ public class NodeNameImpl extends Dynami
         // Name escaping (convert _x0020_ to space)
         path = ISO9075.decode(path);
         // normalize paths (./name > name)
-        path = query.getOakPath(path);
+        path = query.getOakPath(path, false);
         return path;
     }