mirror of
https://github.com/querydsl/querydsl.git
synced 2026-06-30 21:08:30 +08:00
made Operation types immutable
This commit is contained in:
parent
8aa8cd3262
commit
b5d7e515d4
@ -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());
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user