Author: rvesse
Date: Wed Apr 9 14:59:20 2014
New Revision: 1585986
URL: http://svn.apache.org/r1585986
Log:
Rework ExprTransformConstantFold to propogate folded expressions up the tree
(JENA-630)
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/ExprTransformConstantFold.java
Modified:
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/ExprTransformConstantFold.java
URL:
http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/ExprTransformConstantFold.java?rev=1585986&r1=1585985&r2=1585986&view=diff
==============================================================================
---
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/ExprTransformConstantFold.java
(original)
+++
jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/algebra/optimize/ExprTransformConstantFold.java
Wed Apr 9 14:59:20 2014
@@ -34,6 +34,10 @@ public class ExprTransformConstantFold e
@Override
public Expr transform(ExprFunction1 func, Expr expr1) {
+ // System.out.println("transform ExprFunction1: " + func + " - " +
+ // expr1);
+ if (!func.getArg().equals(expr1))
+ func = (ExprFunction1) func.copy(expr1);
Expr transformed = func.copySubstitute(this.b, true);
if (transformed.equals(func))
return super.transform(func, expr1);
@@ -42,14 +46,24 @@ public class ExprTransformConstantFold e
@Override
public Expr transform(ExprFunction2 func, Expr expr1, Expr expr2) {
+ // System.out.println("transform ExprFunction2: " + func + " - " +
expr1
+ // + " - " + expr2);
+ if (!func.getArg1().equals(expr1) || !func.getArg2().equals(expr2))
+ func = (ExprFunction2) func.copy(expr1, expr2);
Expr transformed = func.copySubstitute(this.b, true);
if (transformed.equals(func))
return super.transform(func, expr1, expr2);
return transformed;
+
}
@Override
public Expr transform(ExprFunction3 func, Expr expr1, Expr expr2, Expr
expr3) {
+ // System.out.println("transform ExprFunction3: " + func + " - " +
expr1
+ // + " - " + expr2 + " - " + expr3);
+
+ if (!func.getArg1().equals(expr1) || !func.getArg2().equals(expr2) ||
!func.getArg3().equals(expr3))
+ func = (ExprFunction3) func.copy(expr1, expr2, expr3);
Expr transformed = func.copySubstitute(this.b, true);
if (transformed.equals(func))
return super.transform(func, expr1, expr2, expr3);
@@ -58,6 +72,8 @@ public class ExprTransformConstantFold e
@Override
public Expr transform(ExprFunctionN func, ExprList args) {
+ if (!func.getArgs().equals(args.getList()))
+ func = (ExprFunctionN) func.copy(args);
Expr transformed = func.copySubstitute(this.b, true);
if (transformed.equals(func))
return super.transform(func, args);
@@ -71,8 +87,8 @@ public class ExprTransformConstantFold e
// Manually transform each argument
Op op = Transformer.transform(new TransformCopy(), this,
funcOp.getGraphPattern());
ExprList newArgs = new ExprList();
- for (int i = 0; i < funcOp.getArgs().size(); i++) {
- Expr curr = funcOp.getArg(i);
+ for (int i = 0; i < args.size(); i++) {
+ Expr curr = args.get(i);
Expr newArg = curr.copySubstitute(this.b, true);
newArgs.add(newArg);
}