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/03/22 17:08:45 UTC
svn commit: r1303867 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query:
./ ast/ index/
Author: thomasm
Date: Thu Mar 22 16:08:44 2012
New Revision: 1303867
URL: http://svn.apache.org/viewvc?rev=1303867&view=rev
Log:
OAK-28 Query implementation (Row.toString(), Filter.toString(), ClassCastException for negative numbers)
Removed:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/PropertyType.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Value.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ValueFactory.java
Modified:
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java Thu Mar 22 16:08:44 2012
@@ -18,6 +18,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
+import java.util.List;
import org.apache.jackrabbit.mk.api.MicroKernel;
import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
@@ -52,17 +53,17 @@ public class Query {
final SourceImpl source;
final ConstraintImpl constraint;
- final HashMap<String, Value> bindVariableMap = new HashMap<String, Value>();
+ final HashMap<String, ScalarImpl> bindVariableMap = new HashMap<String, ScalarImpl>();
final ArrayList<SelectorImpl> selectors = new ArrayList<SelectorImpl>();
private MicroKernel mk;
private final OrderingImpl[] orderings;
- private final ColumnImpl[] columns;
+ private ColumnImpl[] columns;
private boolean explain;
private long limit;
private long offset;
private boolean prepared;
- private final ValueFactory valueFactory = new ValueFactory();
+ private final ScalarFactory valueFactory = new ScalarFactory();
Query(SourceImpl source, ConstraintImpl constraint, OrderingImpl[] orderings,
ColumnImpl[] columns) {
@@ -235,7 +236,7 @@ public class Query {
return source;
}
- void bindValue(String varName, Value value) {
+ void bindValue(String varName, ScalarImpl value) {
bindVariableMap.put(varName, value);
}
@@ -251,7 +252,7 @@ public class Query {
this.offset = offset;
}
- public ValueFactory getValueFactory() {
+ public ScalarFactory getValueFactory() {
return valueFactory;
}
@@ -263,7 +264,8 @@ public class Query {
prepare();
if (explain) {
String plan = source.getPlan();
- Row r = new Row(this, null, new Value[] { valueFactory.createValue(plan) }, null);
+ columns = new ColumnImpl[] { new ColumnImpl("explain", "plan", "plan")};
+ Row r = new Row(this, new String[0], new ScalarImpl[] { valueFactory.createValue(plan) }, null);
return Arrays.asList(r).iterator();
}
RowIterator it = new RowIterator(revisionId);
@@ -280,11 +282,11 @@ public class Query {
return list.iterator();
}
- public int compareRows(Value[] orderValues, Value[] orderValues2) {
+ public int compareRows(ScalarImpl[] orderValues, ScalarImpl[] orderValues2) {
int comp = 0;
for (int i = 0, size = orderings.length; i < size; i++) {
- Value a = orderValues[i];
- Value b = orderValues2[i];
+ ScalarImpl a = orderValues[i];
+ ScalarImpl b = orderValues2[i];
if (a == null || b == null) {
if (a == b) {
comp = 0;
@@ -383,17 +385,17 @@ public class Query {
paths[i] = s.currentPath();
}
int columnCount = columns.length;
- Value[] values = new Value[columnCount];
+ ScalarImpl[] values = new ScalarImpl[columnCount];
for (int i = 0; i < columnCount; i++) {
ColumnImpl c = columns[i];
values[i] = c.currentValue();
}
- Value[] orderValues;
+ ScalarImpl[] orderValues;
if (orderings == null) {
orderValues = null;
} else {
int size = orderings.length;
- orderValues = new Value[size];
+ orderValues = new ScalarImpl[size];
for (int i = 0; i < size; i++) {
orderValues[i] = orderings[i].getOperand().currentValue();
}
@@ -428,12 +430,16 @@ public class Query {
return offset;
}
- public Value getBindVariableValue(String bindVariableName) {
- Value v = bindVariableMap.get(bindVariableName);
+ public ScalarImpl getBindVariableValue(String bindVariableName) {
+ ScalarImpl v = bindVariableMap.get(bindVariableName);
if (v == null) {
throw new RuntimeException("Bind variable value not set: " + bindVariableName);
}
return v;
}
+ public List<SelectorImpl> getSelectors() {
+ return Collections.unmodifiableList(selectors);
+ }
+
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java Thu Mar 22 16:08:44 2012
@@ -28,7 +28,7 @@ public class QueryEngine {
public static final String SQL2 = "sql2";
private final MicroKernel mk;
- private final ValueFactory vf = new ValueFactory();
+ private final ScalarFactory vf = new ScalarFactory();
private final SQL2Parser parserSQL2;
private QueryEngine(MicroKernel mk) {
@@ -40,7 +40,7 @@ public class QueryEngine {
return new QueryEngine(mk);
}
- public Iterator<Row> executeQuery(String language, String query, Map<String, Value> bindings) throws ParseException {
+ public Iterator<Row> executeQuery(String language, String query, Map<String, ScalarImpl> bindings) throws ParseException {
Query q;
if (SQL2.equals(language)) {
q = parserSQL2.parse(query);
@@ -53,7 +53,7 @@ public class QueryEngine {
}
q.setMicroKernel(mk);
if (bindings != null) {
- for (Entry<String, Value> e : bindings.entrySet()) {
+ for (Entry<String, ScalarImpl> e : bindings.entrySet()) {
q.bindValue(e.getKey(), e.getValue());
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java Thu Mar 22 16:08:44 2012
@@ -16,21 +16,25 @@
*/
package org.apache.jackrabbit.oak.query;
+import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
+import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
+
/**
* A query result row that keeps all data in memory.
*/
public class Row implements Comparable<Row> {
- private final Query qom;
+ private final Query query;
private final String[] paths;
- private final Value[] values;
- private final Value[] orderValues;
+ private final ScalarImpl[] values;
+ private final ScalarImpl[] orderValues;
- Row(Query qom, String[] paths, Value[] values, Value[] orderValues) {
- this.qom = qom;
+ Row(Query query, String[] paths, ScalarImpl[] values, ScalarImpl[] orderValues) {
+ this.query = query;
this.paths = paths;
this.values = values;
this.orderValues = orderValues;
+ System.out.println(toString());
}
public String getPath() {
@@ -41,22 +45,47 @@ public class Row implements Comparable<R
}
public String getPath(String selectorName) {
- return paths[qom.getSelectorIndex(selectorName)];
+ int index = query.getSelectorIndex(selectorName);
+ if (paths == null || index >= paths.length) {
+ return null;
+ }
+ return paths[index];
}
- public Value getValue(String columnName) {
- return values[qom.getColumnIndex(columnName)];
+ public ScalarImpl getValue(String columnName) {
+ return values[query.getColumnIndex(columnName)];
}
- public Value[] getValues() {
- Value[] v2 = new Value[values.length];
+ public ScalarImpl[] getValues() {
+ ScalarImpl[] v2 = new ScalarImpl[values.length];
System.arraycopy(values, 0, v2, 0, v2.length);
return v2;
}
@Override
public int compareTo(Row o) {
- return qom.compareRows(orderValues, o.orderValues);
+ return query.compareRows(orderValues, o.orderValues);
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder buff = new StringBuilder();
+ for (SelectorImpl s : query.getSelectors()) {
+ String n = s.getSelectorName();
+ String p = getPath(n);
+ if (p != null) {
+ buff.append(n).append(": ").append(p).append(" ");
+ }
+ }
+ ColumnImpl[] cols = query.getColumns();
+ for (int i = 0; i < values.length; i++) {
+ ColumnImpl c = cols[i];
+ String n = c.getColumnName();
+ if (n != null) {
+ buff.append(n).append(": ").append(values[i]).append(" ");
+ }
+ }
+ return buff.toString();
}
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java Thu Mar 22 16:08:44 2012
@@ -61,7 +61,7 @@ public class SQL2Parser {
private int currentTokenType;
private String currentToken;
private boolean currentTokenQuoted;
- private Value currentValue;
+ private ScalarImpl currentValue;
private ArrayList<String> expected;
// The bind variables
@@ -75,14 +75,14 @@ public class SQL2Parser {
private boolean allowNumberLiterals = true;
private final AstElementFactory factory = new AstElementFactory();
- private final ValueFactory valueFactory;
+ private final ScalarFactory valueFactory;
/**
* Create a new parser. A parser can be re-used, but it is not thread safe.
*
* @param valueFactory the value factory
*/
- public SQL2Parser(ValueFactory valueFactory) {
+ public SQL2Parser(ScalarFactory valueFactory) {
this.valueFactory = valueFactory;
}
@@ -136,7 +136,7 @@ public class SQL2Parser {
private String readName() throws ParseException {
if (readIf("[")) {
if (currentTokenType == VALUE) {
- Value value = readString();
+ ScalarImpl value = readString();
read("]");
return value.getString();
} else {
@@ -442,16 +442,16 @@ public class SQL2Parser {
}
int valueType = currentValue.getType();
switch (valueType) {
- case PropertyType.LONG:
+ case ScalarType.LONG:
currentValue = valueFactory.createValue(-currentValue.getLong());
break;
- case PropertyType.DOUBLE:
+ case ScalarType.DOUBLE:
currentValue = valueFactory.createValue(-currentValue.getDouble());
break;
- case PropertyType.BOOLEAN:
+ case ScalarType.BOOLEAN:
currentValue = valueFactory.createValue(!currentValue.getBoolean());
break;
- case PropertyType.DECIMAL:
+ case ScalarType.DECIMAL:
currentValue = valueFactory.createValue(currentValue.getDecimal().negate());
break;
default:
@@ -487,7 +487,7 @@ public class SQL2Parser {
throw getSyntaxError("literal");
}
LiteralImpl literal = (LiteralImpl) op;
- Value value = literal.getLiteralValue();
+ ScalarImpl value = literal.getLiteralValue();
read("AS");
value = parseCastAs(value);
read(")");
@@ -505,11 +505,11 @@ public class SQL2Parser {
* @param value the original value
* @return the literal
*/
- private LiteralImpl getUncastLiteral(Value value) throws ParseException {
+ private LiteralImpl getUncastLiteral(ScalarImpl value) throws ParseException {
return factory.literal(value);
}
- private Value parseCastAs(Value value) throws ParseException {
+ private ScalarImpl parseCastAs(ScalarImpl value) throws ParseException {
if (readIf("STRING")) {
return valueFactory.createValue(value.getString());
} else if (readIf("BINARY")) {
@@ -525,15 +525,15 @@ public class SQL2Parser {
} else if (readIf("BOOLEAN")) {
return valueFactory.createValue(value.getBoolean());
} else if (readIf("NAME")) {
- return valueFactory.createValue(value.getString(), PropertyType.NAME);
+ return valueFactory.createValue(value.getString(), ScalarType.NAME);
} else if (readIf("PATH")) {
- return valueFactory.createValue(value.getString(), PropertyType.PATH);
+ return valueFactory.createValue(value.getString(), ScalarType.PATH);
} else if (readIf("REFERENCE")) {
- return valueFactory.createValue(value.getString(), PropertyType.REFERENCE);
+ return valueFactory.createValue(value.getString(), ScalarType.REFERENCE);
} else if (readIf("WEAKREFERENCE")) {
- return valueFactory.createValue(value.getString(), PropertyType.WEAKREFERENCE);
+ return valueFactory.createValue(value.getString(), ScalarType.WEAKREFERENCE);
} else if (readIf("URI")) {
- return valueFactory.createValue(value.getString(), PropertyType.URI);
+ return valueFactory.createValue(value.getString(), ScalarType.URI);
} else {
throw getSyntaxError("data type (STRING|BINARY|...)");
}
@@ -654,11 +654,11 @@ public class SQL2Parser {
return s;
}
- private Value readString() throws ParseException {
+ private ScalarImpl readString() throws ParseException {
if (currentTokenType != VALUE) {
throw getSyntaxError("string value");
}
- Value value = currentValue;
+ ScalarImpl value = currentValue;
read();
return value;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java Thu Mar 22 16:08:44 2012
@@ -13,7 +13,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
/**
* A factory for syntax tree elements.
@@ -84,7 +84,7 @@ public class AstElementFactory {
return new LengthImpl(propertyValue);
}
- public LiteralImpl literal(Value literalValue) {
+ public LiteralImpl literal(ScalarImpl literalValue) {
return new LiteralImpl(literalValue);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
public class BindVariableValueImpl extends StaticOperandImpl {
@@ -43,7 +43,7 @@ public class BindVariableValueImpl exten
}
@Override
- Value currentValue() {
+ ScalarImpl currentValue() {
return query.getBindVariableValue(bindVariableName);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
public class ColumnImpl extends AstElement {
@@ -58,7 +58,7 @@ public class ColumnImpl extends AstEleme
}
}
- public Value currentValue() {
+ public ScalarImpl currentValue() {
if (propertyName == null) {
// TODO for SELECT * FROM queries, currently return the path (for testing only)
String p = selector.currentPath();
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java Thu Mar 22 16:08:44 2012
@@ -18,8 +18,8 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
-import org.apache.jackrabbit.oak.query.ValueFactory;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
+import org.apache.jackrabbit.oak.query.ScalarFactory;
import org.apache.jackrabbit.oak.query.index.Filter;
public class ComparisonImpl extends ConstraintImpl {
@@ -48,8 +48,8 @@ public class ComparisonImpl extends Cons
@Override
public boolean evaluate() {
- Value v1 = operand1.currentValue();
- Value v2 = operand2.currentValue();
+ ScalarImpl v1 = operand1.currentValue();
+ ScalarImpl v2 = operand2.currentValue();
if (v1 == null || v2 == null) {
// TODO comparison: what about (null <> x) ?
return false;
@@ -71,7 +71,7 @@ public class ComparisonImpl extends Cons
return false;
}
- private static boolean evaluateLike(Value v1, Value v2) {
+ private static boolean evaluateLike(ScalarImpl v1, ScalarImpl v2) {
LikePattern like = new LikePattern(v2.getString());
return like.matches(v1.getString());
}
@@ -255,7 +255,7 @@ public class ComparisonImpl extends Cons
@Override
public void apply(Filter f) {
- Value v = operand2.currentValue();
+ ScalarImpl v = operand2.currentValue();
if (v != null) {
if (operator == Operator.LIKE) {
String pattern;
@@ -266,7 +266,7 @@ public class ComparisonImpl extends Cons
if (lowerBound == null && upperBound == null) {
// ignore
} else {
- ValueFactory vf = query.getValueFactory();
+ ScalarFactory vf = query.getValueFactory();
if (lowerBound != null) {
operand1.apply(f, Operator.GREATER_OR_EQUAL, vf.createValue(lowerBound));
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java Thu Mar 22 16:08:44 2012
@@ -16,13 +16,13 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public abstract class DynamicOperandImpl extends AstElement {
- public abstract Value currentValue();
+ public abstract ScalarImpl currentValue();
- public abstract void apply(Filter f, Operator operator, Value v);
+ public abstract void apply(Filter f, Operator operator, ScalarImpl v);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class EquiJoinConditionImpl extends JoinConditionImpl {
@@ -79,19 +79,19 @@ public class EquiJoinConditionImpl exten
@Override
public boolean evaluate() {
- Value v1 = selector1.currentProperty(property1Name);
+ ScalarImpl v1 = selector1.currentProperty(property1Name);
if (v1 == null) {
return false;
}
// TODO data type mapping
- Value v2 = selector2.currentProperty(property2Name);
+ ScalarImpl v2 = selector2.currentProperty(property2Name);
return v2 != null && v1.equals(v2);
}
@Override
public void apply(Filter f) {
- Value v1 = selector1.currentProperty(property1Name);
- Value v2 = selector2.currentProperty(property2Name);
+ ScalarImpl v1 = selector1.currentProperty(property1Name);
+ ScalarImpl v2 = selector2.currentProperty(property2Name);
if (f.getSelector() == selector1 && v2 != null) {
f.restrictProperty(property1Name, Operator.EQUAL, v2);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class FullTextSearchScoreImpl extends DynamicOperandImpl {
@@ -44,13 +44,13 @@ public class FullTextSearchScoreImpl ext
}
@Override
- public Value currentValue() {
+ public ScalarImpl currentValue() {
// TODO support evaluating fulltext conditions (score)
return null;
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
// TODO support fulltext index conditions (score)
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class LengthImpl extends DynamicOperandImpl {
@@ -44,8 +44,8 @@ public class LengthImpl extends DynamicO
}
@Override
- public Value currentValue() {
- Value v = propertyValue.currentValue();
+ public ScalarImpl currentValue() {
+ ScalarImpl v = propertyValue.currentValue();
if (v == null) {
return null;
}
@@ -55,7 +55,7 @@ public class LengthImpl extends DynamicO
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
// ignore
// TODO LENGTH(x) conditions: can use IS NOT NULL?
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java Thu Mar 22 16:08:44 2012
@@ -19,18 +19,18 @@
package org.apache.jackrabbit.oak.query.ast;
import org.apache.jackrabbit.oak.query.SQL2Parser;
-import org.apache.jackrabbit.oak.query.PropertyType;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
+import org.apache.jackrabbit.oak.query.ScalarType;
public class LiteralImpl extends StaticOperandImpl {
- private final Value value;
+ private final ScalarImpl value;
- public LiteralImpl(Value value) {
+ public LiteralImpl(ScalarImpl value) {
this.value = value;
}
- public Value getLiteralValue() {
+ public ScalarImpl getLiteralValue() {
return value;
}
@@ -42,28 +42,28 @@ public class LiteralImpl extends StaticO
@Override
public String toString() {
switch (value.getType()) {
- case PropertyType.BINARY:
+ case ScalarType.BINARY:
return cast("BINARY");
- case PropertyType.BOOLEAN:
+ case ScalarType.BOOLEAN:
return cast("BOOLEAN");
- case PropertyType.DATE:
+ case ScalarType.DATE:
return cast("DATE");
- case PropertyType.DECIMAL:
+ case ScalarType.DECIMAL:
return cast("DECIMAL");
- case PropertyType.DOUBLE:
- case PropertyType.LONG:
+ case ScalarType.DOUBLE:
+ case ScalarType.LONG:
return value.getString();
- case PropertyType.NAME:
+ case ScalarType.NAME:
return cast("NAME");
- case PropertyType.PATH:
+ case ScalarType.PATH:
return cast("PATH");
- case PropertyType.REFERENCE:
+ case ScalarType.REFERENCE:
return cast("REFERENCE");
- case PropertyType.STRING:
+ case ScalarType.STRING:
return escape();
- case PropertyType.URI:
+ case ScalarType.URI:
return cast("URI");
- case PropertyType.WEAKREFERENCE:
+ case ScalarType.WEAKREFERENCE:
return cast("WEAKREFERENCE");
default:
return escape();
@@ -79,7 +79,7 @@ public class LiteralImpl extends StaticO
}
@Override
- Value currentValue() {
+ ScalarImpl currentValue() {
return value;
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class LowerCaseImpl extends DynamicOperandImpl {
@@ -44,8 +44,8 @@ public class LowerCaseImpl extends Dynam
}
@Override
- public Value currentValue() {
- Value v = operand.currentValue();
+ public ScalarImpl currentValue() {
+ ScalarImpl v = operand.currentValue();
if (v == null) {
return null;
}
@@ -54,7 +54,7 @@ public class LowerCaseImpl extends Dynam
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
// ignore
// TODO UPPER(x) conditions: can use IS NOT NULL?
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java Thu Mar 22 16:08:44 2012
@@ -19,7 +19,7 @@
package org.apache.jackrabbit.oak.query.ast;
import org.apache.jackrabbit.mk.util.PathUtils;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class NodeLocalNameImpl extends DynamicOperandImpl {
@@ -53,7 +53,7 @@ public class NodeLocalNameImpl extends D
}
@Override
- public Value currentValue() {
+ public ScalarImpl currentValue() {
String name = PathUtils.getName(selector.currentPath());
int colon = name.indexOf(':');
// TODO LOCALNAME: evaluation of local name might not be correct
@@ -62,7 +62,7 @@ public class NodeLocalNameImpl extends D
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
// TODO support LOCALNAME index conditions
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java Thu Mar 22 16:08:44 2012
@@ -19,7 +19,7 @@
package org.apache.jackrabbit.oak.query.ast;
import org.apache.jackrabbit.mk.util.PathUtils;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class NodeNameImpl extends DynamicOperandImpl {
@@ -53,13 +53,13 @@ public class NodeNameImpl extends Dynami
}
@Override
- public Value currentValue() {
+ public ScalarImpl currentValue() {
String name = PathUtils.getName(selector.currentPath());
return query.getValueFactory().createValue(name);
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
// TODO support NAME(..) index conditions
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class PropertyExistenceImpl extends ConstraintImpl {
@@ -42,7 +42,7 @@ public class PropertyExistenceImpl exten
@Override
public boolean evaluate() {
- Value v = selector.currentProperty(propertyName);
+ ScalarImpl v = selector.currentProperty(propertyName);
return v != null;
}
@@ -67,7 +67,7 @@ public class PropertyExistenceImpl exten
@Override
public void apply(Filter f) {
if (f.getSelector() == selector) {
- f.restrictProperty(propertyName, Operator.NOT_EQUAL, (Value) null);
+ f.restrictProperty(propertyName, Operator.NOT_EQUAL, (ScalarImpl) null);
}
}
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=1303867&r1=1303866&r2=1303867&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 Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class PropertyValueImpl extends DynamicOperandImpl {
@@ -52,7 +52,7 @@ public class PropertyValueImpl extends D
}
@Override
- public Value currentValue() {
+ public ScalarImpl currentValue() {
return selector.currentProperty(propertyName);
}
@@ -64,7 +64,7 @@ public class PropertyValueImpl extends D
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
if (f.getSelector() == selector) {
f.restrictProperty(propertyName, operator, v);
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Thu Mar 22 16:08:44 2012
@@ -22,7 +22,7 @@ import org.apache.jackrabbit.mk.api.Micr
import org.apache.jackrabbit.mk.json.JsopTokenizer;
import org.apache.jackrabbit.mk.simple.NodeImpl;
import org.apache.jackrabbit.oak.query.Query;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Cursor;
import org.apache.jackrabbit.oak.query.index.Filter;
import org.apache.jackrabbit.oak.query.index.NodeReader;
@@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.query.i
public class SelectorImpl extends SourceImpl {
+ // TODO jcr:path isn't an official feature, support it?
private static final String PATH = "jcr:path";
protected NodeReader reader;
@@ -107,7 +108,7 @@ public class SelectorImpl extends Source
return cursor == null ? null : cursor.currentNode();
}
- public Value currentProperty(String propertyName) {
+ public ScalarImpl currentProperty(String propertyName) {
if (propertyName.equals(PATH)) {
String p = currentPath();
return p == null ? null : query.getValueFactory().createValue(p);
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java Thu Mar 22 16:08:44 2012
@@ -18,10 +18,10 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
public abstract class StaticOperandImpl extends AstElement {
- abstract Value currentValue();
+ abstract ScalarImpl currentValue();
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java Thu Mar 22 16:08:44 2012
@@ -18,7 +18,7 @@
*/
package org.apache.jackrabbit.oak.query.ast;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.index.Filter;
public class UpperCaseImpl extends DynamicOperandImpl {
@@ -44,8 +44,8 @@ public class UpperCaseImpl extends Dynam
}
@Override
- public Value currentValue() {
- Value v = operand.currentValue();
+ public ScalarImpl currentValue() {
+ ScalarImpl v = operand.currentValue();
if (v == null) {
return null;
}
@@ -54,7 +54,7 @@ public class UpperCaseImpl extends Dynam
}
@Override
- public void apply(Filter f, Operator operator, Value v) {
+ public void apply(Filter f, Operator operator, ScalarImpl v) {
// ignore
// TODO UPPER(x) conditions: can use IS NOT NULL?
}
Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java?rev=1303867&r1=1303866&r2=1303867&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java Thu Mar 22 16:08:44 2012
@@ -19,8 +19,9 @@
package org.apache.jackrabbit.oak.query.index;
import java.util.HashMap;
+import java.util.Map.Entry;
import org.apache.jackrabbit.mk.util.PathUtils;
-import org.apache.jackrabbit.oak.query.Value;
+import org.apache.jackrabbit.oak.query.ScalarImpl;
import org.apache.jackrabbit.oak.query.ast.Operator;
import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
@@ -106,7 +107,7 @@ public class Filter {
/**
* The first value to read, or null to read from the beginning.
*/
- public Value first;
+ public ScalarImpl first;
/**
* Whether values that match the first should be returned.
@@ -116,7 +117,7 @@ public class Filter {
/**
* The last value to read, or null to read until the end.
*/
- public Value last;
+ public ScalarImpl last;
/**
* Whether values that match the last should be returned.
@@ -228,14 +229,14 @@ public class Filter {
}
}
- public void restrictProperty(String propertyName, Operator op, Value value) {
+ public void restrictProperty(String propertyName, Operator op, ScalarImpl value) {
PropertyRestriction x = propertyRestrictions.get(propertyName);
if (x == null) {
x = new PropertyRestriction();
x.propertyName = propertyName;
propertyRestrictions.put(propertyName, x);
}
- Value oldFirst = x.first, oldLast = x.last;
+ ScalarImpl oldFirst = x.first, oldLast = x.last;
switch (op) {
case EQUAL:
x.first = maxValue(oldFirst, value);
@@ -276,20 +277,33 @@ public class Filter {
}
}
- static Value maxValue(Value a, Value b) {
+ static ScalarImpl maxValue(ScalarImpl a, ScalarImpl b) {
if (a == null) {
return b;
}
return a.compareTo(b) < 0 ? b : a;
}
- static Value minValue(Value a, Value b) {
+ static ScalarImpl minValue(ScalarImpl a, ScalarImpl b) {
if (a == null) {
return b;
}
return a.compareTo(b) < 0 ? a : b;
}
+ @Override
+ public String toString() {
+ StringBuilder buff = new StringBuilder();
+ if (alwaysFalse) {
+ return "(always false)";
+ }
+ buff.append("path: ").append(path).append(pathRestriction).append('\n');
+ for (Entry<String, PropertyRestriction> p : propertyRestrictions.entrySet()) {
+ buff.append("property ").append(p.getKey()).append(": ").append(p.getValue()).append('\n');
+ }
+ return buff.toString();
+ }
+
public void restrictPath(String addedPath, PathRestriction addedPathRestriction) {
// calculating the intersection of path restrictions
// this is ugly code, but I don't currently see a radically simpler method
Re: svn commit: r1303867 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query:
./ ast/ index/
Posted by Michael Dürig <md...@apache.org>.
Works again, thanks.
Michael
On 22.3.12 18:28, Thomas Mueller wrote:
> Hi,
>
> Sorry, my commit was incomplete (now sure why). It should be fixed now.
> Plus I removed the unnecessary System.out.
>
> Regards,
> Thomas
>
> On 3/22/12 6:35 PM, "Michael Dürig"<md...@apache.org> wrote:
>
>>
>> This seems to break the build. Tom could you please check that
>> everything compiles before you do a checkin?
>>
>> Michael
>>
>> On 22.3.12 16:08, thomasm@apache.org wrote:
>>> Author: thomasm
>>> Date: Thu Mar 22 16:08:44 2012
>>> New Revision: 1303867
>>>
>>> URL: http://svn.apache.org/viewvc?rev=1303867&view=rev
>>> Log:
>>> OAK-28 Query implementation (Row.toString(), Filter.toString(),
>>> ClassCastException for negative numbers)
>>>
>>> Removed:
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/PropertyType.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Value.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ValueFactory.java
>>> Modified:
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Query.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/QueryEngine.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Row.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/SQL2Parser.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/AstElementFactory.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/BindVariableValueImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ColumnImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ComparisonImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/DynamicOperandImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/EquiJoinConditionImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/FullTextSearchScoreImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LengthImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LiteralImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LowerCaseImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeLocalNameImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeNameImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyExistenceImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyValueImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/SelectorImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/StaticOperandImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/UpperCaseImpl.java
>>>
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/index/Filter.java
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Query.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/Query.java?rev=1303867&r1=1303866&r2=1303
>>> 867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Query.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Query.java Thu Mar 22 16:08:44 2012
>>> @@ -18,6 +18,7 @@ import java.util.Arrays;
>>> import java.util.Collections;
>>> import java.util.HashMap;
>>> import java.util.Iterator;
>>> +import java.util.List;
>>> import org.apache.jackrabbit.mk.api.MicroKernel;
>>> import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
>>> import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
>>> @@ -52,17 +53,17 @@ public class Query {
>>>
>>> final SourceImpl source;
>>> final ConstraintImpl constraint;
>>> - final HashMap<String, Value> bindVariableMap = new
>>> HashMap<String, Value>();
>>> + final HashMap<String, ScalarImpl> bindVariableMap = new
>>> HashMap<String, ScalarImpl>();
>>> final ArrayList<SelectorImpl> selectors = new
>>> ArrayList<SelectorImpl>();
>>>
>>> private MicroKernel mk;
>>> private final OrderingImpl[] orderings;
>>> - private final ColumnImpl[] columns;
>>> + private ColumnImpl[] columns;
>>> private boolean explain;
>>> private long limit;
>>> private long offset;
>>> private boolean prepared;
>>> - private final ValueFactory valueFactory = new ValueFactory();
>>> + private final ScalarFactory valueFactory = new ScalarFactory();
>>>
>>> Query(SourceImpl source, ConstraintImpl constraint,
>>> OrderingImpl[] orderings,
>>> ColumnImpl[] columns) {
>>> @@ -235,7 +236,7 @@ public class Query {
>>> return source;
>>> }
>>>
>>> - void bindValue(String varName, Value value) {
>>> + void bindValue(String varName, ScalarImpl value) {
>>> bindVariableMap.put(varName, value);
>>> }
>>>
>>> @@ -251,7 +252,7 @@ public class Query {
>>> this.offset = offset;
>>> }
>>>
>>> - public ValueFactory getValueFactory() {
>>> + public ScalarFactory getValueFactory() {
>>> return valueFactory;
>>> }
>>>
>>> @@ -263,7 +264,8 @@ public class Query {
>>> prepare();
>>> if (explain) {
>>> String plan = source.getPlan();
>>> - Row r = new Row(this, null, new Value[] {
>>> valueFactory.createValue(plan) }, null);
>>> + columns = new ColumnImpl[] { new ColumnImpl("explain",
>>> "plan", "plan")};
>>> + Row r = new Row(this, new String[0], new ScalarImpl[] {
>>> valueFactory.createValue(plan) }, null);
>>> return Arrays.asList(r).iterator();
>>> }
>>> RowIterator it = new RowIterator(revisionId);
>>> @@ -280,11 +282,11 @@ public class Query {
>>> return list.iterator();
>>> }
>>>
>>> - public int compareRows(Value[] orderValues, Value[] orderValues2) {
>>> + public int compareRows(ScalarImpl[] orderValues, ScalarImpl[]
>>> orderValues2) {
>>> int comp = 0;
>>> for (int i = 0, size = orderings.length; i< size; i++) {
>>> - Value a = orderValues[i];
>>> - Value b = orderValues2[i];
>>> + ScalarImpl a = orderValues[i];
>>> + ScalarImpl b = orderValues2[i];
>>> if (a == null || b == null) {
>>> if (a == b) {
>>> comp = 0;
>>> @@ -383,17 +385,17 @@ public class Query {
>>> paths[i] = s.currentPath();
>>> }
>>> int columnCount = columns.length;
>>> - Value[] values = new Value[columnCount];
>>> + ScalarImpl[] values = new ScalarImpl[columnCount];
>>> for (int i = 0; i< columnCount; i++) {
>>> ColumnImpl c = columns[i];
>>> values[i] = c.currentValue();
>>> }
>>> - Value[] orderValues;
>>> + ScalarImpl[] orderValues;
>>> if (orderings == null) {
>>> orderValues = null;
>>> } else {
>>> int size = orderings.length;
>>> - orderValues = new Value[size];
>>> + orderValues = new ScalarImpl[size];
>>> for (int i = 0; i< size; i++) {
>>> orderValues[i] =
>>> orderings[i].getOperand().currentValue();
>>> }
>>> @@ -428,12 +430,16 @@ public class Query {
>>> return offset;
>>> }
>>>
>>> - public Value getBindVariableValue(String bindVariableName) {
>>> - Value v = bindVariableMap.get(bindVariableName);
>>> + public ScalarImpl getBindVariableValue(String bindVariableName) {
>>> + ScalarImpl v = bindVariableMap.get(bindVariableName);
>>> if (v == null) {
>>> throw new RuntimeException("Bind variable value not set:
>>> " + bindVariableName);
>>> }
>>> return v;
>>> }
>>>
>>> + public List<SelectorImpl> getSelectors() {
>>> + return Collections.unmodifiableList(selectors);
>>> + }
>>> +
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/QueryEngine.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/QueryEngine.java?rev=1303867&r1=1303866&r
>>> 2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/QueryEngine.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/QueryEngine.java Thu Mar 22 16:08:44 2012
>>> @@ -28,7 +28,7 @@ public class QueryEngine {
>>> public static final String SQL2 = "sql2";
>>>
>>> private final MicroKernel mk;
>>> - private final ValueFactory vf = new ValueFactory();
>>> + private final ScalarFactory vf = new ScalarFactory();
>>> private final SQL2Parser parserSQL2;
>>>
>>> private QueryEngine(MicroKernel mk) {
>>> @@ -40,7 +40,7 @@ public class QueryEngine {
>>> return new QueryEngine(mk);
>>> }
>>>
>>> - public Iterator<Row> executeQuery(String language, String query,
>>> Map<String, Value> bindings) throws ParseException {
>>> + public Iterator<Row> executeQuery(String language, String query,
>>> Map<String, ScalarImpl> bindings) throws ParseException {
>>> Query q;
>>> if (SQL2.equals(language)) {
>>> q = parserSQL2.parse(query);
>>> @@ -53,7 +53,7 @@ public class QueryEngine {
>>> }
>>> q.setMicroKernel(mk);
>>> if (bindings != null) {
>>> - for (Entry<String, Value> e : bindings.entrySet()) {
>>> + for (Entry<String, ScalarImpl> e : bindings.entrySet()) {
>>> q.bindValue(e.getKey(), e.getValue());
>>> }
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Row.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/Row.java?rev=1303867&r1=1303866&r2=130386
>>> 7&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Row.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/Row.java Thu Mar 22 16:08:44 2012
>>> @@ -16,21 +16,25 @@
>>> */
>>> package org.apache.jackrabbit.oak.query;
>>>
>>> +import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
>>> +import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
>>> +
>>> /**
>>> * A query result row that keeps all data in memory.
>>> */
>>> public class Row implements Comparable<Row> {
>>>
>>> - private final Query qom;
>>> + private final Query query;
>>> private final String[] paths;
>>> - private final Value[] values;
>>> - private final Value[] orderValues;
>>> + private final ScalarImpl[] values;
>>> + private final ScalarImpl[] orderValues;
>>>
>>> - Row(Query qom, String[] paths, Value[] values, Value[]
>>> orderValues) {
>>> - this.qom = qom;
>>> + Row(Query query, String[] paths, ScalarImpl[] values, ScalarImpl[]
>>> orderValues) {
>>> + this.query = query;
>>> this.paths = paths;
>>> this.values = values;
>>> this.orderValues = orderValues;
>>> + System.out.println(toString());
>>> }
>>>
>>> public String getPath() {
>>> @@ -41,22 +45,47 @@ public class Row implements Comparable<R
>>> }
>>>
>>> public String getPath(String selectorName) {
>>> - return paths[qom.getSelectorIndex(selectorName)];
>>> + int index = query.getSelectorIndex(selectorName);
>>> + if (paths == null || index>= paths.length) {
>>> + return null;
>>> + }
>>> + return paths[index];
>>> }
>>>
>>> - public Value getValue(String columnName) {
>>> - return values[qom.getColumnIndex(columnName)];
>>> + public ScalarImpl getValue(String columnName) {
>>> + return values[query.getColumnIndex(columnName)];
>>> }
>>>
>>> - public Value[] getValues() {
>>> - Value[] v2 = new Value[values.length];
>>> + public ScalarImpl[] getValues() {
>>> + ScalarImpl[] v2 = new ScalarImpl[values.length];
>>> System.arraycopy(values, 0, v2, 0, v2.length);
>>> return v2;
>>> }
>>>
>>> @Override
>>> public int compareTo(Row o) {
>>> - return qom.compareRows(orderValues, o.orderValues);
>>> + return query.compareRows(orderValues, o.orderValues);
>>> + }
>>> +
>>> + @Override
>>> + public String toString() {
>>> + StringBuilder buff = new StringBuilder();
>>> + for (SelectorImpl s : query.getSelectors()) {
>>> + String n = s.getSelectorName();
>>> + String p = getPath(n);
>>> + if (p != null) {
>>> + buff.append(n).append(": ").append(p).append(" ");
>>> + }
>>> + }
>>> + ColumnImpl[] cols = query.getColumns();
>>> + for (int i = 0; i< values.length; i++) {
>>> + ColumnImpl c = cols[i];
>>> + String n = c.getColumnName();
>>> + if (n != null) {
>>> + buff.append(n).append(": ").append(values[i]).append("
>>> ");
>>> + }
>>> + }
>>> + return buff.toString();
>>> }
>>>
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/SQL2Parser.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1303867&r1=1303866&r2
>>> =1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/SQL2Parser.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/SQL2Parser.java Thu Mar 22 16:08:44 2012
>>> @@ -61,7 +61,7 @@ public class SQL2Parser {
>>> private int currentTokenType;
>>> private String currentToken;
>>> private boolean currentTokenQuoted;
>>> - private Value currentValue;
>>> + private ScalarImpl currentValue;
>>> private ArrayList<String> expected;
>>>
>>> // The bind variables
>>> @@ -75,14 +75,14 @@ public class SQL2Parser {
>>> private boolean allowNumberLiterals = true;
>>>
>>> private final AstElementFactory factory = new AstElementFactory();
>>> - private final ValueFactory valueFactory;
>>> + private final ScalarFactory valueFactory;
>>>
>>> /**
>>> * Create a new parser. A parser can be re-used, but it is not
>>> thread safe.
>>> *
>>> * @param valueFactory the value factory
>>> */
>>> - public SQL2Parser(ValueFactory valueFactory) {
>>> + public SQL2Parser(ScalarFactory valueFactory) {
>>> this.valueFactory = valueFactory;
>>> }
>>>
>>> @@ -136,7 +136,7 @@ public class SQL2Parser {
>>> private String readName() throws ParseException {
>>> if (readIf("[")) {
>>> if (currentTokenType == VALUE) {
>>> - Value value = readString();
>>> + ScalarImpl value = readString();
>>> read("]");
>>> return value.getString();
>>> } else {
>>> @@ -442,16 +442,16 @@ public class SQL2Parser {
>>> }
>>> int valueType = currentValue.getType();
>>> switch (valueType) {
>>> - case PropertyType.LONG:
>>> + case ScalarType.LONG:
>>> currentValue =
>>> valueFactory.createValue(-currentValue.getLong());
>>> break;
>>> - case PropertyType.DOUBLE:
>>> + case ScalarType.DOUBLE:
>>> currentValue =
>>> valueFactory.createValue(-currentValue.getDouble());
>>> break;
>>> - case PropertyType.BOOLEAN:
>>> + case ScalarType.BOOLEAN:
>>> currentValue =
>>> valueFactory.createValue(!currentValue.getBoolean());
>>> break;
>>> - case PropertyType.DECIMAL:
>>> + case ScalarType.DECIMAL:
>>> currentValue =
>>> valueFactory.createValue(currentValue.getDecimal().negate());
>>> break;
>>> default:
>>> @@ -487,7 +487,7 @@ public class SQL2Parser {
>>> throw getSyntaxError("literal");
>>> }
>>> LiteralImpl literal = (LiteralImpl) op;
>>> - Value value = literal.getLiteralValue();
>>> + ScalarImpl value = literal.getLiteralValue();
>>> read("AS");
>>> value = parseCastAs(value);
>>> read(")");
>>> @@ -505,11 +505,11 @@ public class SQL2Parser {
>>> * @param value the original value
>>> * @return the literal
>>> */
>>> - private LiteralImpl getUncastLiteral(Value value) throws
>>> ParseException {
>>> + private LiteralImpl getUncastLiteral(ScalarImpl value) throws
>>> ParseException {
>>> return factory.literal(value);
>>> }
>>>
>>> - private Value parseCastAs(Value value) throws ParseException {
>>> + private ScalarImpl parseCastAs(ScalarImpl value) throws
>>> ParseException {
>>> if (readIf("STRING")) {
>>> return valueFactory.createValue(value.getString());
>>> } else if (readIf("BINARY")) {
>>> @@ -525,15 +525,15 @@ public class SQL2Parser {
>>> } else if (readIf("BOOLEAN")) {
>>> return valueFactory.createValue(value.getBoolean());
>>> } else if (readIf("NAME")) {
>>> - return valueFactory.createValue(value.getString(),
>>> PropertyType.NAME);
>>> + return valueFactory.createValue(value.getString(),
>>> ScalarType.NAME);
>>> } else if (readIf("PATH")) {
>>> - return valueFactory.createValue(value.getString(),
>>> PropertyType.PATH);
>>> + return valueFactory.createValue(value.getString(),
>>> ScalarType.PATH);
>>> } else if (readIf("REFERENCE")) {
>>> - return valueFactory.createValue(value.getString(),
>>> PropertyType.REFERENCE);
>>> + return valueFactory.createValue(value.getString(),
>>> ScalarType.REFERENCE);
>>> } else if (readIf("WEAKREFERENCE")) {
>>> - return valueFactory.createValue(value.getString(),
>>> PropertyType.WEAKREFERENCE);
>>> + return valueFactory.createValue(value.getString(),
>>> ScalarType.WEAKREFERENCE);
>>> } else if (readIf("URI")) {
>>> - return valueFactory.createValue(value.getString(),
>>> PropertyType.URI);
>>> + return valueFactory.createValue(value.getString(),
>>> ScalarType.URI);
>>> } else {
>>> throw getSyntaxError("data type (STRING|BINARY|...)");
>>> }
>>> @@ -654,11 +654,11 @@ public class SQL2Parser {
>>> return s;
>>> }
>>>
>>> - private Value readString() throws ParseException {
>>> + private ScalarImpl readString() throws ParseException {
>>> if (currentTokenType != VALUE) {
>>> throw getSyntaxError("string value");
>>> }
>>> - Value value = currentValue;
>>> + ScalarImpl value = currentValue;
>>> read();
>>> return value;
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/AstElementFactory.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/AstElementFactory.java?rev=1303867&r1
>>> =1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/AstElementFactory.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/AstElementFactory.java Thu Mar 22 16:08:44 2012
>>> @@ -13,7 +13,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>>
>>> /**
>>> * A factory for syntax tree elements.
>>> @@ -84,7 +84,7 @@ public class AstElementFactory {
>>> return new LengthImpl(propertyValue);
>>> }
>>>
>>> - public LiteralImpl literal(Value literalValue) {
>>> + public LiteralImpl literal(ScalarImpl literalValue) {
>>> return new LiteralImpl(literalValue);
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/BindVariableValueImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java?rev=130386
>>> 7&r1=1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/BindVariableValueImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/BindVariableValueImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>>
>>> public class BindVariableValueImpl extends StaticOperandImpl {
>>>
>>> @@ -43,7 +43,7 @@ public class BindVariableValueImpl exten
>>> }
>>>
>>> @Override
>>> - Value currentValue() {
>>> + ScalarImpl currentValue() {
>>> return query.getBindVariableValue(bindVariableName);
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ColumnImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/ColumnImpl.java?rev=1303867&r1=130386
>>> 6&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ColumnImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ColumnImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>>
>>> public class ColumnImpl extends AstElement {
>>>
>>> @@ -58,7 +58,7 @@ public class ColumnImpl extends AstEleme
>>> }
>>> }
>>>
>>> - public Value currentValue() {
>>> + public ScalarImpl currentValue() {
>>> if (propertyName == null) {
>>> // TODO for SELECT * FROM queries, currently return the
>>> path (for testing only)
>>> String p = selector.currentPath();
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ComparisonImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1303867&r1=13
>>> 03866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ComparisonImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/ComparisonImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,8 +18,8 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> -import org.apache.jackrabbit.oak.query.ValueFactory;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> +import org.apache.jackrabbit.oak.query.ScalarFactory;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class ComparisonImpl extends ConstraintImpl {
>>> @@ -48,8 +48,8 @@ public class ComparisonImpl extends Cons
>>>
>>> @Override
>>> public boolean evaluate() {
>>> - Value v1 = operand1.currentValue();
>>> - Value v2 = operand2.currentValue();
>>> + ScalarImpl v1 = operand1.currentValue();
>>> + ScalarImpl v2 = operand2.currentValue();
>>> if (v1 == null || v2 == null) {
>>> // TODO comparison: what about (null<> x) ?
>>> return false;
>>> @@ -71,7 +71,7 @@ public class ComparisonImpl extends Cons
>>> return false;
>>> }
>>>
>>> - private static boolean evaluateLike(Value v1, Value v2) {
>>> + private static boolean evaluateLike(ScalarImpl v1, ScalarImpl v2) {
>>> LikePattern like = new LikePattern(v2.getString());
>>> return like.matches(v1.getString());
>>> }
>>> @@ -255,7 +255,7 @@ public class ComparisonImpl extends Cons
>>>
>>> @Override
>>> public void apply(Filter f) {
>>> - Value v = operand2.currentValue();
>>> + ScalarImpl v = operand2.currentValue();
>>> if (v != null) {
>>> if (operator == Operator.LIKE) {
>>> String pattern;
>>> @@ -266,7 +266,7 @@ public class ComparisonImpl extends Cons
>>> if (lowerBound == null&& upperBound == null) {
>>> // ignore
>>> } else {
>>> - ValueFactory vf = query.getValueFactory();
>>> + ScalarFactory vf = query.getValueFactory();
>>> if (lowerBound != null) {
>>> operand1.apply(f, Operator.GREATER_OR_EQUAL,
>>> vf.createValue(lowerBound));
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/DynamicOperandImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java?rev=1303867&r
>>> 1=1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/DynamicOperandImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/DynamicOperandImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -16,13 +16,13 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public abstract class DynamicOperandImpl extends AstElement {
>>>
>>> - public abstract Value currentValue();
>>> + public abstract ScalarImpl currentValue();
>>>
>>> - public abstract void apply(Filter f, Operator operator, Value v);
>>> + public abstract void apply(Filter f, Operator operator, ScalarImpl
>>> v);
>>>
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/EquiJoinConditionImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java?rev=130386
>>> 7&r1=1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/EquiJoinConditionImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/EquiJoinConditionImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class EquiJoinConditionImpl extends JoinConditionImpl {
>>> @@ -79,19 +79,19 @@ public class EquiJoinConditionImpl exten
>>>
>>> @Override
>>> public boolean evaluate() {
>>> - Value v1 = selector1.currentProperty(property1Name);
>>> + ScalarImpl v1 = selector1.currentProperty(property1Name);
>>> if (v1 == null) {
>>> return false;
>>> }
>>> // TODO data type mapping
>>> - Value v2 = selector2.currentProperty(property2Name);
>>> + ScalarImpl v2 = selector2.currentProperty(property2Name);
>>> return v2 != null&& v1.equals(v2);
>>> }
>>>
>>> @Override
>>> public void apply(Filter f) {
>>> - Value v1 = selector1.currentProperty(property1Name);
>>> - Value v2 = selector2.currentProperty(property2Name);
>>> + ScalarImpl v1 = selector1.currentProperty(property1Name);
>>> + ScalarImpl v2 = selector2.currentProperty(property2Name);
>>> if (f.getSelector() == selector1&& v2 != null) {
>>> f.restrictProperty(property1Name, Operator.EQUAL, v2);
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/FullTextSearchScoreImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java?rev=1303
>>> 867&r1=1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/FullTextSearchScoreImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/FullTextSearchScoreImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class FullTextSearchScoreImpl extends DynamicOperandImpl {
>>> @@ -44,13 +44,13 @@ public class FullTextSearchScoreImpl ext
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> + public ScalarImpl currentValue() {
>>> // TODO support evaluating fulltext conditions (score)
>>> return null;
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> // TODO support fulltext index conditions (score)
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LengthImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/LengthImpl.java?rev=1303867&r1=130386
>>> 6&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LengthImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LengthImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class LengthImpl extends DynamicOperandImpl {
>>> @@ -44,8 +44,8 @@ public class LengthImpl extends DynamicO
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> - Value v = propertyValue.currentValue();
>>> + public ScalarImpl currentValue() {
>>> + ScalarImpl v = propertyValue.currentValue();
>>> if (v == null) {
>>> return null;
>>> }
>>> @@ -55,7 +55,7 @@ public class LengthImpl extends DynamicO
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> // ignore
>>> // TODO LENGTH(x) conditions: can use IS NOT NULL?
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LiteralImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/LiteralImpl.java?rev=1303867&r1=13038
>>> 66&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LiteralImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LiteralImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -19,18 +19,18 @@
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> import org.apache.jackrabbit.oak.query.SQL2Parser;
>>> -import org.apache.jackrabbit.oak.query.PropertyType;
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> +import org.apache.jackrabbit.oak.query.ScalarType;
>>>
>>> public class LiteralImpl extends StaticOperandImpl {
>>>
>>> - private final Value value;
>>> + private final ScalarImpl value;
>>>
>>> - public LiteralImpl(Value value) {
>>> + public LiteralImpl(ScalarImpl value) {
>>> this.value = value;
>>> }
>>>
>>> - public Value getLiteralValue() {
>>> + public ScalarImpl getLiteralValue() {
>>> return value;
>>> }
>>>
>>> @@ -42,28 +42,28 @@ public class LiteralImpl extends StaticO
>>> @Override
>>> public String toString() {
>>> switch (value.getType()) {
>>> - case PropertyType.BINARY:
>>> + case ScalarType.BINARY:
>>> return cast("BINARY");
>>> - case PropertyType.BOOLEAN:
>>> + case ScalarType.BOOLEAN:
>>> return cast("BOOLEAN");
>>> - case PropertyType.DATE:
>>> + case ScalarType.DATE:
>>> return cast("DATE");
>>> - case PropertyType.DECIMAL:
>>> + case ScalarType.DECIMAL:
>>> return cast("DECIMAL");
>>> - case PropertyType.DOUBLE:
>>> - case PropertyType.LONG:
>>> + case ScalarType.DOUBLE:
>>> + case ScalarType.LONG:
>>> return value.getString();
>>> - case PropertyType.NAME:
>>> + case ScalarType.NAME:
>>> return cast("NAME");
>>> - case PropertyType.PATH:
>>> + case ScalarType.PATH:
>>> return cast("PATH");
>>> - case PropertyType.REFERENCE:
>>> + case ScalarType.REFERENCE:
>>> return cast("REFERENCE");
>>> - case PropertyType.STRING:
>>> + case ScalarType.STRING:
>>> return escape();
>>> - case PropertyType.URI:
>>> + case ScalarType.URI:
>>> return cast("URI");
>>> - case PropertyType.WEAKREFERENCE:
>>> + case ScalarType.WEAKREFERENCE:
>>> return cast("WEAKREFERENCE");
>>> default:
>>> return escape();
>>> @@ -79,7 +79,7 @@ public class LiteralImpl extends StaticO
>>> }
>>>
>>> @Override
>>> - Value currentValue() {
>>> + ScalarImpl currentValue() {
>>> return value;
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LowerCaseImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java?rev=1303867&r1=130
>>> 3866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LowerCaseImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/LowerCaseImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class LowerCaseImpl extends DynamicOperandImpl {
>>> @@ -44,8 +44,8 @@ public class LowerCaseImpl extends Dynam
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> - Value v = operand.currentValue();
>>> + public ScalarImpl currentValue() {
>>> + ScalarImpl v = operand.currentValue();
>>> if (v == null) {
>>> return null;
>>> }
>>> @@ -54,7 +54,7 @@ public class LowerCaseImpl extends Dynam
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> // ignore
>>> // TODO UPPER(x) conditions: can use IS NOT NULL?
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeLocalNameImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java?rev=1303867&r1
>>> =1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeLocalNameImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeLocalNameImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -19,7 +19,7 @@
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> import org.apache.jackrabbit.mk.util.PathUtils;
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class NodeLocalNameImpl extends DynamicOperandImpl {
>>> @@ -53,7 +53,7 @@ public class NodeLocalNameImpl extends D
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> + public ScalarImpl currentValue() {
>>> String name = PathUtils.getName(selector.currentPath());
>>> int colon = name.indexOf(':');
>>> // TODO LOCALNAME: evaluation of local name might not be
>>> correct
>>> @@ -62,7 +62,7 @@ public class NodeLocalNameImpl extends D
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> // TODO support LOCALNAME index conditions
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeNameImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1303867&r1=1303
>>> 866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeNameImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/NodeNameImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -19,7 +19,7 @@
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> import org.apache.jackrabbit.mk.util.PathUtils;
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class NodeNameImpl extends DynamicOperandImpl {
>>> @@ -53,13 +53,13 @@ public class NodeNameImpl extends Dynami
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> + public ScalarImpl currentValue() {
>>> String name = PathUtils.getName(selector.currentPath());
>>> return query.getValueFactory().createValue(name);
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> // TODO support NAME(..) index conditions
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyExistenceImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java?rev=130386
>>> 7&r1=1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyExistenceImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyExistenceImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class PropertyExistenceImpl extends ConstraintImpl {
>>> @@ -42,7 +42,7 @@ public class PropertyExistenceImpl exten
>>>
>>> @Override
>>> public boolean evaluate() {
>>> - Value v = selector.currentProperty(propertyName);
>>> + ScalarImpl v = selector.currentProperty(propertyName);
>>> return v != null;
>>> }
>>>
>>> @@ -67,7 +67,7 @@ public class PropertyExistenceImpl exten
>>> @Override
>>> public void apply(Filter f) {
>>> if (f.getSelector() == selector) {
>>> - f.restrictProperty(propertyName, Operator.NOT_EQUAL,
>>> (Value) null);
>>> + f.restrictProperty(propertyName, Operator.NOT_EQUAL,
>>> (ScalarImpl) null);
>>> }
>>> }
>>>
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/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=1303867&r1
>>> =1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyValueImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/PropertyValueImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class PropertyValueImpl extends DynamicOperandImpl {
>>> @@ -52,7 +52,7 @@ public class PropertyValueImpl extends D
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> + public ScalarImpl currentValue() {
>>> return selector.currentProperty(propertyName);
>>> }
>>>
>>> @@ -64,7 +64,7 @@ public class PropertyValueImpl extends D
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> if (f.getSelector() == selector) {
>>> f.restrictProperty(propertyName, operator, v);
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/SelectorImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1303867&r1=1303
>>> 866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/SelectorImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/SelectorImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -22,7 +22,7 @@ import org.apache.jackrabbit.mk.api.Micr
>>> import org.apache.jackrabbit.mk.json.JsopTokenizer;
>>> import org.apache.jackrabbit.mk.simple.NodeImpl;
>>> import org.apache.jackrabbit.oak.query.Query;
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Cursor;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>> import org.apache.jackrabbit.oak.query.index.NodeReader;
>>> @@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.query.i
>>>
>>> public class SelectorImpl extends SourceImpl {
>>>
>>> + // TODO jcr:path isn't an official feature, support it?
>>> private static final String PATH = "jcr:path";
>>>
>>> protected NodeReader reader;
>>> @@ -107,7 +108,7 @@ public class SelectorImpl extends Source
>>> return cursor == null ? null : cursor.currentNode();
>>> }
>>>
>>> - public Value currentProperty(String propertyName) {
>>> + public ScalarImpl currentProperty(String propertyName) {
>>> if (propertyName.equals(PATH)) {
>>> String p = currentPath();
>>> return p == null ? null :
>>> query.getValueFactory().createValue(p);
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/StaticOperandImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java?rev=1303867&r1
>>> =1303866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/StaticOperandImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/StaticOperandImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,10 +18,10 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>>
>>> public abstract class StaticOperandImpl extends AstElement {
>>>
>>> - abstract Value currentValue();
>>> + abstract ScalarImpl currentValue();
>>>
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/UpperCaseImpl.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java?rev=1303867&r1=130
>>> 3866&r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/UpperCaseImpl.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/ast/UpperCaseImpl.java Thu Mar 22 16:08:44 2012
>>> @@ -18,7 +18,7 @@
>>> */
>>> package org.apache.jackrabbit.oak.query.ast;
>>>
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.index.Filter;
>>>
>>> public class UpperCaseImpl extends DynamicOperandImpl {
>>> @@ -44,8 +44,8 @@ public class UpperCaseImpl extends Dynam
>>> }
>>>
>>> @Override
>>> - public Value currentValue() {
>>> - Value v = operand.currentValue();
>>> + public ScalarImpl currentValue() {
>>> + ScalarImpl v = operand.currentValue();
>>> if (v == null) {
>>> return null;
>>> }
>>> @@ -54,7 +54,7 @@ public class UpperCaseImpl extends Dynam
>>> }
>>>
>>> @Override
>>> - public void apply(Filter f, Operator operator, Value v) {
>>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>>> // ignore
>>> // TODO UPPER(x) conditions: can use IS NOT NULL?
>>> }
>>>
>>> Modified:
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/index/Filter.java
>>> URL:
>>> http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>> org/apache/jackrabbit/oak/query/index/Filter.java?rev=1303867&r1=1303866&
>>> r2=1303867&view=diff
>>>
>>> =========================================================================
>>> =====
>>> ---
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/index/Filter.java (original)
>>> +++
>>> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>> ry/index/Filter.java Thu Mar 22 16:08:44 2012
>>> @@ -19,8 +19,9 @@
>>> package org.apache.jackrabbit.oak.query.index;
>>>
>>> import java.util.HashMap;
>>> +import java.util.Map.Entry;
>>> import org.apache.jackrabbit.mk.util.PathUtils;
>>> -import org.apache.jackrabbit.oak.query.Value;
>>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>> import org.apache.jackrabbit.oak.query.ast.Operator;
>>> import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
>>>
>>> @@ -106,7 +107,7 @@ public class Filter {
>>> /**
>>> * The first value to read, or null to read from the
>>> beginning.
>>> */
>>> - public Value first;
>>> + public ScalarImpl first;
>>>
>>> /**
>>> * Whether values that match the first should be returned.
>>> @@ -116,7 +117,7 @@ public class Filter {
>>> /**
>>> * The last value to read, or null to read until the end.
>>> */
>>> - public Value last;
>>> + public ScalarImpl last;
>>>
>>> /**
>>> * Whether values that match the last should be returned.
>>> @@ -228,14 +229,14 @@ public class Filter {
>>> }
>>> }
>>>
>>> - public void restrictProperty(String propertyName, Operator op,
>>> Value value) {
>>> + public void restrictProperty(String propertyName, Operator op,
>>> ScalarImpl value) {
>>> PropertyRestriction x =
>>> propertyRestrictions.get(propertyName);
>>> if (x == null) {
>>> x = new PropertyRestriction();
>>> x.propertyName = propertyName;
>>> propertyRestrictions.put(propertyName, x);
>>> }
>>> - Value oldFirst = x.first, oldLast = x.last;
>>> + ScalarImpl oldFirst = x.first, oldLast = x.last;
>>> switch (op) {
>>> case EQUAL:
>>> x.first = maxValue(oldFirst, value);
>>> @@ -276,20 +277,33 @@ public class Filter {
>>> }
>>> }
>>>
>>> - static Value maxValue(Value a, Value b) {
>>> + static ScalarImpl maxValue(ScalarImpl a, ScalarImpl b) {
>>> if (a == null) {
>>> return b;
>>> }
>>> return a.compareTo(b)< 0 ? b : a;
>>> }
>>>
>>> - static Value minValue(Value a, Value b) {
>>> + static ScalarImpl minValue(ScalarImpl a, ScalarImpl b) {
>>> if (a == null) {
>>> return b;
>>> }
>>> return a.compareTo(b)< 0 ? a : b;
>>> }
>>>
>>> + @Override
>>> + public String toString() {
>>> + StringBuilder buff = new StringBuilder();
>>> + if (alwaysFalse) {
>>> + return "(always false)";
>>> + }
>>> + buff.append("path:
>>> ").append(path).append(pathRestriction).append('\n');
>>> + for (Entry<String, PropertyRestriction> p :
>>> propertyRestrictions.entrySet()) {
>>> + buff.append("property ").append(p.getKey()).append(":
>>> ").append(p.getValue()).append('\n');
>>> + }
>>> + return buff.toString();
>>> + }
>>> +
>>> public void restrictPath(String addedPath, PathRestriction
>>> addedPathRestriction) {
>>> // calculating the intersection of path restrictions
>>> // this is ugly code, but I don't currently see a radically
>>> simpler method
>>>
>>>
>
Re: svn commit: r1303867 - in
/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query:
./ ast/ index/
Posted by Thomas Mueller <mu...@adobe.com>.
Hi,
Sorry, my commit was incomplete (now sure why). It should be fixed now.
Plus I removed the unnecessary System.out.
Regards,
Thomas
On 3/22/12 6:35 PM, "Michael Dürig" <md...@apache.org> wrote:
>
>This seems to break the build. Tom could you please check that
>everything compiles before you do a checkin?
>
>Michael
>
>On 22.3.12 16:08, thomasm@apache.org wrote:
>> Author: thomasm
>> Date: Thu Mar 22 16:08:44 2012
>> New Revision: 1303867
>>
>> URL: http://svn.apache.org/viewvc?rev=1303867&view=rev
>> Log:
>> OAK-28 Query implementation (Row.toString(), Filter.toString(),
>>ClassCastException for negative numbers)
>>
>> Removed:
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/PropertyType.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Value.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ValueFactory.java
>> Modified:
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Query.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/QueryEngine.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Row.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/SQL2Parser.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/AstElementFactory.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/BindVariableValueImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ColumnImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ComparisonImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/DynamicOperandImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/EquiJoinConditionImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/FullTextSearchScoreImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LengthImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LiteralImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LowerCaseImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeLocalNameImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeNameImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyExistenceImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyValueImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/SelectorImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/StaticOperandImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/UpperCaseImpl.java
>>
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/index/Filter.java
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Query.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/Query.java?rev=1303867&r1=1303866&r2=1303
>>867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Query.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Query.java Thu Mar 22 16:08:44 2012
>> @@ -18,6 +18,7 @@ import java.util.Arrays;
>> import java.util.Collections;
>> import java.util.HashMap;
>> import java.util.Iterator;
>> +import java.util.List;
>> import org.apache.jackrabbit.mk.api.MicroKernel;
>> import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
>> import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
>> @@ -52,17 +53,17 @@ public class Query {
>>
>> final SourceImpl source;
>> final ConstraintImpl constraint;
>> - final HashMap<String, Value> bindVariableMap = new
>>HashMap<String, Value>();
>> + final HashMap<String, ScalarImpl> bindVariableMap = new
>>HashMap<String, ScalarImpl>();
>> final ArrayList<SelectorImpl> selectors = new
>>ArrayList<SelectorImpl>();
>>
>> private MicroKernel mk;
>> private final OrderingImpl[] orderings;
>> - private final ColumnImpl[] columns;
>> + private ColumnImpl[] columns;
>> private boolean explain;
>> private long limit;
>> private long offset;
>> private boolean prepared;
>> - private final ValueFactory valueFactory = new ValueFactory();
>> + private final ScalarFactory valueFactory = new ScalarFactory();
>>
>> Query(SourceImpl source, ConstraintImpl constraint,
>>OrderingImpl[] orderings,
>> ColumnImpl[] columns) {
>> @@ -235,7 +236,7 @@ public class Query {
>> return source;
>> }
>>
>> - void bindValue(String varName, Value value) {
>> + void bindValue(String varName, ScalarImpl value) {
>> bindVariableMap.put(varName, value);
>> }
>>
>> @@ -251,7 +252,7 @@ public class Query {
>> this.offset = offset;
>> }
>>
>> - public ValueFactory getValueFactory() {
>> + public ScalarFactory getValueFactory() {
>> return valueFactory;
>> }
>>
>> @@ -263,7 +264,8 @@ public class Query {
>> prepare();
>> if (explain) {
>> String plan = source.getPlan();
>> - Row r = new Row(this, null, new Value[] {
>>valueFactory.createValue(plan) }, null);
>> + columns = new ColumnImpl[] { new ColumnImpl("explain",
>>"plan", "plan")};
>> + Row r = new Row(this, new String[0], new ScalarImpl[] {
>>valueFactory.createValue(plan) }, null);
>> return Arrays.asList(r).iterator();
>> }
>> RowIterator it = new RowIterator(revisionId);
>> @@ -280,11 +282,11 @@ public class Query {
>> return list.iterator();
>> }
>>
>> - public int compareRows(Value[] orderValues, Value[] orderValues2) {
>> + public int compareRows(ScalarImpl[] orderValues, ScalarImpl[]
>>orderValues2) {
>> int comp = 0;
>> for (int i = 0, size = orderings.length; i< size; i++) {
>> - Value a = orderValues[i];
>> - Value b = orderValues2[i];
>> + ScalarImpl a = orderValues[i];
>> + ScalarImpl b = orderValues2[i];
>> if (a == null || b == null) {
>> if (a == b) {
>> comp = 0;
>> @@ -383,17 +385,17 @@ public class Query {
>> paths[i] = s.currentPath();
>> }
>> int columnCount = columns.length;
>> - Value[] values = new Value[columnCount];
>> + ScalarImpl[] values = new ScalarImpl[columnCount];
>> for (int i = 0; i< columnCount; i++) {
>> ColumnImpl c = columns[i];
>> values[i] = c.currentValue();
>> }
>> - Value[] orderValues;
>> + ScalarImpl[] orderValues;
>> if (orderings == null) {
>> orderValues = null;
>> } else {
>> int size = orderings.length;
>> - orderValues = new Value[size];
>> + orderValues = new ScalarImpl[size];
>> for (int i = 0; i< size; i++) {
>> orderValues[i] =
>>orderings[i].getOperand().currentValue();
>> }
>> @@ -428,12 +430,16 @@ public class Query {
>> return offset;
>> }
>>
>> - public Value getBindVariableValue(String bindVariableName) {
>> - Value v = bindVariableMap.get(bindVariableName);
>> + public ScalarImpl getBindVariableValue(String bindVariableName) {
>> + ScalarImpl v = bindVariableMap.get(bindVariableName);
>> if (v == null) {
>> throw new RuntimeException("Bind variable value not set:
>>" + bindVariableName);
>> }
>> return v;
>> }
>>
>> + public List<SelectorImpl> getSelectors() {
>> + return Collections.unmodifiableList(selectors);
>> + }
>> +
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/QueryEngine.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/QueryEngine.java?rev=1303867&r1=1303866&r
>>2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/QueryEngine.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/QueryEngine.java Thu Mar 22 16:08:44 2012
>> @@ -28,7 +28,7 @@ public class QueryEngine {
>> public static final String SQL2 = "sql2";
>>
>> private final MicroKernel mk;
>> - private final ValueFactory vf = new ValueFactory();
>> + private final ScalarFactory vf = new ScalarFactory();
>> private final SQL2Parser parserSQL2;
>>
>> private QueryEngine(MicroKernel mk) {
>> @@ -40,7 +40,7 @@ public class QueryEngine {
>> return new QueryEngine(mk);
>> }
>>
>> - public Iterator<Row> executeQuery(String language, String query,
>>Map<String, Value> bindings) throws ParseException {
>> + public Iterator<Row> executeQuery(String language, String query,
>>Map<String, ScalarImpl> bindings) throws ParseException {
>> Query q;
>> if (SQL2.equals(language)) {
>> q = parserSQL2.parse(query);
>> @@ -53,7 +53,7 @@ public class QueryEngine {
>> }
>> q.setMicroKernel(mk);
>> if (bindings != null) {
>> - for (Entry<String, Value> e : bindings.entrySet()) {
>> + for (Entry<String, ScalarImpl> e : bindings.entrySet()) {
>> q.bindValue(e.getKey(), e.getValue());
>> }
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Row.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/Row.java?rev=1303867&r1=1303866&r2=130386
>>7&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Row.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/Row.java Thu Mar 22 16:08:44 2012
>> @@ -16,21 +16,25 @@
>> */
>> package org.apache.jackrabbit.oak.query;
>>
>> +import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
>> +import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
>> +
>> /**
>> * A query result row that keeps all data in memory.
>> */
>> public class Row implements Comparable<Row> {
>>
>> - private final Query qom;
>> + private final Query query;
>> private final String[] paths;
>> - private final Value[] values;
>> - private final Value[] orderValues;
>> + private final ScalarImpl[] values;
>> + private final ScalarImpl[] orderValues;
>>
>> - Row(Query qom, String[] paths, Value[] values, Value[]
>>orderValues) {
>> - this.qom = qom;
>> + Row(Query query, String[] paths, ScalarImpl[] values, ScalarImpl[]
>>orderValues) {
>> + this.query = query;
>> this.paths = paths;
>> this.values = values;
>> this.orderValues = orderValues;
>> + System.out.println(toString());
>> }
>>
>> public String getPath() {
>> @@ -41,22 +45,47 @@ public class Row implements Comparable<R
>> }
>>
>> public String getPath(String selectorName) {
>> - return paths[qom.getSelectorIndex(selectorName)];
>> + int index = query.getSelectorIndex(selectorName);
>> + if (paths == null || index>= paths.length) {
>> + return null;
>> + }
>> + return paths[index];
>> }
>>
>> - public Value getValue(String columnName) {
>> - return values[qom.getColumnIndex(columnName)];
>> + public ScalarImpl getValue(String columnName) {
>> + return values[query.getColumnIndex(columnName)];
>> }
>>
>> - public Value[] getValues() {
>> - Value[] v2 = new Value[values.length];
>> + public ScalarImpl[] getValues() {
>> + ScalarImpl[] v2 = new ScalarImpl[values.length];
>> System.arraycopy(values, 0, v2, 0, v2.length);
>> return v2;
>> }
>>
>> @Override
>> public int compareTo(Row o) {
>> - return qom.compareRows(orderValues, o.orderValues);
>> + return query.compareRows(orderValues, o.orderValues);
>> + }
>> +
>> + @Override
>> + public String toString() {
>> + StringBuilder buff = new StringBuilder();
>> + for (SelectorImpl s : query.getSelectors()) {
>> + String n = s.getSelectorName();
>> + String p = getPath(n);
>> + if (p != null) {
>> + buff.append(n).append(": ").append(p).append(" ");
>> + }
>> + }
>> + ColumnImpl[] cols = query.getColumns();
>> + for (int i = 0; i< values.length; i++) {
>> + ColumnImpl c = cols[i];
>> + String n = c.getColumnName();
>> + if (n != null) {
>> + buff.append(n).append(": ").append(values[i]).append("
>>");
>> + }
>> + }
>> + return buff.toString();
>> }
>>
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/SQL2Parser.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1303867&r1=1303866&r2
>>=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/SQL2Parser.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/SQL2Parser.java Thu Mar 22 16:08:44 2012
>> @@ -61,7 +61,7 @@ public class SQL2Parser {
>> private int currentTokenType;
>> private String currentToken;
>> private boolean currentTokenQuoted;
>> - private Value currentValue;
>> + private ScalarImpl currentValue;
>> private ArrayList<String> expected;
>>
>> // The bind variables
>> @@ -75,14 +75,14 @@ public class SQL2Parser {
>> private boolean allowNumberLiterals = true;
>>
>> private final AstElementFactory factory = new AstElementFactory();
>> - private final ValueFactory valueFactory;
>> + private final ScalarFactory valueFactory;
>>
>> /**
>> * Create a new parser. A parser can be re-used, but it is not
>>thread safe.
>> *
>> * @param valueFactory the value factory
>> */
>> - public SQL2Parser(ValueFactory valueFactory) {
>> + public SQL2Parser(ScalarFactory valueFactory) {
>> this.valueFactory = valueFactory;
>> }
>>
>> @@ -136,7 +136,7 @@ public class SQL2Parser {
>> private String readName() throws ParseException {
>> if (readIf("[")) {
>> if (currentTokenType == VALUE) {
>> - Value value = readString();
>> + ScalarImpl value = readString();
>> read("]");
>> return value.getString();
>> } else {
>> @@ -442,16 +442,16 @@ public class SQL2Parser {
>> }
>> int valueType = currentValue.getType();
>> switch (valueType) {
>> - case PropertyType.LONG:
>> + case ScalarType.LONG:
>> currentValue =
>>valueFactory.createValue(-currentValue.getLong());
>> break;
>> - case PropertyType.DOUBLE:
>> + case ScalarType.DOUBLE:
>> currentValue =
>>valueFactory.createValue(-currentValue.getDouble());
>> break;
>> - case PropertyType.BOOLEAN:
>> + case ScalarType.BOOLEAN:
>> currentValue =
>>valueFactory.createValue(!currentValue.getBoolean());
>> break;
>> - case PropertyType.DECIMAL:
>> + case ScalarType.DECIMAL:
>> currentValue =
>>valueFactory.createValue(currentValue.getDecimal().negate());
>> break;
>> default:
>> @@ -487,7 +487,7 @@ public class SQL2Parser {
>> throw getSyntaxError("literal");
>> }
>> LiteralImpl literal = (LiteralImpl) op;
>> - Value value = literal.getLiteralValue();
>> + ScalarImpl value = literal.getLiteralValue();
>> read("AS");
>> value = parseCastAs(value);
>> read(")");
>> @@ -505,11 +505,11 @@ public class SQL2Parser {
>> * @param value the original value
>> * @return the literal
>> */
>> - private LiteralImpl getUncastLiteral(Value value) throws
>>ParseException {
>> + private LiteralImpl getUncastLiteral(ScalarImpl value) throws
>>ParseException {
>> return factory.literal(value);
>> }
>>
>> - private Value parseCastAs(Value value) throws ParseException {
>> + private ScalarImpl parseCastAs(ScalarImpl value) throws
>>ParseException {
>> if (readIf("STRING")) {
>> return valueFactory.createValue(value.getString());
>> } else if (readIf("BINARY")) {
>> @@ -525,15 +525,15 @@ public class SQL2Parser {
>> } else if (readIf("BOOLEAN")) {
>> return valueFactory.createValue(value.getBoolean());
>> } else if (readIf("NAME")) {
>> - return valueFactory.createValue(value.getString(),
>>PropertyType.NAME);
>> + return valueFactory.createValue(value.getString(),
>>ScalarType.NAME);
>> } else if (readIf("PATH")) {
>> - return valueFactory.createValue(value.getString(),
>>PropertyType.PATH);
>> + return valueFactory.createValue(value.getString(),
>>ScalarType.PATH);
>> } else if (readIf("REFERENCE")) {
>> - return valueFactory.createValue(value.getString(),
>>PropertyType.REFERENCE);
>> + return valueFactory.createValue(value.getString(),
>>ScalarType.REFERENCE);
>> } else if (readIf("WEAKREFERENCE")) {
>> - return valueFactory.createValue(value.getString(),
>>PropertyType.WEAKREFERENCE);
>> + return valueFactory.createValue(value.getString(),
>>ScalarType.WEAKREFERENCE);
>> } else if (readIf("URI")) {
>> - return valueFactory.createValue(value.getString(),
>>PropertyType.URI);
>> + return valueFactory.createValue(value.getString(),
>>ScalarType.URI);
>> } else {
>> throw getSyntaxError("data type (STRING|BINARY|...)");
>> }
>> @@ -654,11 +654,11 @@ public class SQL2Parser {
>> return s;
>> }
>>
>> - private Value readString() throws ParseException {
>> + private ScalarImpl readString() throws ParseException {
>> if (currentTokenType != VALUE) {
>> throw getSyntaxError("string value");
>> }
>> - Value value = currentValue;
>> + ScalarImpl value = currentValue;
>> read();
>> return value;
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/AstElementFactory.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/AstElementFactory.java?rev=1303867&r1
>>=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/AstElementFactory.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/AstElementFactory.java Thu Mar 22 16:08:44 2012
>> @@ -13,7 +13,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>
>> /**
>> * A factory for syntax tree elements.
>> @@ -84,7 +84,7 @@ public class AstElementFactory {
>> return new LengthImpl(propertyValue);
>> }
>>
>> - public LiteralImpl literal(Value literalValue) {
>> + public LiteralImpl literal(ScalarImpl literalValue) {
>> return new LiteralImpl(literalValue);
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/BindVariableValueImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java?rev=130386
>>7&r1=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/BindVariableValueImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/BindVariableValueImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>
>> public class BindVariableValueImpl extends StaticOperandImpl {
>>
>> @@ -43,7 +43,7 @@ public class BindVariableValueImpl exten
>> }
>>
>> @Override
>> - Value currentValue() {
>> + ScalarImpl currentValue() {
>> return query.getBindVariableValue(bindVariableName);
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ColumnImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/ColumnImpl.java?rev=1303867&r1=130386
>>6&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ColumnImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ColumnImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>
>> public class ColumnImpl extends AstElement {
>>
>> @@ -58,7 +58,7 @@ public class ColumnImpl extends AstEleme
>> }
>> }
>>
>> - public Value currentValue() {
>> + public ScalarImpl currentValue() {
>> if (propertyName == null) {
>> // TODO for SELECT * FROM queries, currently return the
>>path (for testing only)
>> String p = selector.currentPath();
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ComparisonImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1303867&r1=13
>>03866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ComparisonImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/ComparisonImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,8 +18,8 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> -import org.apache.jackrabbit.oak.query.ValueFactory;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> +import org.apache.jackrabbit.oak.query.ScalarFactory;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class ComparisonImpl extends ConstraintImpl {
>> @@ -48,8 +48,8 @@ public class ComparisonImpl extends Cons
>>
>> @Override
>> public boolean evaluate() {
>> - Value v1 = operand1.currentValue();
>> - Value v2 = operand2.currentValue();
>> + ScalarImpl v1 = operand1.currentValue();
>> + ScalarImpl v2 = operand2.currentValue();
>> if (v1 == null || v2 == null) {
>> // TODO comparison: what about (null<> x) ?
>> return false;
>> @@ -71,7 +71,7 @@ public class ComparisonImpl extends Cons
>> return false;
>> }
>>
>> - private static boolean evaluateLike(Value v1, Value v2) {
>> + private static boolean evaluateLike(ScalarImpl v1, ScalarImpl v2) {
>> LikePattern like = new LikePattern(v2.getString());
>> return like.matches(v1.getString());
>> }
>> @@ -255,7 +255,7 @@ public class ComparisonImpl extends Cons
>>
>> @Override
>> public void apply(Filter f) {
>> - Value v = operand2.currentValue();
>> + ScalarImpl v = operand2.currentValue();
>> if (v != null) {
>> if (operator == Operator.LIKE) {
>> String pattern;
>> @@ -266,7 +266,7 @@ public class ComparisonImpl extends Cons
>> if (lowerBound == null&& upperBound == null) {
>> // ignore
>> } else {
>> - ValueFactory vf = query.getValueFactory();
>> + ScalarFactory vf = query.getValueFactory();
>> if (lowerBound != null) {
>> operand1.apply(f, Operator.GREATER_OR_EQUAL,
>>vf.createValue(lowerBound));
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/DynamicOperandImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java?rev=1303867&r
>>1=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/DynamicOperandImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/DynamicOperandImpl.java Thu Mar 22 16:08:44 2012
>> @@ -16,13 +16,13 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public abstract class DynamicOperandImpl extends AstElement {
>>
>> - public abstract Value currentValue();
>> + public abstract ScalarImpl currentValue();
>>
>> - public abstract void apply(Filter f, Operator operator, Value v);
>> + public abstract void apply(Filter f, Operator operator, ScalarImpl
>>v);
>>
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/EquiJoinConditionImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java?rev=130386
>>7&r1=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/EquiJoinConditionImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/EquiJoinConditionImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class EquiJoinConditionImpl extends JoinConditionImpl {
>> @@ -79,19 +79,19 @@ public class EquiJoinConditionImpl exten
>>
>> @Override
>> public boolean evaluate() {
>> - Value v1 = selector1.currentProperty(property1Name);
>> + ScalarImpl v1 = selector1.currentProperty(property1Name);
>> if (v1 == null) {
>> return false;
>> }
>> // TODO data type mapping
>> - Value v2 = selector2.currentProperty(property2Name);
>> + ScalarImpl v2 = selector2.currentProperty(property2Name);
>> return v2 != null&& v1.equals(v2);
>> }
>>
>> @Override
>> public void apply(Filter f) {
>> - Value v1 = selector1.currentProperty(property1Name);
>> - Value v2 = selector2.currentProperty(property2Name);
>> + ScalarImpl v1 = selector1.currentProperty(property1Name);
>> + ScalarImpl v2 = selector2.currentProperty(property2Name);
>> if (f.getSelector() == selector1&& v2 != null) {
>> f.restrictProperty(property1Name, Operator.EQUAL, v2);
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/FullTextSearchScoreImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java?rev=1303
>>867&r1=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/FullTextSearchScoreImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/FullTextSearchScoreImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class FullTextSearchScoreImpl extends DynamicOperandImpl {
>> @@ -44,13 +44,13 @@ public class FullTextSearchScoreImpl ext
>> }
>>
>> @Override
>> - public Value currentValue() {
>> + public ScalarImpl currentValue() {
>> // TODO support evaluating fulltext conditions (score)
>> return null;
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> // TODO support fulltext index conditions (score)
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LengthImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/LengthImpl.java?rev=1303867&r1=130386
>>6&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LengthImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LengthImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class LengthImpl extends DynamicOperandImpl {
>> @@ -44,8 +44,8 @@ public class LengthImpl extends DynamicO
>> }
>>
>> @Override
>> - public Value currentValue() {
>> - Value v = propertyValue.currentValue();
>> + public ScalarImpl currentValue() {
>> + ScalarImpl v = propertyValue.currentValue();
>> if (v == null) {
>> return null;
>> }
>> @@ -55,7 +55,7 @@ public class LengthImpl extends DynamicO
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> // ignore
>> // TODO LENGTH(x) conditions: can use IS NOT NULL?
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LiteralImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/LiteralImpl.java?rev=1303867&r1=13038
>>66&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LiteralImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LiteralImpl.java Thu Mar 22 16:08:44 2012
>> @@ -19,18 +19,18 @@
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> import org.apache.jackrabbit.oak.query.SQL2Parser;
>> -import org.apache.jackrabbit.oak.query.PropertyType;
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> +import org.apache.jackrabbit.oak.query.ScalarType;
>>
>> public class LiteralImpl extends StaticOperandImpl {
>>
>> - private final Value value;
>> + private final ScalarImpl value;
>>
>> - public LiteralImpl(Value value) {
>> + public LiteralImpl(ScalarImpl value) {
>> this.value = value;
>> }
>>
>> - public Value getLiteralValue() {
>> + public ScalarImpl getLiteralValue() {
>> return value;
>> }
>>
>> @@ -42,28 +42,28 @@ public class LiteralImpl extends StaticO
>> @Override
>> public String toString() {
>> switch (value.getType()) {
>> - case PropertyType.BINARY:
>> + case ScalarType.BINARY:
>> return cast("BINARY");
>> - case PropertyType.BOOLEAN:
>> + case ScalarType.BOOLEAN:
>> return cast("BOOLEAN");
>> - case PropertyType.DATE:
>> + case ScalarType.DATE:
>> return cast("DATE");
>> - case PropertyType.DECIMAL:
>> + case ScalarType.DECIMAL:
>> return cast("DECIMAL");
>> - case PropertyType.DOUBLE:
>> - case PropertyType.LONG:
>> + case ScalarType.DOUBLE:
>> + case ScalarType.LONG:
>> return value.getString();
>> - case PropertyType.NAME:
>> + case ScalarType.NAME:
>> return cast("NAME");
>> - case PropertyType.PATH:
>> + case ScalarType.PATH:
>> return cast("PATH");
>> - case PropertyType.REFERENCE:
>> + case ScalarType.REFERENCE:
>> return cast("REFERENCE");
>> - case PropertyType.STRING:
>> + case ScalarType.STRING:
>> return escape();
>> - case PropertyType.URI:
>> + case ScalarType.URI:
>> return cast("URI");
>> - case PropertyType.WEAKREFERENCE:
>> + case ScalarType.WEAKREFERENCE:
>> return cast("WEAKREFERENCE");
>> default:
>> return escape();
>> @@ -79,7 +79,7 @@ public class LiteralImpl extends StaticO
>> }
>>
>> @Override
>> - Value currentValue() {
>> + ScalarImpl currentValue() {
>> return value;
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LowerCaseImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java?rev=1303867&r1=130
>>3866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LowerCaseImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/LowerCaseImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class LowerCaseImpl extends DynamicOperandImpl {
>> @@ -44,8 +44,8 @@ public class LowerCaseImpl extends Dynam
>> }
>>
>> @Override
>> - public Value currentValue() {
>> - Value v = operand.currentValue();
>> + public ScalarImpl currentValue() {
>> + ScalarImpl v = operand.currentValue();
>> if (v == null) {
>> return null;
>> }
>> @@ -54,7 +54,7 @@ public class LowerCaseImpl extends Dynam
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> // ignore
>> // TODO UPPER(x) conditions: can use IS NOT NULL?
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeLocalNameImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java?rev=1303867&r1
>>=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeLocalNameImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeLocalNameImpl.java Thu Mar 22 16:08:44 2012
>> @@ -19,7 +19,7 @@
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> import org.apache.jackrabbit.mk.util.PathUtils;
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class NodeLocalNameImpl extends DynamicOperandImpl {
>> @@ -53,7 +53,7 @@ public class NodeLocalNameImpl extends D
>> }
>>
>> @Override
>> - public Value currentValue() {
>> + public ScalarImpl currentValue() {
>> String name = PathUtils.getName(selector.currentPath());
>> int colon = name.indexOf(':');
>> // TODO LOCALNAME: evaluation of local name might not be
>>correct
>> @@ -62,7 +62,7 @@ public class NodeLocalNameImpl extends D
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> // TODO support LOCALNAME index conditions
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeNameImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1303867&r1=1303
>>866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeNameImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/NodeNameImpl.java Thu Mar 22 16:08:44 2012
>> @@ -19,7 +19,7 @@
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> import org.apache.jackrabbit.mk.util.PathUtils;
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class NodeNameImpl extends DynamicOperandImpl {
>> @@ -53,13 +53,13 @@ public class NodeNameImpl extends Dynami
>> }
>>
>> @Override
>> - public Value currentValue() {
>> + public ScalarImpl currentValue() {
>> String name = PathUtils.getName(selector.currentPath());
>> return query.getValueFactory().createValue(name);
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> // TODO support NAME(..) index conditions
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyExistenceImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java?rev=130386
>>7&r1=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyExistenceImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyExistenceImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class PropertyExistenceImpl extends ConstraintImpl {
>> @@ -42,7 +42,7 @@ public class PropertyExistenceImpl exten
>>
>> @Override
>> public boolean evaluate() {
>> - Value v = selector.currentProperty(propertyName);
>> + ScalarImpl v = selector.currentProperty(propertyName);
>> return v != null;
>> }
>>
>> @@ -67,7 +67,7 @@ public class PropertyExistenceImpl exten
>> @Override
>> public void apply(Filter f) {
>> if (f.getSelector() == selector) {
>> - f.restrictProperty(propertyName, Operator.NOT_EQUAL,
>>(Value) null);
>> + f.restrictProperty(propertyName, Operator.NOT_EQUAL,
>>(ScalarImpl) null);
>> }
>> }
>>
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/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=1303867&r1
>>=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyValueImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/PropertyValueImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class PropertyValueImpl extends DynamicOperandImpl {
>> @@ -52,7 +52,7 @@ public class PropertyValueImpl extends D
>> }
>>
>> @Override
>> - public Value currentValue() {
>> + public ScalarImpl currentValue() {
>> return selector.currentProperty(propertyName);
>> }
>>
>> @@ -64,7 +64,7 @@ public class PropertyValueImpl extends D
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> if (f.getSelector() == selector) {
>> f.restrictProperty(propertyName, operator, v);
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/SelectorImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1303867&r1=1303
>>866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/SelectorImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/SelectorImpl.java Thu Mar 22 16:08:44 2012
>> @@ -22,7 +22,7 @@ import org.apache.jackrabbit.mk.api.Micr
>> import org.apache.jackrabbit.mk.json.JsopTokenizer;
>> import org.apache.jackrabbit.mk.simple.NodeImpl;
>> import org.apache.jackrabbit.oak.query.Query;
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Cursor;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>> import org.apache.jackrabbit.oak.query.index.NodeReader;
>> @@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.query.i
>>
>> public class SelectorImpl extends SourceImpl {
>>
>> + // TODO jcr:path isn't an official feature, support it?
>> private static final String PATH = "jcr:path";
>>
>> protected NodeReader reader;
>> @@ -107,7 +108,7 @@ public class SelectorImpl extends Source
>> return cursor == null ? null : cursor.currentNode();
>> }
>>
>> - public Value currentProperty(String propertyName) {
>> + public ScalarImpl currentProperty(String propertyName) {
>> if (propertyName.equals(PATH)) {
>> String p = currentPath();
>> return p == null ? null :
>>query.getValueFactory().createValue(p);
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/StaticOperandImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java?rev=1303867&r1
>>=1303866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/StaticOperandImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/StaticOperandImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,10 +18,10 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>>
>> public abstract class StaticOperandImpl extends AstElement {
>>
>> - abstract Value currentValue();
>> + abstract ScalarImpl currentValue();
>>
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/UpperCaseImpl.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java?rev=1303867&r1=130
>>3866&r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/UpperCaseImpl.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/ast/UpperCaseImpl.java Thu Mar 22 16:08:44 2012
>> @@ -18,7 +18,7 @@
>> */
>> package org.apache.jackrabbit.oak.query.ast;
>>
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.index.Filter;
>>
>> public class UpperCaseImpl extends DynamicOperandImpl {
>> @@ -44,8 +44,8 @@ public class UpperCaseImpl extends Dynam
>> }
>>
>> @Override
>> - public Value currentValue() {
>> - Value v = operand.currentValue();
>> + public ScalarImpl currentValue() {
>> + ScalarImpl v = operand.currentValue();
>> if (v == null) {
>> return null;
>> }
>> @@ -54,7 +54,7 @@ public class UpperCaseImpl extends Dynam
>> }
>>
>> @Override
>> - public void apply(Filter f, Operator operator, Value v) {
>> + public void apply(Filter f, Operator operator, ScalarImpl v) {
>> // ignore
>> // TODO UPPER(x) conditions: can use IS NOT NULL?
>> }
>>
>> Modified:
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/index/Filter.java
>> URL:
>>http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/
>>org/apache/jackrabbit/oak/query/index/Filter.java?rev=1303867&r1=1303866&
>>r2=1303867&view=diff
>>
>>=========================================================================
>>=====
>> ---
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/index/Filter.java (original)
>> +++
>>jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/que
>>ry/index/Filter.java Thu Mar 22 16:08:44 2012
>> @@ -19,8 +19,9 @@
>> package org.apache.jackrabbit.oak.query.index;
>>
>> import java.util.HashMap;
>> +import java.util.Map.Entry;
>> import org.apache.jackrabbit.mk.util.PathUtils;
>> -import org.apache.jackrabbit.oak.query.Value;
>> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>> import org.apache.jackrabbit.oak.query.ast.Operator;
>> import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
>>
>> @@ -106,7 +107,7 @@ public class Filter {
>> /**
>> * The first value to read, or null to read from the
>>beginning.
>> */
>> - public Value first;
>> + public ScalarImpl first;
>>
>> /**
>> * Whether values that match the first should be returned.
>> @@ -116,7 +117,7 @@ public class Filter {
>> /**
>> * The last value to read, or null to read until the end.
>> */
>> - public Value last;
>> + public ScalarImpl last;
>>
>> /**
>> * Whether values that match the last should be returned.
>> @@ -228,14 +229,14 @@ public class Filter {
>> }
>> }
>>
>> - public void restrictProperty(String propertyName, Operator op,
>>Value value) {
>> + public void restrictProperty(String propertyName, Operator op,
>>ScalarImpl value) {
>> PropertyRestriction x =
>>propertyRestrictions.get(propertyName);
>> if (x == null) {
>> x = new PropertyRestriction();
>> x.propertyName = propertyName;
>> propertyRestrictions.put(propertyName, x);
>> }
>> - Value oldFirst = x.first, oldLast = x.last;
>> + ScalarImpl oldFirst = x.first, oldLast = x.last;
>> switch (op) {
>> case EQUAL:
>> x.first = maxValue(oldFirst, value);
>> @@ -276,20 +277,33 @@ public class Filter {
>> }
>> }
>>
>> - static Value maxValue(Value a, Value b) {
>> + static ScalarImpl maxValue(ScalarImpl a, ScalarImpl b) {
>> if (a == null) {
>> return b;
>> }
>> return a.compareTo(b)< 0 ? b : a;
>> }
>>
>> - static Value minValue(Value a, Value b) {
>> + static ScalarImpl minValue(ScalarImpl a, ScalarImpl b) {
>> if (a == null) {
>> return b;
>> }
>> return a.compareTo(b)< 0 ? a : b;
>> }
>>
>> + @Override
>> + public String toString() {
>> + StringBuilder buff = new StringBuilder();
>> + if (alwaysFalse) {
>> + return "(always false)";
>> + }
>> + buff.append("path:
>>").append(path).append(pathRestriction).append('\n');
>> + for (Entry<String, PropertyRestriction> p :
>>propertyRestrictions.entrySet()) {
>> + buff.append("property ").append(p.getKey()).append(":
>>").append(p.getValue()).append('\n');
>> + }
>> + return buff.toString();
>> + }
>> +
>> public void restrictPath(String addedPath, PathRestriction
>>addedPathRestriction) {
>> // calculating the intersection of path restrictions
>> // this is ugly code, but I don't currently see a radically
>>simpler method
>>
>>
Re: svn commit: r1303867 - in /jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query:
./ ast/ index/
Posted by Michael Dürig <md...@apache.org>.
This seems to break the build. Tom could you please check that
everything compiles before you do a checkin?
Michael
On 22.3.12 16:08, thomasm@apache.org wrote:
> Author: thomasm
> Date: Thu Mar 22 16:08:44 2012
> New Revision: 1303867
>
> URL: http://svn.apache.org/viewvc?rev=1303867&view=rev
> Log:
> OAK-28 Query implementation (Row.toString(), Filter.toString(), ClassCastException for negative numbers)
>
> Removed:
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/PropertyType.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Value.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ValueFactory.java
> Modified:
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyValueImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
> jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Query.java Thu Mar 22 16:08:44 2012
> @@ -18,6 +18,7 @@ import java.util.Arrays;
> import java.util.Collections;
> import java.util.HashMap;
> import java.util.Iterator;
> +import java.util.List;
> import org.apache.jackrabbit.mk.api.MicroKernel;
> import org.apache.jackrabbit.oak.query.ast.AstVisitorBase;
> import org.apache.jackrabbit.oak.query.ast.BindVariableValueImpl;
> @@ -52,17 +53,17 @@ public class Query {
>
> final SourceImpl source;
> final ConstraintImpl constraint;
> - final HashMap<String, Value> bindVariableMap = new HashMap<String, Value>();
> + final HashMap<String, ScalarImpl> bindVariableMap = new HashMap<String, ScalarImpl>();
> final ArrayList<SelectorImpl> selectors = new ArrayList<SelectorImpl>();
>
> private MicroKernel mk;
> private final OrderingImpl[] orderings;
> - private final ColumnImpl[] columns;
> + private ColumnImpl[] columns;
> private boolean explain;
> private long limit;
> private long offset;
> private boolean prepared;
> - private final ValueFactory valueFactory = new ValueFactory();
> + private final ScalarFactory valueFactory = new ScalarFactory();
>
> Query(SourceImpl source, ConstraintImpl constraint, OrderingImpl[] orderings,
> ColumnImpl[] columns) {
> @@ -235,7 +236,7 @@ public class Query {
> return source;
> }
>
> - void bindValue(String varName, Value value) {
> + void bindValue(String varName, ScalarImpl value) {
> bindVariableMap.put(varName, value);
> }
>
> @@ -251,7 +252,7 @@ public class Query {
> this.offset = offset;
> }
>
> - public ValueFactory getValueFactory() {
> + public ScalarFactory getValueFactory() {
> return valueFactory;
> }
>
> @@ -263,7 +264,8 @@ public class Query {
> prepare();
> if (explain) {
> String plan = source.getPlan();
> - Row r = new Row(this, null, new Value[] { valueFactory.createValue(plan) }, null);
> + columns = new ColumnImpl[] { new ColumnImpl("explain", "plan", "plan")};
> + Row r = new Row(this, new String[0], new ScalarImpl[] { valueFactory.createValue(plan) }, null);
> return Arrays.asList(r).iterator();
> }
> RowIterator it = new RowIterator(revisionId);
> @@ -280,11 +282,11 @@ public class Query {
> return list.iterator();
> }
>
> - public int compareRows(Value[] orderValues, Value[] orderValues2) {
> + public int compareRows(ScalarImpl[] orderValues, ScalarImpl[] orderValues2) {
> int comp = 0;
> for (int i = 0, size = orderings.length; i< size; i++) {
> - Value a = orderValues[i];
> - Value b = orderValues2[i];
> + ScalarImpl a = orderValues[i];
> + ScalarImpl b = orderValues2[i];
> if (a == null || b == null) {
> if (a == b) {
> comp = 0;
> @@ -383,17 +385,17 @@ public class Query {
> paths[i] = s.currentPath();
> }
> int columnCount = columns.length;
> - Value[] values = new Value[columnCount];
> + ScalarImpl[] values = new ScalarImpl[columnCount];
> for (int i = 0; i< columnCount; i++) {
> ColumnImpl c = columns[i];
> values[i] = c.currentValue();
> }
> - Value[] orderValues;
> + ScalarImpl[] orderValues;
> if (orderings == null) {
> orderValues = null;
> } else {
> int size = orderings.length;
> - orderValues = new Value[size];
> + orderValues = new ScalarImpl[size];
> for (int i = 0; i< size; i++) {
> orderValues[i] = orderings[i].getOperand().currentValue();
> }
> @@ -428,12 +430,16 @@ public class Query {
> return offset;
> }
>
> - public Value getBindVariableValue(String bindVariableName) {
> - Value v = bindVariableMap.get(bindVariableName);
> + public ScalarImpl getBindVariableValue(String bindVariableName) {
> + ScalarImpl v = bindVariableMap.get(bindVariableName);
> if (v == null) {
> throw new RuntimeException("Bind variable value not set: " + bindVariableName);
> }
> return v;
> }
>
> + public List<SelectorImpl> getSelectors() {
> + return Collections.unmodifiableList(selectors);
> + }
> +
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/QueryEngine.java Thu Mar 22 16:08:44 2012
> @@ -28,7 +28,7 @@ public class QueryEngine {
> public static final String SQL2 = "sql2";
>
> private final MicroKernel mk;
> - private final ValueFactory vf = new ValueFactory();
> + private final ScalarFactory vf = new ScalarFactory();
> private final SQL2Parser parserSQL2;
>
> private QueryEngine(MicroKernel mk) {
> @@ -40,7 +40,7 @@ public class QueryEngine {
> return new QueryEngine(mk);
> }
>
> - public Iterator<Row> executeQuery(String language, String query, Map<String, Value> bindings) throws ParseException {
> + public Iterator<Row> executeQuery(String language, String query, Map<String, ScalarImpl> bindings) throws ParseException {
> Query q;
> if (SQL2.equals(language)) {
> q = parserSQL2.parse(query);
> @@ -53,7 +53,7 @@ public class QueryEngine {
> }
> q.setMicroKernel(mk);
> if (bindings != null) {
> - for (Entry<String, Value> e : bindings.entrySet()) {
> + for (Entry<String, ScalarImpl> e : bindings.entrySet()) {
> q.bindValue(e.getKey(), e.getValue());
> }
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/Row.java Thu Mar 22 16:08:44 2012
> @@ -16,21 +16,25 @@
> */
> package org.apache.jackrabbit.oak.query;
>
> +import org.apache.jackrabbit.oak.query.ast.ColumnImpl;
> +import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
> +
> /**
> * A query result row that keeps all data in memory.
> */
> public class Row implements Comparable<Row> {
>
> - private final Query qom;
> + private final Query query;
> private final String[] paths;
> - private final Value[] values;
> - private final Value[] orderValues;
> + private final ScalarImpl[] values;
> + private final ScalarImpl[] orderValues;
>
> - Row(Query qom, String[] paths, Value[] values, Value[] orderValues) {
> - this.qom = qom;
> + Row(Query query, String[] paths, ScalarImpl[] values, ScalarImpl[] orderValues) {
> + this.query = query;
> this.paths = paths;
> this.values = values;
> this.orderValues = orderValues;
> + System.out.println(toString());
> }
>
> public String getPath() {
> @@ -41,22 +45,47 @@ public class Row implements Comparable<R
> }
>
> public String getPath(String selectorName) {
> - return paths[qom.getSelectorIndex(selectorName)];
> + int index = query.getSelectorIndex(selectorName);
> + if (paths == null || index>= paths.length) {
> + return null;
> + }
> + return paths[index];
> }
>
> - public Value getValue(String columnName) {
> - return values[qom.getColumnIndex(columnName)];
> + public ScalarImpl getValue(String columnName) {
> + return values[query.getColumnIndex(columnName)];
> }
>
> - public Value[] getValues() {
> - Value[] v2 = new Value[values.length];
> + public ScalarImpl[] getValues() {
> + ScalarImpl[] v2 = new ScalarImpl[values.length];
> System.arraycopy(values, 0, v2, 0, v2.length);
> return v2;
> }
>
> @Override
> public int compareTo(Row o) {
> - return qom.compareRows(orderValues, o.orderValues);
> + return query.compareRows(orderValues, o.orderValues);
> + }
> +
> + @Override
> + public String toString() {
> + StringBuilder buff = new StringBuilder();
> + for (SelectorImpl s : query.getSelectors()) {
> + String n = s.getSelectorName();
> + String p = getPath(n);
> + if (p != null) {
> + buff.append(n).append(": ").append(p).append(" ");
> + }
> + }
> + ColumnImpl[] cols = query.getColumns();
> + for (int i = 0; i< values.length; i++) {
> + ColumnImpl c = cols[i];
> + String n = c.getColumnName();
> + if (n != null) {
> + buff.append(n).append(": ").append(values[i]).append(" ");
> + }
> + }
> + return buff.toString();
> }
>
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/SQL2Parser.java Thu Mar 22 16:08:44 2012
> @@ -61,7 +61,7 @@ public class SQL2Parser {
> private int currentTokenType;
> private String currentToken;
> private boolean currentTokenQuoted;
> - private Value currentValue;
> + private ScalarImpl currentValue;
> private ArrayList<String> expected;
>
> // The bind variables
> @@ -75,14 +75,14 @@ public class SQL2Parser {
> private boolean allowNumberLiterals = true;
>
> private final AstElementFactory factory = new AstElementFactory();
> - private final ValueFactory valueFactory;
> + private final ScalarFactory valueFactory;
>
> /**
> * Create a new parser. A parser can be re-used, but it is not thread safe.
> *
> * @param valueFactory the value factory
> */
> - public SQL2Parser(ValueFactory valueFactory) {
> + public SQL2Parser(ScalarFactory valueFactory) {
> this.valueFactory = valueFactory;
> }
>
> @@ -136,7 +136,7 @@ public class SQL2Parser {
> private String readName() throws ParseException {
> if (readIf("[")) {
> if (currentTokenType == VALUE) {
> - Value value = readString();
> + ScalarImpl value = readString();
> read("]");
> return value.getString();
> } else {
> @@ -442,16 +442,16 @@ public class SQL2Parser {
> }
> int valueType = currentValue.getType();
> switch (valueType) {
> - case PropertyType.LONG:
> + case ScalarType.LONG:
> currentValue = valueFactory.createValue(-currentValue.getLong());
> break;
> - case PropertyType.DOUBLE:
> + case ScalarType.DOUBLE:
> currentValue = valueFactory.createValue(-currentValue.getDouble());
> break;
> - case PropertyType.BOOLEAN:
> + case ScalarType.BOOLEAN:
> currentValue = valueFactory.createValue(!currentValue.getBoolean());
> break;
> - case PropertyType.DECIMAL:
> + case ScalarType.DECIMAL:
> currentValue = valueFactory.createValue(currentValue.getDecimal().negate());
> break;
> default:
> @@ -487,7 +487,7 @@ public class SQL2Parser {
> throw getSyntaxError("literal");
> }
> LiteralImpl literal = (LiteralImpl) op;
> - Value value = literal.getLiteralValue();
> + ScalarImpl value = literal.getLiteralValue();
> read("AS");
> value = parseCastAs(value);
> read(")");
> @@ -505,11 +505,11 @@ public class SQL2Parser {
> * @param value the original value
> * @return the literal
> */
> - private LiteralImpl getUncastLiteral(Value value) throws ParseException {
> + private LiteralImpl getUncastLiteral(ScalarImpl value) throws ParseException {
> return factory.literal(value);
> }
>
> - private Value parseCastAs(Value value) throws ParseException {
> + private ScalarImpl parseCastAs(ScalarImpl value) throws ParseException {
> if (readIf("STRING")) {
> return valueFactory.createValue(value.getString());
> } else if (readIf("BINARY")) {
> @@ -525,15 +525,15 @@ public class SQL2Parser {
> } else if (readIf("BOOLEAN")) {
> return valueFactory.createValue(value.getBoolean());
> } else if (readIf("NAME")) {
> - return valueFactory.createValue(value.getString(), PropertyType.NAME);
> + return valueFactory.createValue(value.getString(), ScalarType.NAME);
> } else if (readIf("PATH")) {
> - return valueFactory.createValue(value.getString(), PropertyType.PATH);
> + return valueFactory.createValue(value.getString(), ScalarType.PATH);
> } else if (readIf("REFERENCE")) {
> - return valueFactory.createValue(value.getString(), PropertyType.REFERENCE);
> + return valueFactory.createValue(value.getString(), ScalarType.REFERENCE);
> } else if (readIf("WEAKREFERENCE")) {
> - return valueFactory.createValue(value.getString(), PropertyType.WEAKREFERENCE);
> + return valueFactory.createValue(value.getString(), ScalarType.WEAKREFERENCE);
> } else if (readIf("URI")) {
> - return valueFactory.createValue(value.getString(), PropertyType.URI);
> + return valueFactory.createValue(value.getString(), ScalarType.URI);
> } else {
> throw getSyntaxError("data type (STRING|BINARY|...)");
> }
> @@ -654,11 +654,11 @@ public class SQL2Parser {
> return s;
> }
>
> - private Value readString() throws ParseException {
> + private ScalarImpl readString() throws ParseException {
> if (currentTokenType != VALUE) {
> throw getSyntaxError("string value");
> }
> - Value value = currentValue;
> + ScalarImpl value = currentValue;
> read();
> return value;
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/AstElementFactory.java Thu Mar 22 16:08:44 2012
> @@ -13,7 +13,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>
> /**
> * A factory for syntax tree elements.
> @@ -84,7 +84,7 @@ public class AstElementFactory {
> return new LengthImpl(propertyValue);
> }
>
> - public LiteralImpl literal(Value literalValue) {
> + public LiteralImpl literal(ScalarImpl literalValue) {
> return new LiteralImpl(literalValue);
> }
>
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/BindVariableValueImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>
> public class BindVariableValueImpl extends StaticOperandImpl {
>
> @@ -43,7 +43,7 @@ public class BindVariableValueImpl exten
> }
>
> @Override
> - Value currentValue() {
> + ScalarImpl currentValue() {
> return query.getBindVariableValue(bindVariableName);
> }
>
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ColumnImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>
> public class ColumnImpl extends AstElement {
>
> @@ -58,7 +58,7 @@ public class ColumnImpl extends AstEleme
> }
> }
>
> - public Value currentValue() {
> + public ScalarImpl currentValue() {
> if (propertyName == null) {
> // TODO for SELECT * FROM queries, currently return the path (for testing only)
> String p = selector.currentPath();
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/ComparisonImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,8 +18,8 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> -import org.apache.jackrabbit.oak.query.ValueFactory;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> +import org.apache.jackrabbit.oak.query.ScalarFactory;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class ComparisonImpl extends ConstraintImpl {
> @@ -48,8 +48,8 @@ public class ComparisonImpl extends Cons
>
> @Override
> public boolean evaluate() {
> - Value v1 = operand1.currentValue();
> - Value v2 = operand2.currentValue();
> + ScalarImpl v1 = operand1.currentValue();
> + ScalarImpl v2 = operand2.currentValue();
> if (v1 == null || v2 == null) {
> // TODO comparison: what about (null<> x) ?
> return false;
> @@ -71,7 +71,7 @@ public class ComparisonImpl extends Cons
> return false;
> }
>
> - private static boolean evaluateLike(Value v1, Value v2) {
> + private static boolean evaluateLike(ScalarImpl v1, ScalarImpl v2) {
> LikePattern like = new LikePattern(v2.getString());
> return like.matches(v1.getString());
> }
> @@ -255,7 +255,7 @@ public class ComparisonImpl extends Cons
>
> @Override
> public void apply(Filter f) {
> - Value v = operand2.currentValue();
> + ScalarImpl v = operand2.currentValue();
> if (v != null) {
> if (operator == Operator.LIKE) {
> String pattern;
> @@ -266,7 +266,7 @@ public class ComparisonImpl extends Cons
> if (lowerBound == null&& upperBound == null) {
> // ignore
> } else {
> - ValueFactory vf = query.getValueFactory();
> + ScalarFactory vf = query.getValueFactory();
> if (lowerBound != null) {
> operand1.apply(f, Operator.GREATER_OR_EQUAL, vf.createValue(lowerBound));
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/DynamicOperandImpl.java Thu Mar 22 16:08:44 2012
> @@ -16,13 +16,13 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public abstract class DynamicOperandImpl extends AstElement {
>
> - public abstract Value currentValue();
> + public abstract ScalarImpl currentValue();
>
> - public abstract void apply(Filter f, Operator operator, Value v);
> + public abstract void apply(Filter f, Operator operator, ScalarImpl v);
>
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/EquiJoinConditionImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class EquiJoinConditionImpl extends JoinConditionImpl {
> @@ -79,19 +79,19 @@ public class EquiJoinConditionImpl exten
>
> @Override
> public boolean evaluate() {
> - Value v1 = selector1.currentProperty(property1Name);
> + ScalarImpl v1 = selector1.currentProperty(property1Name);
> if (v1 == null) {
> return false;
> }
> // TODO data type mapping
> - Value v2 = selector2.currentProperty(property2Name);
> + ScalarImpl v2 = selector2.currentProperty(property2Name);
> return v2 != null&& v1.equals(v2);
> }
>
> @Override
> public void apply(Filter f) {
> - Value v1 = selector1.currentProperty(property1Name);
> - Value v2 = selector2.currentProperty(property2Name);
> + ScalarImpl v1 = selector1.currentProperty(property1Name);
> + ScalarImpl v2 = selector2.currentProperty(property2Name);
> if (f.getSelector() == selector1&& v2 != null) {
> f.restrictProperty(property1Name, Operator.EQUAL, v2);
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/FullTextSearchScoreImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class FullTextSearchScoreImpl extends DynamicOperandImpl {
> @@ -44,13 +44,13 @@ public class FullTextSearchScoreImpl ext
> }
>
> @Override
> - public Value currentValue() {
> + public ScalarImpl currentValue() {
> // TODO support evaluating fulltext conditions (score)
> return null;
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> // TODO support fulltext index conditions (score)
> }
>
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LengthImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class LengthImpl extends DynamicOperandImpl {
> @@ -44,8 +44,8 @@ public class LengthImpl extends DynamicO
> }
>
> @Override
> - public Value currentValue() {
> - Value v = propertyValue.currentValue();
> + public ScalarImpl currentValue() {
> + ScalarImpl v = propertyValue.currentValue();
> if (v == null) {
> return null;
> }
> @@ -55,7 +55,7 @@ public class LengthImpl extends DynamicO
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> // ignore
> // TODO LENGTH(x) conditions: can use IS NOT NULL?
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LiteralImpl.java Thu Mar 22 16:08:44 2012
> @@ -19,18 +19,18 @@
> package org.apache.jackrabbit.oak.query.ast;
>
> import org.apache.jackrabbit.oak.query.SQL2Parser;
> -import org.apache.jackrabbit.oak.query.PropertyType;
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> +import org.apache.jackrabbit.oak.query.ScalarType;
>
> public class LiteralImpl extends StaticOperandImpl {
>
> - private final Value value;
> + private final ScalarImpl value;
>
> - public LiteralImpl(Value value) {
> + public LiteralImpl(ScalarImpl value) {
> this.value = value;
> }
>
> - public Value getLiteralValue() {
> + public ScalarImpl getLiteralValue() {
> return value;
> }
>
> @@ -42,28 +42,28 @@ public class LiteralImpl extends StaticO
> @Override
> public String toString() {
> switch (value.getType()) {
> - case PropertyType.BINARY:
> + case ScalarType.BINARY:
> return cast("BINARY");
> - case PropertyType.BOOLEAN:
> + case ScalarType.BOOLEAN:
> return cast("BOOLEAN");
> - case PropertyType.DATE:
> + case ScalarType.DATE:
> return cast("DATE");
> - case PropertyType.DECIMAL:
> + case ScalarType.DECIMAL:
> return cast("DECIMAL");
> - case PropertyType.DOUBLE:
> - case PropertyType.LONG:
> + case ScalarType.DOUBLE:
> + case ScalarType.LONG:
> return value.getString();
> - case PropertyType.NAME:
> + case ScalarType.NAME:
> return cast("NAME");
> - case PropertyType.PATH:
> + case ScalarType.PATH:
> return cast("PATH");
> - case PropertyType.REFERENCE:
> + case ScalarType.REFERENCE:
> return cast("REFERENCE");
> - case PropertyType.STRING:
> + case ScalarType.STRING:
> return escape();
> - case PropertyType.URI:
> + case ScalarType.URI:
> return cast("URI");
> - case PropertyType.WEAKREFERENCE:
> + case ScalarType.WEAKREFERENCE:
> return cast("WEAKREFERENCE");
> default:
> return escape();
> @@ -79,7 +79,7 @@ public class LiteralImpl extends StaticO
> }
>
> @Override
> - Value currentValue() {
> + ScalarImpl currentValue() {
> return value;
> }
>
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/LowerCaseImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class LowerCaseImpl extends DynamicOperandImpl {
> @@ -44,8 +44,8 @@ public class LowerCaseImpl extends Dynam
> }
>
> @Override
> - public Value currentValue() {
> - Value v = operand.currentValue();
> + public ScalarImpl currentValue() {
> + ScalarImpl v = operand.currentValue();
> if (v == null) {
> return null;
> }
> @@ -54,7 +54,7 @@ public class LowerCaseImpl extends Dynam
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> // ignore
> // TODO UPPER(x) conditions: can use IS NOT NULL?
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeLocalNameImpl.java Thu Mar 22 16:08:44 2012
> @@ -19,7 +19,7 @@
> package org.apache.jackrabbit.oak.query.ast;
>
> import org.apache.jackrabbit.mk.util.PathUtils;
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class NodeLocalNameImpl extends DynamicOperandImpl {
> @@ -53,7 +53,7 @@ public class NodeLocalNameImpl extends D
> }
>
> @Override
> - public Value currentValue() {
> + public ScalarImpl currentValue() {
> String name = PathUtils.getName(selector.currentPath());
> int colon = name.indexOf(':');
> // TODO LOCALNAME: evaluation of local name might not be correct
> @@ -62,7 +62,7 @@ public class NodeLocalNameImpl extends D
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> // TODO support LOCALNAME index conditions
> }
>
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/NodeNameImpl.java Thu Mar 22 16:08:44 2012
> @@ -19,7 +19,7 @@
> package org.apache.jackrabbit.oak.query.ast;
>
> import org.apache.jackrabbit.mk.util.PathUtils;
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class NodeNameImpl extends DynamicOperandImpl {
> @@ -53,13 +53,13 @@ public class NodeNameImpl extends Dynami
> }
>
> @Override
> - public Value currentValue() {
> + public ScalarImpl currentValue() {
> String name = PathUtils.getName(selector.currentPath());
> return query.getValueFactory().createValue(name);
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> // TODO support NAME(..) index conditions
> }
>
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/PropertyExistenceImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class PropertyExistenceImpl extends ConstraintImpl {
> @@ -42,7 +42,7 @@ public class PropertyExistenceImpl exten
>
> @Override
> public boolean evaluate() {
> - Value v = selector.currentProperty(propertyName);
> + ScalarImpl v = selector.currentProperty(propertyName);
> return v != null;
> }
>
> @@ -67,7 +67,7 @@ public class PropertyExistenceImpl exten
> @Override
> public void apply(Filter f) {
> if (f.getSelector() == selector) {
> - f.restrictProperty(propertyName, Operator.NOT_EQUAL, (Value) null);
> + f.restrictProperty(propertyName, Operator.NOT_EQUAL, (ScalarImpl) null);
> }
> }
>
>
> 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=1303867&r1=1303866&r2=1303867&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 Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class PropertyValueImpl extends DynamicOperandImpl {
> @@ -52,7 +52,7 @@ public class PropertyValueImpl extends D
> }
>
> @Override
> - public Value currentValue() {
> + public ScalarImpl currentValue() {
> return selector.currentProperty(propertyName);
> }
>
> @@ -64,7 +64,7 @@ public class PropertyValueImpl extends D
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> if (f.getSelector() == selector) {
> f.restrictProperty(propertyName, operator, v);
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/SelectorImpl.java Thu Mar 22 16:08:44 2012
> @@ -22,7 +22,7 @@ import org.apache.jackrabbit.mk.api.Micr
> import org.apache.jackrabbit.mk.json.JsopTokenizer;
> import org.apache.jackrabbit.mk.simple.NodeImpl;
> import org.apache.jackrabbit.oak.query.Query;
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Cursor;
> import org.apache.jackrabbit.oak.query.index.Filter;
> import org.apache.jackrabbit.oak.query.index.NodeReader;
> @@ -30,6 +30,7 @@ import org.apache.jackrabbit.oak.query.i
>
> public class SelectorImpl extends SourceImpl {
>
> + // TODO jcr:path isn't an official feature, support it?
> private static final String PATH = "jcr:path";
>
> protected NodeReader reader;
> @@ -107,7 +108,7 @@ public class SelectorImpl extends Source
> return cursor == null ? null : cursor.currentNode();
> }
>
> - public Value currentProperty(String propertyName) {
> + public ScalarImpl currentProperty(String propertyName) {
> if (propertyName.equals(PATH)) {
> String p = currentPath();
> return p == null ? null : query.getValueFactory().createValue(p);
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/StaticOperandImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,10 +18,10 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
>
> public abstract class StaticOperandImpl extends AstElement {
>
> - abstract Value currentValue();
> + abstract ScalarImpl currentValue();
>
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/ast/UpperCaseImpl.java Thu Mar 22 16:08:44 2012
> @@ -18,7 +18,7 @@
> */
> package org.apache.jackrabbit.oak.query.ast;
>
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.index.Filter;
>
> public class UpperCaseImpl extends DynamicOperandImpl {
> @@ -44,8 +44,8 @@ public class UpperCaseImpl extends Dynam
> }
>
> @Override
> - public Value currentValue() {
> - Value v = operand.currentValue();
> + public ScalarImpl currentValue() {
> + ScalarImpl v = operand.currentValue();
> if (v == null) {
> return null;
> }
> @@ -54,7 +54,7 @@ public class UpperCaseImpl extends Dynam
> }
>
> @Override
> - public void apply(Filter f, Operator operator, Value v) {
> + public void apply(Filter f, Operator operator, ScalarImpl v) {
> // ignore
> // TODO UPPER(x) conditions: can use IS NOT NULL?
> }
>
> Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java
> URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java?rev=1303867&r1=1303866&r2=1303867&view=diff
> ==============================================================================
> --- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java (original)
> +++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/query/index/Filter.java Thu Mar 22 16:08:44 2012
> @@ -19,8 +19,9 @@
> package org.apache.jackrabbit.oak.query.index;
>
> import java.util.HashMap;
> +import java.util.Map.Entry;
> import org.apache.jackrabbit.mk.util.PathUtils;
> -import org.apache.jackrabbit.oak.query.Value;
> +import org.apache.jackrabbit.oak.query.ScalarImpl;
> import org.apache.jackrabbit.oak.query.ast.Operator;
> import org.apache.jackrabbit.oak.query.ast.SelectorImpl;
>
> @@ -106,7 +107,7 @@ public class Filter {
> /**
> * The first value to read, or null to read from the beginning.
> */
> - public Value first;
> + public ScalarImpl first;
>
> /**
> * Whether values that match the first should be returned.
> @@ -116,7 +117,7 @@ public class Filter {
> /**
> * The last value to read, or null to read until the end.
> */
> - public Value last;
> + public ScalarImpl last;
>
> /**
> * Whether values that match the last should be returned.
> @@ -228,14 +229,14 @@ public class Filter {
> }
> }
>
> - public void restrictProperty(String propertyName, Operator op, Value value) {
> + public void restrictProperty(String propertyName, Operator op, ScalarImpl value) {
> PropertyRestriction x = propertyRestrictions.get(propertyName);
> if (x == null) {
> x = new PropertyRestriction();
> x.propertyName = propertyName;
> propertyRestrictions.put(propertyName, x);
> }
> - Value oldFirst = x.first, oldLast = x.last;
> + ScalarImpl oldFirst = x.first, oldLast = x.last;
> switch (op) {
> case EQUAL:
> x.first = maxValue(oldFirst, value);
> @@ -276,20 +277,33 @@ public class Filter {
> }
> }
>
> - static Value maxValue(Value a, Value b) {
> + static ScalarImpl maxValue(ScalarImpl a, ScalarImpl b) {
> if (a == null) {
> return b;
> }
> return a.compareTo(b)< 0 ? b : a;
> }
>
> - static Value minValue(Value a, Value b) {
> + static ScalarImpl minValue(ScalarImpl a, ScalarImpl b) {
> if (a == null) {
> return b;
> }
> return a.compareTo(b)< 0 ? a : b;
> }
>
> + @Override
> + public String toString() {
> + StringBuilder buff = new StringBuilder();
> + if (alwaysFalse) {
> + return "(always false)";
> + }
> + buff.append("path: ").append(path).append(pathRestriction).append('\n');
> + for (Entry<String, PropertyRestriction> p : propertyRestrictions.entrySet()) {
> + buff.append("property ").append(p.getKey()).append(": ").append(p.getValue()).append('\n');
> + }
> + return buff.toString();
> + }
> +
> public void restrictPath(String addedPath, PathRestriction addedPathRestriction) {
> // calculating the intersection of path restrictions
> // this is ugly code, but I don't currently see a radically simpler method
>
>