You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by sc...@apache.org on 2012/10/03 10:25:42 UTC
svn commit: r1393342 - in /jackrabbit/trunk/jackrabbit-spi-commons/src:
main/java/org/apache/jackrabbit/spi/commons/query/xpath/
test/java/org/apache/jackrabbit/spi/commons/query/xpath/
Author: schans
Date: Wed Oct 3 08:25:42 2012
New Revision: 1393342
URL: http://svn.apache.org/viewvc?rev=1393342&view=rev
Log:
JCR-3435: Fix NPE for xpath query with child axis and star name
Modified:
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java
jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/XPathQueryBuilder.java
jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormatTest.java
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java?rev=1393342&r1=1393341&r2=1393342&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormat.java Wed Oct 3 08:25:42 2012
@@ -348,7 +348,7 @@ class QueryFormat implements QueryNodeVi
PathQueryNode relPath = node.getRelativePath();
if (relPath == null) {
propPath.append(".");
- } else if (relPath.getNumOperands() > 0 && relPath.getPathSteps()[0].getNameTest().equals(XPathQueryBuilder.FN_POSITION_FULL)) {
+ } else if (relPath.getNumOperands() > 0 && XPathQueryBuilder.FN_POSITION_FULL.equals(relPath.getPathSteps()[0].getNameTest())) {
propPath.append(resolver.getJCRName(XPathQueryBuilder.FN_POSITION_FULL));
} else {
LocationStepQueryNode[] steps = relPath.getPathSteps();
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/XPathQueryBuilder.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/XPathQueryBuilder.java?rev=1393342&r1=1393341&r2=1393342&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/XPathQueryBuilder.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/XPathQueryBuilder.java Wed Oct 3 08:25:42 2012
@@ -425,8 +425,13 @@ public class XPathQueryBuilder implement
}
PathQueryNode relPath = tmp.getRelativePath();
LocationStepQueryNode[] steps = relPath.getPathSteps();
-
- tmpRelPath.addLast(steps[steps.length-1].getNameTest());
+
+ Name nameTest = steps[steps.length-1].getNameTest();
+ if (nameTest==null) {
+ // see LocationStepQueryNode javadoc on when getNameTest()==null: when it was a star (asterisk)
+ nameTest = RelationQueryNode.STAR_NAME_TEST;
+ }
+ tmpRelPath.addLast(nameTest);
}
}
break;
@@ -956,7 +961,7 @@ public class XPathQueryBuilder implement
}
if (queryNode.getType() == QueryNode.TYPE_PATH) {
PathQueryNode pathNode = (PathQueryNode) queryNode;
-
+
pathNode.addPathStep(createDerefQueryNode(node, descendant, pathNode));
} else if (queryNode.getType() == QueryNode.TYPE_RELATION) {
RelationQueryNode relNode = (RelationQueryNode) queryNode;
Modified: jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormatTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormatTest.java?rev=1393342&r1=1393341&r2=1393342&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormatTest.java (original)
+++ jackrabbit/trunk/jackrabbit-spi-commons/src/test/java/org/apache/jackrabbit/spi/commons/query/xpath/QueryFormatTest.java Wed Oct 3 08:25:42 2012
@@ -67,6 +67,14 @@ public class QueryFormatTest extends Tes
checkStatement("//element(*, foo)[foo/*/@bar = 'bla']");
}
+ public void testStarNameAtBeginningOfPredicate() throws Exception {
+ checkStatement("//element(*, foo)[*/*/@bar = 'bla']");
+ }
+
+ public void testChildStarName() throws Exception {
+ checkStatement("//programs//*[*/@sunday]");
+ }
+
public void testRepSimilar() throws Exception {
checkStatement("//element(*, foo)[rep:similar(foo, '/some/path')]");
}