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();