This change allows setting a local ordering property for assign operators. it is needed when variables that are created in the assign operator are sorted
The following commits from your working branch will be included:
commit 9e4abb36e6f50e0f73406f4603cdc79590ca7b06
Author: Abdullah Alamoudi <bamousaa@gmail.com>
Date: Mon Feb 2 16:53:45 2015 +0300
added a TODO for deserialization
commit 78f7ee6fb04358d36156658202fb4478e47059e2
Author: Abdullah Alamoudi <bamousaa@gmail.com>
Date: Mon Feb 2 16:30:56 2015 +0300
fixed NPE in substitue variable visitor
commit 6bb101e072e03aae2732613385589e1ae52b510c
Author: Abdullah Alamoudi <bamousaa@gmail.com>
Date: Mon Feb 2 15:07:14 2015 +0300
Allow assign operator to have explicitly set ordering properties
Change-Id: If995b47aa3c97ce60be952141699268341d31eea
Reviewed-on: http://fulliautomatix.ics.uci.edu:8443/214
Tested-by: Jenkins <jenkins@fulliautomatix.ics.uci.edu>
Reviewed-by: Taewoo Kim <wangsaeu@gmail.com>
diff --git a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
index 0d40307..9a8c428 100644
--- a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
+++ b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/AssignOperator.java
@@ -15,7 +15,6 @@
package edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical;
import java.util.List;
-
import org.apache.commons.lang3.mutable.Mutable;
import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -25,6 +24,7 @@
import edu.uci.ics.hyracks.algebricks.core.algebra.base.LogicalVariable;
import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import edu.uci.ics.hyracks.algebricks.core.algebra.properties.LocalOrderProperty;
import edu.uci.ics.hyracks.algebricks.core.algebra.properties.VariablePropagationPolicy;
import edu.uci.ics.hyracks.algebricks.core.algebra.typing.ITypingContext;
import edu.uci.ics.hyracks.algebricks.core.algebra.typing.PropagatingTypeEnvironment;
@@ -37,6 +37,8 @@
*/
public class AssignOperator extends AbstractAssignOperator {
+
+ private LocalOrderProperty explicitOrderingProperty;
public AssignOperator(List<LogicalVariable> vars, List<Mutable<ILogicalExpression>> exprs) {
super(vars, exprs);
@@ -105,4 +107,13 @@
public boolean requiresVariableReferenceExpressions() {
return false;
}
+
+ public LocalOrderProperty getExplicitOrderingProperty() {
+ return explicitOrderingProperty;
+ }
+
+ public void setExplicitOrderingProperty(
+ LocalOrderProperty explicitOrderingProperty) {
+ this.explicitOrderingProperty = explicitOrderingProperty;
+ }
}
\ No newline at end of file
diff --git a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java
index 227cd53..695078a 100644
--- a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java
+++ b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/logical/visitors/SubstituteVariableVisitor.java
@@ -61,6 +61,7 @@
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.properties.OrderColumn;
import edu.uci.ics.hyracks.algebricks.core.algebra.typing.ITypingContext;
import edu.uci.ics.hyracks.algebricks.core.algebra.util.OperatorManipulationUtil;
import edu.uci.ics.hyracks.algebricks.core.algebra.visitors.ILogicalOperatorVisitor;
@@ -103,6 +104,16 @@
op.getExpressions().get(i).getValue().substituteVar(pair.first, pair.second);
}
}
+ // Substitute variables stored in ordering property
+ if (op.getExplicitOrderingProperty() != null) {
+ List<OrderColumn> orderColumns = op.getExplicitOrderingProperty().getOrderColumns();
+ for (int i = 0; i < orderColumns.size(); i++) {
+ OrderColumn oc = orderColumns.get(i);
+ if (oc.getColumn().equals(pair.first)) {
+ orderColumns.set(i, new OrderColumn(pair.second, oc.getOrder()));
+ }
+ }
+ }
substVarTypes(op, pair);
return null;
}
diff --git a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java
index 3e87281..26313fb 100644
--- a/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java
+++ b/algebricks/algebricks-core/src/main/java/edu/uci/ics/hyracks/algebricks/core/algebra/operators/physical/AssignPOperator.java
@@ -47,8 +47,12 @@
@Override
public void computeDeliveredProperties(ILogicalOperator op, IOptimizationContext context) {
+ AssignOperator assignOp = (AssignOperator) op;
ILogicalOperator op2 = op.getInputs().get(0).getValue();
deliveredProperties = op2.getDeliveredPhysicalProperties().clone();
+ if (assignOp.getExplicitOrderingProperty() != null) {
+ deliveredProperties.getLocalProperties().add(assignOp.getExplicitOrderingProperty());
+ }
}
@Override
diff --git a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/dataflow/value/ISerializerDeserializer.java b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/dataflow/value/ISerializerDeserializer.java
index 2e2e843..197fda7 100644
--- a/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/dataflow/value/ISerializerDeserializer.java
+++ b/hyracks/hyracks-api/src/main/java/edu/uci/ics/hyracks/api/dataflow/value/ISerializerDeserializer.java
@@ -39,4 +39,10 @@
* - Stream to write data to.
*/
public void serialize(T instance, DataOutput out) throws HyracksDataException;
+
+ /*
+ * TODO: Add a new method:
+ * T deserialize(DataInput in, T mutable)
+ * to provide deserialization without creating objects
+ */
}
\ No newline at end of file