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 2012/04/05 15:25:09 UTC
svn commit: r1309840 -
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
Author: thomasm
Date: Thu Apr 5 13:25:09 2012
New Revision: 1309840
URL: http://svn.apache.org/viewvc?rev=1309840&view=rev
Log:
OAK-28 Query implementation (temporarily support relative properties in SQL-2 to simplify XPath to SQL-2 conversion)
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java?rev=1309840&r1=1309839&r2=1309840&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java Thu Apr 5 13:25:09 2012
@@ -18,6 +18,9 @@
*/
package org.apache.jackrabbit.oak.query.ast;
+import org.apache.jackrabbit.mk.json.JsopTokenizer;
+import org.apache.jackrabbit.mk.simple.NodeImpl;
+import org.apache.jackrabbit.mk.util.PathUtils;
import org.apache.jackrabbit.oak.query.CoreValue;
import org.apache.jackrabbit.oak.query.index.Filter;
@@ -53,7 +56,28 @@ public class PropertyValueImpl extends D
@Override
public CoreValue currentValue() {
- return selector.currentProperty(propertyName);
+ if (propertyName.indexOf('/') < 0) {
+ return selector.currentProperty(propertyName);
+ }
+ // TODO really support relative properties?
+ NodeImpl n = selector.currentNode();
+ String[] elements = PathUtils.split(propertyName);
+ for (int i = 0; i < elements.length - 1; i++) {
+ String p = elements[i];
+ if (!n.exists(p)) {
+ return null;
+ }
+ n = n.getNode(p);
+ }
+ String name = PathUtils.getName(propertyName);
+ if (!n.hasProperty(name)) {
+ return null;
+ }
+ // TODO data type mapping
+ String value = n.getProperty(name);
+ value = JsopTokenizer.decodeQuoted(value);
+ return query.getValueFactory().createValue(value);
+
}
public void bindSelector(SourceImpl source) {