You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2013/12/13 19:28:20 UTC
svn commit: r1550793 - in
/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util:
ExpressionToolbox.java OperatorToolbox.java
Author: prestonc
Date: Fri Dec 13 18:28:20 2013
New Revision: 1550793
URL: http://svn.apache.org/r1550793
Log:
Added new functions to the rewrite toolboxes.
Modified:
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/ExpressionToolbox.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/OperatorToolbox.java
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/ExpressionToolbox.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/ExpressionToolbox.java?rev=1550793&r1=1550792&r2=1550793&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/ExpressionToolbox.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/ExpressionToolbox.java Fri Dec 13 18:28:20 2013
@@ -32,8 +32,9 @@ import edu.uci.ics.hyracks.algebricks.co
import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
public class ExpressionToolbox {
-
- public static Mutable<ILogicalExpression> findVariableExpression(Mutable<ILogicalExpression> mutableLe, LogicalVariable lv) {
+
+ public static Mutable<ILogicalExpression> findVariableExpression(Mutable<ILogicalExpression> mutableLe,
+ LogicalVariable lv) {
ILogicalExpression le = mutableLe.getValue();
if (le.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
VariableReferenceExpression vre = (VariableReferenceExpression) le;
@@ -52,7 +53,24 @@ public class ExpressionToolbox {
return null;
}
- public static Mutable<ILogicalExpression> findFunctionExpression(Mutable<ILogicalExpression> mutableLe, FunctionIdentifier fi) {
+ public static Mutable<ILogicalExpression> findVariableExpression(Mutable<ILogicalExpression> mutableLe) {
+ ILogicalExpression le = mutableLe.getValue();
+ if (le.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
+ return mutableLe;
+ } else if (le.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ AbstractFunctionCallExpression afce = (AbstractFunctionCallExpression) le;
+ for (Mutable<ILogicalExpression> argExp : afce.getArguments()) {
+ Mutable<ILogicalExpression> resultLe = findVariableExpression(argExp);
+ if (resultLe != null) {
+ return resultLe;
+ }
+ }
+ }
+ return null;
+ }
+
+ public static Mutable<ILogicalExpression> findFunctionExpression(Mutable<ILogicalExpression> mutableLe,
+ FunctionIdentifier fi) {
ILogicalExpression le = mutableLe.getValue();
if (le.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
AbstractFunctionCallExpression afce = (AbstractFunctionCallExpression) le;
@@ -86,11 +104,10 @@ public class ExpressionToolbox {
}
return null;
}
-
+
public static void getConstantAsPointable(ConstantExpression typeExpression, TaggedValuePointable tvp) {
VXQueryConstantValue treatTypeConstant = (VXQueryConstantValue) typeExpression.getValue();
tvp.set(treatTypeConstant.getValue(), 0, treatTypeConstant.getValue().length);
}
-
}
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/OperatorToolbox.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/OperatorToolbox.java?rev=1550793&r1=1550792&r2=1550793&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/OperatorToolbox.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/util/OperatorToolbox.java Fri Dec 13 18:28:20 2013
@@ -24,12 +24,27 @@ import org.apache.commons.lang3.mutable.
import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractAssignOperator;
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractLogicalOperator;
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.AbstractUnnestOperator;
public class OperatorToolbox {
+ public static Mutable<ILogicalOperator> findLastSubplanOperator(Mutable<ILogicalOperator> opRef) {
+ AbstractLogicalOperator op = (AbstractLogicalOperator) opRef;
+ AbstractLogicalOperator next;
+ while (op.getOperatorTag() != LogicalOperatorTag.NESTEDTUPLESOURCE) {
+ opRef = op.getInputs().get(0);
+ op = (AbstractLogicalOperator) opRef;
+ next = (AbstractLogicalOperator) op.getInputs().get(0).getValue();
+ if (next.getOperatorTag() == LogicalOperatorTag.NESTEDTUPLESOURCE) {
+ break;
+ }
+ }
+ return opRef;
+ }
+
public static AbstractLogicalOperator findLastSubplanOperator(AbstractLogicalOperator op) {
AbstractLogicalOperator next;
while (op.getOperatorTag() != LogicalOperatorTag.NESTEDTUPLESOURCE) {
@@ -41,7 +56,7 @@ public class OperatorToolbox {
}
return op;
}
-
+
public static List<Mutable<ILogicalExpression>> getExpression(Mutable<ILogicalOperator> opRef) {
AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
List<Mutable<ILogicalExpression>> result = new ArrayList<Mutable<ILogicalExpression>>();
@@ -89,4 +104,68 @@ public class OperatorToolbox {
return result;
}
+
+ public static Mutable<ILogicalOperator> findProducerOf(Mutable<ILogicalOperator> opRef, LogicalVariable lv) {
+ AbstractLogicalOperator op = (AbstractLogicalOperator) opRef.getValue();
+ switch (op.getOperatorTag()) {
+ case AGGREGATE:
+ case ASSIGN:
+ case RUNNINGAGGREGATE:
+ AbstractAssignOperator aao = (AbstractAssignOperator) op;
+ if (aao.getVariables().contains(lv)) {
+ return opRef;
+ }
+ for (Mutable<ILogicalOperator> input : op.getInputs()) {
+ Mutable<ILogicalOperator> opInput = findProducerOf(input, lv);
+ if (opInput != null) {
+ return opInput;
+ }
+ }
+ break;
+ case UNNEST:
+ case UNNEST_MAP:
+ AbstractUnnestOperator auo = (AbstractUnnestOperator) op;
+ if (auo.getVariables().contains(lv)) {
+ return opRef;
+ }
+ for (Mutable<ILogicalOperator> input : op.getInputs()) {
+ Mutable<ILogicalOperator> opInput = findProducerOf(input, lv);
+ if (opInput != null) {
+ return opInput;
+ }
+ }
+ break;
+ case EMPTYTUPLESOURCE:
+ case NESTEDTUPLESOURCE:
+ return null;
+ case CLUSTER:
+ case DATASOURCESCAN:
+ case DISTINCT:
+ case DISTRIBUTE_RESULT:
+ case EXCHANGE:
+ case EXTENSION_OPERATOR:
+ case GROUP:
+ case INDEX_INSERT_DELETE:
+ case INNERJOIN:
+ case INSERT_DELETE:
+ case LEFTOUTERJOIN:
+ case LIMIT:
+ case ORDER:
+ case PARTITIONINGSPLIT:
+ case PROJECT:
+ case REPLICATE:
+ case SCRIPT:
+ case SELECT:
+ case SINK:
+ case SUBPLAN:
+ case UNIONALL:
+ case UPDATE:
+ case WRITE:
+ case WRITE_RESULT:
+ default:
+ // TODO Not yet implemented.
+ break;
+ }
+ return null;
+ }
}