You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by al...@apache.org on 2011/11/29 12:48:35 UTC
svn commit: r1207838 - in /jackrabbit/trunk:
jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java
jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/OperandEvaluator.java
Author: alexparvulescu
Date: Tue Nov 29 11:48:34 2011
New Revision: 1207838
URL: http://svn.apache.org/viewvc?rev=1207838&view=rev
Log:
JCR-3159 LOWER operand with nested LOCALNAME operand not work with SQL2
Modified:
jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java
jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/OperandEvaluator.java
Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java?rev=1207838&r1=1207837&r2=1207838&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java (original)
+++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/SQL2NodeLocalNameTest.java Tue Nov 29 11:48:34 2011
@@ -91,4 +91,31 @@ public class SQL2NodeLocalNameTest exten
+ testRootNode.getPath()
+ "]) AND localname(NODE) like '%' "), 2);
}
+
+ /**
+ * test for JCR-3159
+ */
+ public void testLowerLocalName() throws Exception {
+ checkResult(
+ executeSQL2Query("SELECT * FROM [nt:base] as NODE WHERE LOWER(localname(NODE)) like 'sql2nodelocalnametest%'"),
+ 2);
+ }
+
+ /**
+ * test for JCR-3159
+ */
+ public void testUpperLocalName() throws Exception {
+ checkResult(
+ executeSQL2Query("SELECT * FROM [nt:base] as NODE WHERE UPPER(localname(NODE)) like 'SQL2NODELOCALNAMETEST%'"),
+ 2);
+ }
+
+ /**
+ * test for JCR-3159
+ */
+ public void testLowerName() throws Exception {
+ checkResult(
+ executeSQL2Query("SELECT * FROM [nt:base] as NODE WHERE LOWER(name(NODE)) like 'sql2nodelocalnametest%'"),
+ 2);
+ }
}
Modified: jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/OperandEvaluator.java
URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/OperandEvaluator.java?rev=1207838&r1=1207837&r2=1207838&view=diff
==============================================================================
--- jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/OperandEvaluator.java (original)
+++ jackrabbit/trunk/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/query/qom/OperandEvaluator.java Tue Nov 29 11:48:34 2011
@@ -188,10 +188,13 @@ public class OperandEvaluator {
return new Value[] { factory.createValue(score) };
} else if (operand instanceof NodeName) {
NodeName nn = (NodeName) operand;
- Value value = factory.createValue(
- row.getNode(nn.getSelectorName()).getName(),
- PropertyType.NAME);
- return new Value[] { value };
+ String name = row.getNode(nn.getSelectorName()).getName();
+ // root node
+ if ("".equals(name)) {
+ return new Value[] { factory.createValue(name,
+ PropertyType.STRING) };
+ }
+ return new Value[] { factory.createValue(name, PropertyType.NAME) };
} else if (operand instanceof Length) {
return getLengthValues((Length) operand, row);
} else if (operand instanceof LowerCase) {
@@ -227,9 +230,13 @@ public class OperandEvaluator {
return new Value[] { factory.createValue(defaultScore) };
}
if (operand instanceof NodeName) {
- Value value = factory
- .createValue(node.getName(), PropertyType.NAME);
- return new Value[] { value };
+ String name = node.getName();
+ // root node
+ if ("".equals(name)) {
+ return new Value[] { factory.createValue(name,
+ PropertyType.STRING) };
+ }
+ return new Value[] { factory.createValue(name, PropertyType.NAME) };
}
if (operand instanceof Length) {
return getLengthValues((Length) operand, node);
@@ -415,6 +422,11 @@ public class OperandEvaluator {
private Value[] getNodeLocalNameValues(NodeLocalName operand, Node node)
throws RepositoryException {
String name = node.getName();
+
+ // root node has no local name
+ if ("".equals(name)) {
+ return new Value[] { factory.createValue("", PropertyType.STRING) };
+ }
int colon = name.indexOf(':');
if (colon != -1) {
name = name.substring(colon + 1);