Author: thomasm
Date: Thu Jan 30 09:18:35 2014
New Revision: 1562749

URL: http://svn.apache.org/r1562749
Log:
OAK-1369 XPath queries: fail if a @ is missing in front of property names

Modified:
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
    
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/XPathToSQL2Converter.java

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java?rev=1562749&r1=1562748&r2=1562749&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Expression.java
 Thu Jan 30 09:18:35 2014
@@ -180,6 +180,10 @@ abstract class Expression {
             if (right == null) {
                 rightExpr = "";
             } else {
+                if (left != null && left instanceof Property && ((Property) 
left).implicitAsterisk) {
+                    throw new IllegalArgumentException(
+                            "Missing @ in front of the property name: " + 
left);
+                }
                 if (leftExprIsName && !"like".equals(operator)) {
                     // need to de-escape _x0020_ and so on
                     if (!(right instanceof Literal)) {
@@ -382,10 +386,12 @@ abstract class Expression {
     
         final Selector selector;
         final String name;
+        final boolean implicitAsterisk;
     
-        Property(Selector selector, String name) {
+        Property(Selector selector, String name, boolean implicitAsterisk) {
             this.selector = selector;
             this.name = name;
+            this.implicitAsterisk = implicitAsterisk;
         }
     
         @Override

Modified: 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
URL: 
http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java?rev=1562749&r1=1562748&r2=1562749&view=diff
==============================================================================
--- 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
 (original)
+++ 
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/xpath/Statement.java
 Thu Jan 30 09:18:35 2014
@@ -138,18 +138,18 @@ public class Statement {
         
         // select ...
         buff.append("select ");
-        buff.append(new Expression.Property(columnSelector, 
QueryImpl.JCR_PATH).toString());
+        buff.append(new Expression.Property(columnSelector, 
QueryImpl.JCR_PATH, false).toString());
         if (selectors.size() > 1) {
             buff.append(" as 
").append('[').append(QueryImpl.JCR_PATH).append(']');
         }
         buff.append(", ");
-        buff.append(new Expression.Property(columnSelector, 
QueryImpl.JCR_SCORE).toString());
+        buff.append(new Expression.Property(columnSelector, 
QueryImpl.JCR_SCORE, false).toString());
         if (selectors.size() > 1) {
             buff.append(" as 
").append('[').append(QueryImpl.JCR_SCORE).append(']');
         }
         if (columnList.isEmpty()) {
             buff.append(", ");
-            buff.append(new Expression.Property(columnSelector, 
"*").toString());
+            buff.append(new Expression.Property(columnSelector, "*", 
false).toString());
         } else {
             for (int i = 0; i < columnList.size(); i++) {
                 buff.append(", ");

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=1562749&r1=1562748&r2=1562749&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
 Thu Jan 30 09:18:35 2014
@@ -197,7 +197,7 @@ public class XPathToSQL2Converter {
             } else if (readIf("rep:excerpt")) {
                 rewindSelector();
                 readExcerpt();
-                Expression.Property p = new 
Expression.Property(currentSelector, "rep:excerpt");
+                Expression.Property p = new 
Expression.Property(currentSelector, "rep:excerpt", false);
                 statement.addSelectColumn(p);
             } else if (readIf("(")) {
                 rewindSelector();
@@ -207,7 +207,7 @@ public class XPathToSQL2Converter {
                         statement.addSelectColumn(p);
                     } else if (readIf("rep:excerpt")) {
                         readExcerpt();
-                        Expression.Property p = new 
Expression.Property(currentSelector, "rep:excerpt");
+                        Expression.Property p = new 
Expression.Property(currentSelector, "rep:excerpt", false);
                         statement.addSelectColumn(p);
                     }
                 } while (readIf("|"));
@@ -535,7 +535,7 @@ public class XPathToSQL2Converter {
                 } else {
                     buff.append(readPathSegment());
                 }
-                return new Expression.Property(currentSelector, 
buff.toString());
+                return new Expression.Property(currentSelector, 
buff.toString(), false);
             } else {
                 break;
             }
@@ -556,7 +556,7 @@ public class XPathToSQL2Converter {
             } else {
                 buff.append("/*");
             }
-            return new Expression.Property(currentSelector, buff.toString());
+            return new Expression.Property(currentSelector, buff.toString(), 
true);
         }
         throw getSyntaxError();
     }
@@ -647,9 +647,9 @@ public class XPathToSQL2Converter {
 
     private Expression.Property readProperty() throws ParseException {
         if (readIf("*")) {
-            return new Expression.Property(currentSelector, "*");
+            return new Expression.Property(currentSelector, "*", false);
         }
-        return new Expression.Property(currentSelector, readPathSegment());
+        return new Expression.Property(currentSelector, readPathSegment(), 
false);
     }
     
     private void readExcerpt() throws ParseException {


Reply via email to