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 {