made Operation types immutable

This commit is contained in:
Timo Westkämper 2009-04-01 14:24:47 +00:00
parent 8aa8cd3262
commit b5d7e515d4
4 changed files with 11 additions and 11 deletions

View File

@ -361,7 +361,7 @@ public class AbstractColQuery<SubType extends AbstractColQuery<SubType>> impleme
// TODO : handle deeper OR operations as well
Operation<?,?> op = (Operation<?,?>)condition;
IteratorChain<Object[]> chain = new IteratorChain<Object[]>();
EBoolean e1 = (EBoolean)op.getArgs()[0], e2 = (EBoolean)op.getArgs()[1];
EBoolean e1 = (EBoolean)op.getArgs().get(0), e2 = (EBoolean)op.getArgs().get(1);
chain.addIterator(createMultiIterator(sources, e1));
chain.addIterator(createMultiIterator(sources, e2.and(e1.not())));
return chain;
@ -380,7 +380,7 @@ public class AbstractColQuery<SubType extends AbstractColQuery<SubType>> impleme
if (sequentialUnion && condition instanceof Operation && ((Operation<?,?>)condition).getOperator() == Ops.OR){
Operation<?,?> op = (Operation<?,?>)condition;
IteratorChain<Object[]> chain = new IteratorChain<Object[]>();
EBoolean e1 = (EBoolean)op.getArgs()[0], e2 = (EBoolean)op.getArgs()[1];
EBoolean e1 = (EBoolean)op.getArgs().get(0), e2 = (EBoolean)op.getArgs().get(1);
Iterator<?> it1 = indexSupport.getChildFor(e1).getIterator(join.getTarget());
chain.addIterator(multiArgFilter(ops, toArrayIterator(it1), sources, e1));
Iterator<?> it2 = indexSupport.getChildFor(e2.and(e1.not())).getIterator(join.getTarget());

View File

@ -66,7 +66,7 @@ public class FilteredJavaSerializer extends JavaSerializer{
}
@Override
protected void visitOperation(Class<?> type, Op<?> operator, Expr<?>... args) {
protected void visitOperation(Class<?> type, Op<?> operator, List<Expr<?>> args) {
if (!skipPath){
boolean unknownPaths = false;
boolean knownPaths = false;

View File

@ -181,25 +181,25 @@ public class JavaSerializer extends BaseSerializer<JavaSerializer>{
}
@Override
protected void visitOperation(Class<?> type, Op<?> operator, Expr<?>... args) {
protected void visitOperation(Class<?> type, Op<?> operator, List<Expr<?>> args) {
if (operator.equals(Ops.LIKE)){
// optimize like matches to startsWith and endsWith, when possible
String right = args[1].toString();
String right = args.get(1).toString();
if (!right.contains("_")){
int lastIndex = right.lastIndexOf('%');
if (lastIndex == right.length() -1){
operator = Ops.STARTSWITH;
args = new Expr[]{args[0],new Expr.EConstant<String>(right.substring(0, lastIndex))};
args = Arrays.<Expr<?>>asList(args.get(0),new Expr.EConstant<String>(right.substring(0, lastIndex)));
}else if (lastIndex == 0){
operator = Ops.ENDSWITH;
args = new Expr[]{args[0],new Expr.EConstant<String>(right.substring(1))};
args = Arrays.<Expr<?>>asList(args.get(0),new Expr.EConstant<String>(right.substring(1)));
}
}
super.visitOperation(type, operator, args);
}else if (operator.equals(Ops.STRING_CAST)){
visitCast(operator, args[0], String.class);
visitCast(operator, args.get(0), String.class);
}else if (operator.equals(Ops.NUMCAST)){
visitCast(operator, args[0], (Class<?>) ((EConstant<?>)args[1]).getConstant());
visitCast(operator, args.get(0), (Class<?>) ((EConstant<?>)args.get(1)).getConstant());
}else{
super.visitOperation(type, operator, args);
}

View File

@ -94,8 +94,8 @@ public class DefaultIndexCreationTask {
public void visitOperation(Operation<?,?> op) {
if (op.getOperator() == Ops.EQ_OBJECT || op.getOperator() == Ops.EQ_PRIMITIVE){
Expr<?> e1 = op.getArgs()[0];
Expr<?> e2 = op.getArgs()[1];
Expr<?> e1 = op.getArgs().get(0);
Expr<?> e2 = op.getArgs().get(1);
if (e1 instanceof Path && e2 instanceof Path){
indexPathEqPath(e1, e2);