Hyracks issue #137 requires a new IUnnestPositionWriter to be defined. Here it is.
Updated AsterixDB to use the new IUnnestPositionWriter.
Change-Id: I9ad5dbaef7a3b347a61e0f8a5505d4db6dc232c3
Reviewed-on: http://fulliautomatix.ics.uci.edu:8443/68
Reviewed-by: Till Westmann <westmann@gmail.com>
Tested-by: Ian Maxon <imaxon@uci.edu>
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
index 9a532b4..1003bc9 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/algebra/base/LogicalOperatorDeepCopyVisitor.java
@@ -400,7 +400,7 @@
public ILogicalOperator visitUnnestOperator(UnnestOperator op, ILogicalOperator arg) throws AlgebricksException {
UnnestOperator opCopy = new UnnestOperator(deepCopyVariable(op.getVariable()),
exprDeepCopyVisitor.deepCopyExpressionReference(op.getExpressionRef()),
- deepCopyVariable(op.getPositionalVariable()), op.getPositionalVariableType());
+ deepCopyVariable(op.getPositionalVariable()), op.getPositionalVariableType(), op.getPositionWriter());
deepCopyInputs(op, opCopy, arg);
copyAnnotations(op, opCopy);
opCopy.setExecutionMode(op.getExecutionMode());
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
index a2ecdc8..580e53b 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlExpressionToPlanTranslator.java
@@ -330,7 +330,7 @@
} else {
LogicalVariable pVar = context.newVar(fc.getPosVarExpr());
returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
- pVar, BuiltinType.AINT32);
+ pVar, BuiltinType.AINT32, new AqlPositionWriter());
}
returnedOp.getInputs().add(eo.second);
@@ -432,11 +432,11 @@
FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.ANY_COLLECTION_MEMBER));
f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
} else {
- Pair<ILogicalExpression, Mutable<ILogicalOperator>> indexPair = aqlExprToAlgExpression(ia.getIndexExpr(), tupSource);
+ Pair<ILogicalExpression, Mutable<ILogicalOperator>> indexPair = aqlExprToAlgExpression(ia.getIndexExpr(),
+ tupSource);
f = new ScalarFunctionCallExpression(FunctionUtils.getFunctionInfo(AsterixBuiltinFunctions.GET_ITEM));
f.getArguments().add(new MutableObject<ILogicalExpression>(p.first));
- f.getArguments().add(
- new MutableObject<ILogicalExpression>(indexPair.first));
+ f.getArguments().add(new MutableObject<ILogicalExpression>(indexPair.first));
}
AssignOperator a = new AssignOperator(v, new MutableObject<ILogicalExpression>(f));
a.getInputs().add(p.second);
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
index bbd5c42..ad98f93 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPlusExpressionToPlanTranslator.java
@@ -325,7 +325,7 @@
} else {
LogicalVariable pVar = context.newVar(fc.getPosVarExpr());
returnedOp = new UnnestOperator(v, new MutableObject<ILogicalExpression>(makeUnnestExpression(eo.first)),
- pVar, BuiltinType.AINT32);
+ pVar, BuiltinType.AINT32, new AqlPositionWriter());
}
returnedOp.getInputs().add(eo.second);
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPositionWriter.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPositionWriter.java
new file mode 100644
index 0000000..f8d964b
--- /dev/null
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/translator/AqlPositionWriter.java
@@ -0,0 +1,19 @@
+package edu.uci.ics.asterix.translator;
+
+import java.io.DataOutput;
+import java.io.IOException;
+import java.io.Serializable;
+
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IUnnestingPositionWriter;
+
+public class AqlPositionWriter implements IUnnestingPositionWriter, Serializable {
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public void write(DataOutput dataOutput, int position) throws IOException {
+ dataOutput.writeByte(BuiltinType.AINT32.getTypeTag().serialize());
+ dataOutput.writeInt(position);
+ }
+
+}