add visitor to pretty-print expressions
diff --git a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalExpressionPrettyPrintVisitor.java b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalExpressionPrettyPrintVisitor.java
new file mode 100644
index 0000000..5f77352
--- /dev/null
+++ b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalExpressionPrettyPrintVisitor.java
@@ -0,0 +1,70 @@
+/*
+ * Copyright 2014 by The Regents of the University of California
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * you may obtain a copy of the License from
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package edu.uci.ics.hyracks.algebricks.core.algebra.prettyprint;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.StatefulFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionVisitor;
+
+
+public class LogicalExpressionPrettyPrintVisitor implements ILogicalExpressionVisitor<String, Integer> {
+
+ @Override
+ public String visitConstantExpression(ConstantExpression expr, Integer indent)
+ throws AlgebricksException {
+ return expr.toString();
+ }
+
+ @Override
+ public String visitVariableReferenceExpression(
+ VariableReferenceExpression expr, Integer indent)
+ throws AlgebricksException {
+ return expr.toString();
+ }
+
+ @Override
+ public String visitAggregateFunctionCallExpression(
+ AggregateFunctionCallExpression expr, Integer indent)
+ throws AlgebricksException {
+ return expr.toString();
+ }
+
+ @Override
+ public String visitScalarFunctionCallExpression(
+ ScalarFunctionCallExpression expr, Integer indent)
+ throws AlgebricksException {
+ return expr.toString();
+ }
+
+ @Override
+ public String visitStatefulFunctionCallExpression(
+ StatefulFunctionCallExpression expr, Integer indent)
+ throws AlgebricksException {
+ return expr.toString();
+ }
+
+ @Override
+ public String visitUnnestingFunctionCallExpression(
+ UnnestingFunctionCallExpression expr, Integer indent)
+ throws AlgebricksException {
+ return expr.toString();
+ }
+}
+
diff --git a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
index 49ec269..d364d87 100644
--- a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
+++ b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/prettyprint/LogicalOperatorPrettyPrintVisitor.java
@@ -55,26 +55,34 @@
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteOperator;
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.WriteResultOperator;
+import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionVisitor;
import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
public class LogicalOperatorPrettyPrintVisitor implements ILogicalOperatorVisitor<String, Integer> {
+ ILogicalExpressionVisitor<String, Integer> exprVisitor;
+
public LogicalOperatorPrettyPrintVisitor() {
+ exprVisitor = new LogicalExpressionPrettyPrintVisitor();
+ }
+
+ public LogicalOperatorPrettyPrintVisitor(ILogicalExpressionVisitor<String, Integer> exprVisitor) {
+ this.exprVisitor = exprVisitor;
}
@Override
- public String visitAggregateOperator(AggregateOperator op, Integer indent) {
+ public String visitAggregateOperator(AggregateOperator op, Integer indent) throws AlgebricksException {
StringBuilder buffer = new StringBuilder();
addIndent(buffer, indent).append("aggregate ").append(op.getVariables()).append(" <- ");
- pprintExprList(op.getExpressions(), buffer);
+ pprintExprList(op.getExpressions(), buffer, indent);
return buffer.toString();
}
@Override
- public String visitRunningAggregateOperator(RunningAggregateOperator op, Integer indent) {
+ public String visitRunningAggregateOperator(RunningAggregateOperator op, Integer indent) throws AlgebricksException {
StringBuilder buffer = new StringBuilder();
addIndent(buffer, indent).append("running-aggregate ").append(op.getVariables()).append(" <- ");
- pprintExprList(op.getExpressions(), buffer);
+ pprintExprList(op.getExpressions(), buffer, indent);
return buffer.toString();
}
@@ -95,10 +103,10 @@
}
@Override
- public String visitDistinctOperator(DistinctOperator op, Integer indent) {
+ public String visitDistinctOperator(DistinctOperator op, Integer indent) throws AlgebricksException {
StringBuilder buffer = new StringBuilder();
addIndent(buffer, indent).append("distinct " + "(");
- pprintExprList(op.getExpressions(), buffer);
+ pprintExprList(op.getExpressions(), buffer, indent);
buffer.append(")");
return buffer.toString();
}
@@ -149,10 +157,10 @@
}
@Override
- public String visitAssignOperator(AssignOperator op, Integer indent) {
+ public String visitAssignOperator(AssignOperator op, Integer indent) throws AlgebricksException {
StringBuilder buffer = new StringBuilder();
addIndent(buffer, indent).append("assign ").append(op.getVariables()).append(" <- ");
- pprintExprList(op.getExpressions(), buffer);
+ pprintExprList(op.getExpressions(), buffer, indent);
return buffer.toString();
}
@@ -297,7 +305,7 @@
return buffer.toString();
}
- private void pprintExprList(List<Mutable<ILogicalExpression>> expressions, StringBuilder buffer) {
+ private void pprintExprList(List<Mutable<ILogicalExpression>> expressions, StringBuilder buffer, Integer indent) throws AlgebricksException {
buffer.append("[");
boolean first = true;
for (Mutable<ILogicalExpression> exprRef : expressions) {
@@ -306,7 +314,7 @@
} else {
buffer.append(", ");
}
- buffer.append(exprRef.getValue());
+ buffer.append(exprRef.getValue().accept(exprVisitor, indent));
}
buffer.append("]");
}