merge asterix_opentype_mergeback_staging r311:379
git-svn-id: https://asterixdb.googlecode.com/svn/branches/asterix_stabilization@380 eaa15691-b419-025a-1212-ee371bd00084
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
index a8e6961..b6d75bf 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -184,7 +184,7 @@
@SuppressWarnings("rawtypes")
ISerializerDeserializer serde = _jobGenCtx.getSerializerDeserializerProvider().getSerializerDeserializer(t);
- bbis.setByteBuffer(ByteBuffer.wrap(resStore.getBytes(), resStore.getStartIndex(), resStore.getLength()), 0);
+ bbis.setByteBuffer(ByteBuffer.wrap(resStore.getByteArray(), resStore.getStartOffset(), resStore.getLength()), 0);
IAObject o;
try {
o = (IAObject) serde.deserialize(dis);
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
index 35a5966..c41d908 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
@@ -43,6 +43,31 @@
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+/**
+ * Dynamically cast a variable from its type to a specified required type, in a
+ * recursive way. It enables: 1. bag-based fields in a record, 2. bidirectional
+ * cast of a open field and a matched closed field, and 3. put in null fields
+ * when necessary.
+ *
+ * Here is an example: A record { "hobby": {{"music", "coding"}}, "id": "001",
+ * "name": "Person Three"} which confirms to closed type ( id: string, name:
+ * string, hobby: {{string}}? ) can be cast to an open type (id: string ), or
+ * vice versa.
+ *
+ * However, if the input record is a variable, then we don't know its exact
+ * field layout at compile time. For example, records conforming to the same
+ * type can have different field orderings and different open parts. That's why
+ * we need dynamic type casting.
+ *
+ * Note that as we can see in the example, the ordering of fields of a record is
+ * not required. Since the open/closed part of a record has completely different
+ * underlying memory/storage layout, a cast-record function will change the
+ * layout as specified at runtime.
+ *
+ * Implementation wise, this rule checks the target dataset type and the input
+ * record type, and if the types are different, then it plugs in an assign with
+ * a cast-record function, and projects away the original (uncast) field.
+ */
public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
@Override
diff --git a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
index fc0a2e8..7dc35fe 100644
--- a/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
+++ b/asterix-algebra/src/main/java/edu/uci/ics/asterix/optimizer/rules/IntroduceStaticTypeCastRule.java
@@ -1,6 +1,22 @@
+/*
+ * Copyright 2009-2010 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.asterix.optimizer.rules;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.apache.commons.lang3.mutable.Mutable;
@@ -10,13 +26,16 @@
import edu.uci.ics.asterix.om.base.ANull;
import edu.uci.ics.asterix.om.base.AString;
import edu.uci.ics.asterix.om.constants.AsterixConstantValue;
+import edu.uci.ics.asterix.om.functions.AsterixBuiltinFunctions;
import edu.uci.ics.asterix.om.typecomputer.base.TypeComputerUtilities;
import edu.uci.ics.asterix.om.types.ARecordType;
import edu.uci.ics.asterix.om.types.ATypeTag;
import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
import edu.uci.ics.asterix.om.types.BuiltinType;
import edu.uci.ics.asterix.om.types.IAType;
import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.asterix.runtime.pointables.base.DefaultOpenFieldType;
import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalExpression;
import edu.uci.ics.hyracks.algebricks.core.algebra.base.ILogicalOperator;
@@ -34,6 +53,32 @@
import edu.uci.ics.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
import edu.uci.ics.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+/**
+ * Statically cast a constant from its type to a specified required type, in a
+ * recursive way. It enables: 1. bag-based fields in a record, 2. bidirectional
+ * cast of a open field and a matched closed field, and 3. put in null fields
+ * when necessary. It should be fired before the constant folding rule.
+ *
+ * This rule is not responsible for type casting between primitive types.
+ *
+ * Here is an example: A record { "hobby": {{"music", "coding"}}, "id": "001",
+ * "name": "Person Three"} which confirms to closed type ( id: string, name:
+ * string, hobby: {{string}}? ) can be cast to an open type (id: string ), or
+ * vice versa.
+ *
+ * Implementation wise: first, we match the record's type and its target dataset
+ * type to see if it is "cast-able"; second, if the types are cast-able, we
+ * embed the required type into the original producer expression. If the types
+ * are not cast-able, we throw a compile time exception.
+ *
+ * Then, at runtime (not in this rule), the corresponding record/list
+ * constructors know what to do by checking the required output type.
+ *
+ * TODO: right now record/list constructor of the cast result is not done in the
+ * ConstantFoldingRule and has to go to the runtime, because the
+ * ConstantFoldingRule uses ARecordSerializerDeserializer which seems to have
+ * some problem.
+ */
public class IntroduceStaticTypeCastRule implements IAlgebraicRewriteRule {
@Override
@@ -65,7 +110,7 @@
* get required record type
*/
InsertDeleteOperator insertDeleteOperator = (InsertDeleteOperator) op2;
- AssignOperator oldAssignOperator = (AssignOperator) op3;
+ AssignOperator topAssignOperator = (AssignOperator) op3;
AqlDataSource dataSource = (AqlDataSource) insertDeleteOperator.getDataSource();
IAType[] schemaTypes = (IAType[]) dataSource.getSchemaTypes();
ARecordType requiredRecordType = (ARecordType) schemaTypes[schemaTypes.length - 1];
@@ -74,23 +119,27 @@
* get input record type to the insert operator
*/
List<LogicalVariable> usedVariables = new ArrayList<LogicalVariable>();
- VariableUtilities.getUsedVariables(oldAssignOperator, usedVariables);
+ VariableUtilities.getUsedVariables(topAssignOperator, usedVariables);
+
+ // the used variable should contain the record that will be inserted
+ // but it will not fail in many cases even if the used variable set is
+ // empty
if (usedVariables.size() == 0)
return false;
LogicalVariable oldRecordVariable = usedVariables.get(0);
LogicalVariable inputRecordVar = usedVariables.get(0);
- IVariableTypeEnvironment env = oldAssignOperator.computeOutputTypeEnvironment(context);
+ IVariableTypeEnvironment env = topAssignOperator.computeOutputTypeEnvironment(context);
ARecordType inputRecordType = (ARecordType) env.getVarType(inputRecordVar);
- AbstractLogicalOperator currentOperator = oldAssignOperator;
+ AbstractLogicalOperator currentOperator = topAssignOperator;
List<LogicalVariable> producedVariables = new ArrayList<LogicalVariable>();
- boolean changed = false;
/**
* find the assign operator for the "input record" to the insert_delete
* operator
*/
do {
+ context.addToDontApplySet(this, currentOperator);
if (currentOperator.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
producedVariables.clear();
VariableUtilities.getProducedVariables(currentOperator, producedVariables);
@@ -101,25 +150,16 @@
*/
if (position >= 0) {
AssignOperator originalAssign = (AssignOperator) currentOperator;
- List<Mutable<ILogicalExpression>> expressionPointers = originalAssign.getExpressions();
- ILogicalExpression expr = expressionPointers.get(position).getValue();
+ List<Mutable<ILogicalExpression>> expressionRefs = originalAssign.getExpressions();
+ ILogicalExpression expr = expressionRefs.get(position).getValue();
if (expr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
ScalarFunctionCallExpression funcExpr = (ScalarFunctionCallExpression) expr;
- changed = TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredRecordType,
- inputRecordType);
- changed &= !requiredRecordType.equals(inputRecordType);
- if (changed) {
- staticTypeCast(funcExpr, requiredRecordType, inputRecordType);
- List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
- int openPartStart = requiredRecordType.getFieldTypes().length * 2;
- for (int j = openPartStart; j < args.size(); j++) {
- ILogicalExpression arg = args.get(j).getValue();
- if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
- AbstractFunctionCallExpression argFunc = (AbstractFunctionCallExpression) arg;
- TypeComputerUtilities.setOpenType(argFunc, true);
- }
- }
- }
+ // that expression has been rewritten, and it will not
+ // fail but just return false
+ if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
+ return false;
+ IVariableTypeEnvironment assignEnv = topAssignOperator.computeOutputTypeEnvironment(context);
+ rewriteFuncExpr(funcExpr, requiredRecordType, inputRecordType, assignEnv);
}
context.computeAndSetTypeEnvironmentForOperator(originalAssign);
}
@@ -129,10 +169,82 @@
else
break;
} while (currentOperator != null);
- return changed;
+ return true;
}
- private void staticTypeCast(ScalarFunctionCallExpression func, ARecordType reqType, ARecordType inputType) {
+ private void rewriteFuncExpr(ScalarFunctionCallExpression funcExpr, IAType reqType, IAType inputType,
+ IVariableTypeEnvironment env) throws AlgebricksException {
+ if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR) {
+ rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType, env);
+ } else if (funcExpr.getFunctionIdentifier() == AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR) {
+ rewriteListFuncExpr(funcExpr, (AbstractCollectionType) reqType, (AbstractCollectionType) inputType, env);
+ } else if (reqType.getTypeTag().equals(ATypeTag.RECORD)) {
+ rewriteRecordFuncExpr(funcExpr, (ARecordType) reqType, (ARecordType) inputType, env);
+ }
+ }
+
+ /**
+ * only called when funcExpr is record constructor
+ *
+ * @param funcExpr
+ * record constructor function expression
+ * @param requiredListType
+ * required record type
+ * @param inputRecordType
+ * @param env
+ * type environment
+ * @throws AlgebricksException
+ */
+ private void rewriteRecordFuncExpr(ScalarFunctionCallExpression funcExpr, ARecordType requiredRecordType,
+ ARecordType inputRecordType, IVariableTypeEnvironment env) throws AlgebricksException {
+ // if already rewritten, the required type is not null
+ if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
+ return;
+ TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredRecordType, inputRecordType);
+ staticRecordTypeCast(funcExpr, requiredRecordType, inputRecordType, env);
+ }
+
+ /**
+ * only called when funcExpr is list constructor
+ *
+ * @param funcExpr
+ * list constructor function expression
+ * @param requiredListType
+ * required list type
+ * @param inputListType
+ * @param env
+ * type environment
+ * @throws AlgebricksException
+ */
+ private void rewriteListFuncExpr(ScalarFunctionCallExpression funcExpr, AbstractCollectionType requiredListType,
+ AbstractCollectionType inputListType, IVariableTypeEnvironment env) throws AlgebricksException {
+ if (TypeComputerUtilities.getRequiredType(funcExpr) != null)
+ return;
+
+ TypeComputerUtilities.setRequiredAndInputTypes(funcExpr, requiredListType, inputListType);
+ List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
+
+ IAType itemType = requiredListType.getItemType();
+ if (itemType == null || itemType.getTypeTag().equals(ATypeTag.ANY))
+ return;
+ IAType inputItemType = inputListType.getItemType();
+ for (int j = 0; j < args.size(); j++) {
+ ILogicalExpression arg = args.get(j).getValue();
+ if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) arg;
+ IAType currentItemType = (IAType) env.getType(argFunc);
+ if (inputItemType == null || inputItemType == BuiltinType.ANY) {
+ currentItemType = (IAType) env.getType(argFunc);
+ rewriteFuncExpr(argFunc, itemType, currentItemType, env);
+ } else {
+ rewriteFuncExpr(argFunc, itemType, inputItemType, env);
+ }
+ }
+ }
+ }
+
+ private void staticRecordTypeCast(ScalarFunctionCallExpression func, ARecordType reqType, ARecordType inputType,
+ IVariableTypeEnvironment env) throws AlgebricksException {
IAType[] reqFieldTypes = reqType.getFieldTypes();
String[] reqFieldNames = reqType.getFieldNames();
IAType[] inputFieldTypes = inputType.getFieldTypes();
@@ -142,18 +254,21 @@
boolean[] nullFields = new boolean[reqFieldTypes.length];
boolean[] openFields = new boolean[inputFieldTypes.length];
- for (int i = 0; i < nullFields.length; i++)
- nullFields[i] = false;
- for (int i = 0; i < openFields.length; i++)
- openFields[i] = true;
- for (int i = 0; i < fieldPermutation.length; i++)
- fieldPermutation[i] = -1;
+ Arrays.fill(nullFields, false);
+ Arrays.fill(openFields, true);
+ Arrays.fill(fieldPermutation, -1);
// forward match: match from actual to required
boolean matched = false;
for (int i = 0; i < inputFieldNames.length; i++) {
String fieldName = inputFieldNames[i];
IAType fieldType = inputFieldTypes[i];
+
+ if (2 * i + 1 > func.getArguments().size())
+ throw new AlgebricksException("expression index out of bound");
+
+ // 2*i+1 is the index of field value expression
+ ILogicalExpression arg = func.getArguments().get(2 * i + 1).getValue();
matched = false;
for (int j = 0; j < reqFieldNames.length; j++) {
String reqFieldName = reqFieldNames[j];
@@ -163,6 +278,11 @@
fieldPermutation[j] = i;
openFields[i] = false;
matched = true;
+
+ if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
+ rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
+ }
break;
}
@@ -171,20 +291,35 @@
&& NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+ reqFieldType = itemType;
if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
fieldPermutation[j] = i;
openFields[i] = false;
matched = true;
+
+ // rewrite record expr
+ if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
+ rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
+ }
break;
}
}
+
+ // match the record field: need cast
+ if (arg.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ ScalarFunctionCallExpression scalarFunc = (ScalarFunctionCallExpression) arg;
+ rewriteFuncExpr(scalarFunc, reqFieldType, fieldType, env);
+ fieldPermutation[j] = i;
+ openFields[i] = false;
+ matched = true;
+ break;
+ }
}
}
- if (matched)
- continue;
// the input has extra fields
- if (!reqType.isOpen())
- throw new IllegalStateException("static type mismatch: including extra closed fields");
+ if (!matched && !reqType.isOpen())
+ throw new AlgebricksException("static type mismatch: including an extra closed field " + fieldName);
}
// backward match: match from required to actual
@@ -195,47 +330,52 @@
for (int j = 0; j < inputFieldNames.length; j++) {
String fieldName = inputFieldNames[j];
IAType fieldType = inputFieldTypes[j];
- if (fieldName.equals(reqFieldName)) {
- if (fieldType.equals(reqFieldType)) {
+ if (!fieldName.equals(reqFieldName))
+ continue;
+ // should check open field here
+ // because number of entries in fieldPermuations is the
+ // number of required schema fields
+ // here we want to check if an input field is matched
+ // the entry index of fieldPermuatons is req field index
+ if (!openFields[j]) {
+ matched = true;
+ break;
+ }
+
+ // match the optional field
+ if (reqFieldType.getTypeTag() == ATypeTag.UNION
+ && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
+ IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
+ NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+ if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
matched = true;
break;
}
-
- // match the optional field
- if (reqFieldType.getTypeTag() == ATypeTag.UNION
- && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
- IAType itemType = ((AUnionType) reqFieldType).getUnionList().get(
- NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
- if (fieldType.equals(BuiltinType.ANULL) || fieldType.equals(itemType)) {
- matched = true;
- break;
- }
- }
}
}
if (matched)
continue;
- IAType t = reqFieldTypes[i];
- if (t.getTypeTag() == ATypeTag.UNION && NonTaggedFormatUtil.isOptionalField((AUnionType) t)) {
+ if (reqFieldType.getTypeTag() == ATypeTag.UNION
+ && NonTaggedFormatUtil.isOptionalField((AUnionType) reqFieldType)) {
// add a null field
nullFields[i] = true;
} else {
// no matched field in the input for a required closed field
- throw new IllegalStateException("static type mismatch: miss a required closed field");
+ throw new AlgebricksException("static type mismatch: miss a required closed field " + reqFieldName);
}
}
List<Mutable<ILogicalExpression>> arguments = func.getArguments();
- List<Mutable<ILogicalExpression>> argumentsClone = new ArrayList<Mutable<ILogicalExpression>>();
- argumentsClone.addAll(arguments);
+ List<Mutable<ILogicalExpression>> originalArguments = new ArrayList<Mutable<ILogicalExpression>>();
+ originalArguments.addAll(arguments);
arguments.clear();
// re-order the closed part and fill in null fields
for (int i = 0; i < fieldPermutation.length; i++) {
int pos = fieldPermutation[i];
if (pos >= 0) {
- arguments.add(argumentsClone.get(2 * pos));
- arguments.add(argumentsClone.get(2 * pos + 1));
+ arguments.add(originalArguments.get(2 * pos));
+ arguments.add(originalArguments.get(2 * pos + 1));
}
if (nullFields[i]) {
// add a null field
@@ -249,8 +389,31 @@
// add the open part
for (int i = 0; i < openFields.length; i++) {
if (openFields[i]) {
- arguments.add(argumentsClone.get(2 * i));
- arguments.add(argumentsClone.get(2 * i + 1));
+ arguments.add(originalArguments.get(2 * i));
+ Mutable<ILogicalExpression> fExprRef = originalArguments.get(2 * i + 1);
+ ILogicalExpression argExpr = fExprRef.getValue();
+
+ // we need to handle open fields recursively by their default
+ // types
+ // for list, their item type is any
+ // for record, their
+ if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
+ IAType reqFieldType = inputFieldTypes[i];
+ if (inputFieldTypes[i].getTypeTag() == ATypeTag.RECORD) {
+ reqFieldType = DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE;
+ }
+ if (inputFieldTypes[i].getTypeTag() == ATypeTag.ORDEREDLIST) {
+ reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE;
+ }
+ if (inputFieldTypes[i].getTypeTag() == ATypeTag.UNORDEREDLIST) {
+ reqFieldType = DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE;
+ }
+ if (TypeComputerUtilities.getRequiredType((AbstractFunctionCallExpression) argExpr) == null) {
+ ScalarFunctionCallExpression argFunc = (ScalarFunctionCallExpression) argExpr;
+ rewriteFuncExpr(argFunc, reqFieldType, inputFieldTypes[i], env);
+ }
+ }
+ arguments.add(fExprRef);
}
}
}
diff --git a/asterix-app/src/test/resources/runtimets/ignore.txt b/asterix-app/src/test/resources/runtimets/ignore.txt
index 2b456ca..a850d3c 100644
--- a/asterix-app/src/test/resources/runtimets/ignore.txt
+++ b/asterix-app/src/test/resources/runtimets/ignore.txt
@@ -14,5 +14,17 @@
fuzzyjoin/events-users-aqlplus_1.aql
fuzzyjoin
failure/q1_pricing_summary_report_failure.aql
-open-closed
dml/load-from-hdfs.aql
+open-closed/open-closed-15
+open-closed/open-closed-16
+open-closed/open-closed-17
+open-closed/open-closed-18
+open-closed/open-closed-19
+open-closed/open-closed-20
+open-closed/open-closed-21
+open-closed/open-closed-22
+open-closed/open-closed-28
+open-closed/open-closed-30
+open-closed/heterog-list02
+open-closed/heterog-list03
+open-closed/c2c
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive.aql
new file mode 100644
index 0000000..6c8264f
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o-recursive.aql
@@ -0,0 +1,62 @@
+/*
+ * Test case Name : opentype-o2c-recursive.aql
+ * Description : verify the static casting of nest record constants
+ * Expected Result : Success
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+
+create type AddressType as open{
+ street: string,
+ city: string
+}
+create type Dept as open{
+ name: string,
+ id: int32
+}
+
+create type testtype as closed {
+ name: string,
+ id: string,
+ address: AddressType?,
+ department: {{Dept}}?
+}
+
+create type testtype2 as open {
+ name: string,
+ id: string
+}
+
+create dataset testds(testtype) partitioned by key id;
+
+create dataset testds2(testtype2) partitioned by key id;
+
+insert into dataset testds (
+{ "id": "001", "name": "Person One", "address": {"street": "3019 DBH", "city": "Irvine", "zip": 92697}, "department": {{ {"name":"CS", "id":299, "review":5}, {"name":"EE", "id":399} }} }
+);
+
+insert into dataset testds (
+{ "id": "002", "name": "Person Two" }
+);
+
+insert into dataset testds (
+{ "id": "003", "name": "Person Three", "address": {"street": "2019 DBH", "city": "Irvine"} }
+);
+
+insert into dataset testds (
+{ "id": "004", "name": "Person Four", "address": {"street": "1019 DBH", "city": "irvine", "property": {"zip": 92697, "review": "positive" } } }
+);
+
+insert into dataset testds2 (
+ for $d in dataset("testds")
+ return $d
+);
+
+write output to nc1:"rttest/dml_opentype-c2o-recursive.adm";
+
+for $d in dataset("testds2")
+order by $d.id
+return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o.aql
index e29ccdc..a63e2df 100644
--- a/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-c2o.aql
@@ -12,7 +12,7 @@
create type testtype as closed {
id: string,
name: string,
- hobby: string?
+ hobby: {{string}}?
}
/*
@@ -28,19 +28,19 @@
create dataset testds2(testtype2) partitioned by key id;
insert into dataset testds (
-{ "hobby": "music", "id": "001", "name": "Person Three"}
+{ "hobby": {{"music", "coding"}}, "id": "001", "name": "Person Three"}
);
insert into dataset testds (
-{ "name": "Person One", "id": "002", "hobby": "sports"}
+{ "name": "Person One", "id": "002", "hobby": {{"sports"}} }
);
insert into dataset testds (
-{ "id": "003", "hobby": "movie", "name": "Person Two"}
+{ "id": "003", "hobby": {{"movie", "sports"}}, "name": "Person Two"}
);
insert into dataset testds (
-{ "id": "004", "name": "Person Four", "hobby": "swimming"}
+{ "id": "004", "name": "Person Four", "hobby": {{"swimming"}} }
);
insert into dataset testds (
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive.aql
new file mode 100644
index 0000000..2070e20
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c-recursive.aql
@@ -0,0 +1,63 @@
+/*
+ * Test case Name : opentype-o2c-recursive.aql
+ * Description : verify the static casting of nest record constants
+ * Expected Result : Success
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+
+create type AddressType as open{
+ street: string,
+ city: string
+}
+
+create type Dept as closed{
+ name: string,
+ id: int32
+}
+
+create type testtype as open {
+ name: string,
+ id: string
+}
+
+create type testtype2 as closed {
+ name: string,
+ id: string,
+ address: AddressType?,
+ department: {{Dept}}?
+}
+
+create dataset testds(testtype) partitioned by key id;
+
+create dataset testds2(testtype2) partitioned by key id;
+
+insert into dataset testds (
+{ "id": "001", "name": "Person One", "address": {"street": "3019 DBH", "city": "Irvine", "zip": 92697}, "department": {{ {"name":"CS", "id":299}, {"name":"EE", "id":399} }} }
+);
+
+insert into dataset testds (
+{ "id": "002", "name": "Person Two" }
+);
+
+insert into dataset testds (
+{ "id": "003", "name": "Person Three", "address": {"street": "2019 DBH", "city": "Irvine"} }
+);
+
+insert into dataset testds (
+{ "id": "004", "name": "Person Four", "address": {"street": "1019 DBH", "city": "irvine", "property": {"zip": 92697, "review": "positive" } } }
+);
+
+insert into dataset testds2 (
+ for $d in dataset("testds")
+ return $d
+);
+
+write output to nc1:"rttest/dml_opentype-o2c-recursive.adm";
+
+for $d in dataset("testds2")
+order by $d.id
+return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c.aql b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c.aql
index a6ed9cc..015aa7b 100644
--- a/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/dml/opentype-o2c.aql
@@ -16,7 +16,7 @@
}
create type testtype2 as closed {
- hobby: string?,
+ hobby: {{string}}?,
id: string,
name: string
}
@@ -26,19 +26,19 @@
create dataset testds2(testtype2) partitioned by key id;
insert into dataset testds (
-{ "id": "001", "hobby": "music", "name": "Person Three"}
+{ "id": "001", "hobby": {{"music"}}, "name": "Person Three"}
);
insert into dataset testds (
-{ "id": "002", "name": "Person Three", "hobby": "football"}
+{ "id": "002", "name": "Person Three", "hobby": {{"football"}}}
);
insert into dataset testds (
-{ "id": "003", "name": "Person Three", "hobby": "movie"}
+{ "id": "003", "name": "Person Three", "hobby": {{"movie", "coding", "debugging"}}}
);
insert into dataset testds (
-{ "name": "Person Three", "hobby": "swimming", "id": "004"}
+{ "name": "Person Three", "hobby": {{"swimming", "music"}}, "id": "004"}
);
insert into dataset testds (
diff --git a/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord.aql b/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord.aql
new file mode 100644
index 0000000..c0b5e06
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/nestrecords/nestrecord.aql
@@ -0,0 +1,45 @@
+/*
+ * Test case Name : nestrecord.aql
+ * Description : verify the static casting of nest record constants
+ * Expected Result : Success
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+
+create type AddressType as open{
+ street: string,
+ city: string
+}
+
+create type testtype as open {
+ name: string,
+ id: string,
+ address: AddressType?
+}
+
+create dataset testds(testtype) partitioned by key id;
+
+insert into dataset testds (
+{ "id": "001", "name": "Person One", "address": {"street": "3019 DBH", "city": "Irvine", "zip": 92697} }
+);
+
+insert into dataset testds (
+{ "id": "002", "name": "Person Two" }
+);
+
+insert into dataset testds (
+{ "id": "003", "name": "Person Three", "address": {"street": "2019 DBH", "city": "Irvine"} }
+);
+
+insert into dataset testds (
+{ "id": "004", "name": "Person Four", "home": {"street": "2019 DBH", "city": {"name": "Irvine", "zip": 92697} } }
+);
+
+write output to nc1:"rttest/nestrecords_nestrecord.adm";
+
+for $d in dataset("testds")
+order by $d.id
+return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01.aql
new file mode 100644
index 0000000..27935e0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list-ordered01.aql
@@ -0,0 +1,39 @@
+/*
+ * Test case Name : heterog-list01.aql
+ * Description : To test insertion of an array of objects into internal dataset.
+ * : Heterogenous list construction.
+ * Success : Yes
+ * Date : 14th April 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type BatterType as {
+id:int32,
+descrpt:string
+}
+
+create type TestType as closed {
+id:int32,
+description:string,
+name:string,
+batters:[[BatterType]]
+}
+
+create dataset T1(TestType) partitioned by key id;
+
+insert into dataset T1({
+"id":1234,
+"description":"donut",
+"name":"Cake",
+"batters":[[ {"id":345,"descrpt":"Regular"},{"id":445,"descrpt":"Chocolate"} ]] }
+);
+
+write output to nc1:"rttest/open-closed_heterog-list-ordered01.adm";
+
+for $d in dataset("T1")
+order by $d.id
+return $d
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01.aql
index d1edc3d..7ba1641 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list01.aql
@@ -19,7 +19,7 @@
id:int32,
description:string,
name:string,
-batters:[BatterType]
+batters:{{BatterType}}
}
create dataset T1(TestType) partitioned by key id;
@@ -28,11 +28,12 @@
"id":1234,
"description":"donut",
"name":"Cake",
-"batters":[{"id":345,"descprt":"Regular"},{"id":445,"descprt":"Chocolate"}] }
+"batters":{{ {"id":345,"descrpt":"Regular"},{"id":445,"descrpt":"Chocolate"} }} }
);
-write output to nc1:"rttest/open-closed_heteror-list01.adm";
+write output to nc1:"rttest/open-closed_heterog-list01.adm";
for $d in dataset("T1")
+order by $d.id
return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02.aql
new file mode 100644
index 0000000..47dd921
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list02.aql
@@ -0,0 +1,35 @@
+/*
+ * Test case Name : heterog-list02.aql
+ * Description : To test insertion of an array of arrays into internal dataset.
+ * : Heterogenous list construction.
+ * Success : Yes
+ * Date : 28th May 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type BatterType as {
+id:int32,
+descrpt:string
+}
+
+create type TestType as {
+id:int32,
+description:string,
+name:string,
+batters:[[BatterType]]
+}
+
+create dataset T1(TestType) partitioned by key id;
+
+insert into dataset T1({
+"id":1234,
+"description":"donut",
+"name":"Cake",
+"batters":[[{"id":345,"descrpt":"Regular"},{"id":445,"descrpt":"Chocolate"}],[{"id":349,"descrpt":"Soft"},{"id":449,"descrpt":"Vanilla"}]] }
+);
+
+for $l in dataset('T1')
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03.aql
new file mode 100644
index 0000000..94a87c0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/heterog-list03.aql
@@ -0,0 +1,36 @@
+/*
+ * Test case Name : heterog-list03.aql
+ * Description : To test insertion of an array of arrays into internal dataset.
+ * : batters field is optional in this scenario.
+ * : Heterogenous list construction.
+ * Success : Yes
+ * Date : 28th May 2012
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type BatterType as {
+id:int32,
+descrpt:string
+}
+
+create type TestType as {
+id:int32,
+description:string,
+name:string,
+batters:[[BatterType]]?
+}
+
+create dataset T1(TestType) partitioned by key id;
+
+insert into dataset T1({
+"id":1234,
+"description":"donut",
+"name":"Cake",
+"batters":[[{"id":345,"descrpt":"Regular"},{"id":445,"descrpt":"Chocolate"}],[{"id":349,"descrpt":"Soft"},{"id":449,"descrpt":"Vanilla"}]] }
+);
+
+for $l in dataset('T1')
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01.aql
index 6373569..0d26b5d 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-01.aql
@@ -23,4 +23,6 @@
);
write output to nc1:"rttest/open-closed_open-closed-01.adm";
-for $l in dataset("testds") return $l
+for $l in dataset("testds")
+order by $l.id
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-02.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-02.aql
deleted file mode 100644
index e15577b..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-02.aql
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Test case Name : open-closed-02.aql
- * Description : This test is intended to test insertion of additional data into a dataset of closed type
- * Expected Result : This test should fail because closed type internal datasets can not ingest additional data.
- *
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-// name field here is optional.
-create type testType as closed {
-id : int32,
-name : string?
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({"id": 123});
-
-write output to nc1:"rttest/open-closed_open-closed-02.adm";
-for $l in dataset("testds") return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-03.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-03.aql
deleted file mode 100644
index f028c89..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-03.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Test case Name : open-closed-03.aql
- * Description : This test is intended to test insertion of additional data into a closed type
- * Expected Result : Failure - This should NOT be allowed!
- * Issue number : Issue 66
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as closed {
-id : int32,
-name : string
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({"id": 123, "name": "John Doe", "hobbies": {{ "scuba", "music" }} }
-);
-
-for $l in dataset("testds") return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-04.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-04.aql
deleted file mode 100644
index 82912bd..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-04.aql
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Test case Name : open-closed-04.aql
- * Description : This test is intended to test type in the Metdata for the dataset.
- * : Verify if the type is open.
- * Expected Result : Success - This should be allowed!
- * Issue number : Issue 73
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type TestType as open {
-id : int32,
-name : string
-}
-
-create dataset testds(TestType) partitioned by key id;
-
-/*
- * Connect to the Metadata dataverse and run the following commands.
- */
-
-use dataverse Metadata;
-
-for $l in dataset('Datatype')
-let $x := $l.Derived
-where $l.DatatypeName="TestType"
-return $x.Record
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-05.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-05.aql
deleted file mode 100644
index 2bd18fe..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-05.aql
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Test case Name : open-closed-05.aql
- * Description : Create internal dataset and verify if the type is marked as closed in metadata.
- * Expected Result : Success
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as closed {
-id : int32,
-name : string
-}
-
-create dataset testds(testType) partitioned by key id;
-
-/*
- * Connect to the Metadata dataverse and run the following commands.
- * Verify if the type is closed by querying Metadata.
- */
-
-use dataverse Metadata;
-
-for $l in dataset('Datatype')
-let $x := $l.Derived
-where $l.DatatypeName="TestType"
-return $x.Record
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-06.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-06.aql
deleted file mode 100644
index f6605a6..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-06.aql
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Test case Name : open-closed-06.aql
- * Description : To test non nullable field types in closed type datasets.
- * Success : Yes this test should Fail!
- * Date : 03/26/2012
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as closed {
-id : int32,
-name : string
-}
-
-create dataset testds(testType) partitioned by key id;
-
-// Missing name field this insert stmt should fail.
-
-insert into dataset testds({"id": 123});
-
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-07.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-07.aql
deleted file mode 100644
index 155f8bb..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-07.aql
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Test case Name : open-closed-07.aql
- * Description : To test non nullable field types in datasets of type open.
- * Success : Yes this test should Fail!
- * Date : 03/26/2012
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as open {
-id : int32,
-name : string
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({"id": 123});
-
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-08.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-08.aql
deleted file mode 100644
index 24423e8..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-08.aql
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Test case Name : open-closed-08.aql
- * Description : To test nullable and non nullable field types in datasets of type closed.
- * Success : Yes this test should succeed!
- * Date : 03/26/2012
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as closed {
-id : int32,
-name : string?
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({"id": 123});
-
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-09.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-09.aql
deleted file mode 100644
index 63288d7..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-09.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Test case Name : open-closed-09.aql
- * Description : To test nullable and non nullable field types in datasets of type open.
- * : Missing value for nullable field and missing value for non-nullable field in insert statement.
- * Success : This test should Fail!
- * Date : 03/26/2012
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as open {
-id : int32,
-name : string?
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({ });
-
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-10.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-10.aql
deleted file mode 100644
index cad1f12..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-10.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Test case Name : open-closed-10.aql
- * Description : To test nullable and non nullable field types in datasets of type open.
- * : Missing value for nullable field in insert statement.
- * Success : This test should succeed!
- * Date : 03/26/2012
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as open {
-id : int32,
-name : string?
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({"id :" 32 });
-
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-11.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-11.aql
deleted file mode 100644
index 50d52d2..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-11.aql
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- * Test case Name : open-closed-11.aql
- * Description : To test nullable and non nullable field types in datasets of type open.
- * : No missing value for nullable field in insert statement.
- * Success : This test should succeed!
- * Date : 03/26/2012
- */
-
-drop dataverse test if exists;
-
-create dataverse test;
-
-use dataverse test;
-
-create type testType as open {
-id : int32,
-name : string?
-}
-
-create dataset testds(testType) partitioned by key id;
-
-insert into dataset testds({"id :" 32,"name :" "UCI"});
-
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12.aql
index 2459fcc..ae21794 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-12.aql
@@ -43,6 +43,8 @@
return $d
);
+write output to nc1:"rttest/open-closed_open-closed-12.adm";
for $d in dataset("testds01")
+order by $d.id
return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-13.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-13.aql
deleted file mode 100644
index 379e282..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-13.aql
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Testcase Name : open-closed-13.aql
- * Description : Attempt to insert additional data into a dataset which is defined as closed type.
- * Success : This test should fail! No additional data allowed in datasets of closed type.
- * Date : March 27 2012
- */
-
-
-create dataverse testdv2;
-use dataverse testdv2;
-
-create type testtype as closed {
- id: string,
- name: string
-}
-
-create dataset testds(testtype) partitioned by key id;
-
-insert into dataset testds (
-{ "id": "001", "name": "Person Three", "hobbies": {{"scuba", "music"}}}
-);
-
-for $d in dataset("testds")
-return $d
-
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14.aql
index 03e6e33..6c517ca 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-14.aql
@@ -48,6 +48,8 @@
return $d
);
+write output to nc1:"rttest/open-closed_open-closed-14.adm";
for $d in dataset("testds01")
+order by $d.id
return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15.aql
index 80cfa30..2ac2567 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-15.aql
@@ -46,6 +46,7 @@
}
);
+write output to nc1:"rttest/open-closed_open-closed-15.adm";
for $l in dataset('tdtst')
return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16.aql
index c463cb0..5e1a591 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-16.aql
@@ -46,6 +46,7 @@
}
);
+write output to nc1:"rttest/open-closed_open-closed-16.adm";
for $l in dataset('tdtst')
return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17.aql
index f1fe349..a590cf1 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-17.aql
@@ -43,5 +43,6 @@
}
);
+write output to nc1:"rttest/open-closed_open-closed-17.adm";
for $l in dataset('tdtst')
return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-18.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-18.aql
deleted file mode 100644
index 0da1474..0000000
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-18.aql
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Test case name : open-closed-18.aql
- * Description : Test insertion of additional data into an open type internal dataset.
- * Success : Yes
- * Date : 29 April 2012
- */
-
-drop dataverse test if exists;
-create dataverse test;
-use dataverse test;
-
-create type TestType as open {
-id:int32
-}
-
-create dataset testds(TestType) partitioned by key id;
-
-insert into dataset testds( for $i in range(1,10) return { "id":$i,"name":"John Doe" });
-
-for $l in dataset('testds')
-return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19.aql
index 3ff2d71..b406663 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-19.aql
@@ -47,5 +47,6 @@
insert into dataset dtst01({for $l in dataset('employee') return $l});
+write output to nc1:"rttest/open-closed_open-closed-19.adm";
for $l in dataset('dtst01')
retunr $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20.aql
index d7ad173..29b4366 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-20.aql
@@ -41,5 +41,6 @@
insert into dataset dtst01(for $l in dataset('employee') return $l);
+write output to nc1:"rttest/open-closed_open-closed-20.adm";
for $l in dataset('dtst01')
return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21.aql
index 71ce585..c52344e 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-21.aql
@@ -38,5 +38,6 @@
insert into dataset dtst01(for $l in dataset('employee') return $l);
+write output to nc1:"rttest/open-closed_open-closed-21.adm";
for $l in dataset('dtst01')
return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22.aql
index 6e05f61..cd9ac44 100644
--- a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22.aql
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-22.aql
@@ -39,5 +39,6 @@
// missing dept field
insert into dataset employee({"id":205,"name":"Mike Tyson","age":44,"sex":"M","dob":date("1970-12-22")});
+write output to nc1:"rttest/open-closed_open-closed-22.adm";
for $l in dataset('employee')
return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24.aql
new file mode 100644
index 0000000..7012a5a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-24.aql
@@ -0,0 +1,26 @@
+/*
+ * Testcase Name : open-closed-24.aql
+ * Description : Test use of additional data(open) field in create type statement
+ * Success : Yes
+ * Date : 29th May 2012
+ */
+
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type testType as open {
+id : int32,
+name : string,
+opt_tag : {{ string }}
+}
+
+create dataset testds(testType) partitioned by key id;
+
+insert into dataset testds({"id": 32,"name": "UCI","opt_tag":{{"optional text","put any text here","and more"}}});
+
+write output to nc1:"rttest/open-closed_open-closed-24.adm";
+for $l in dataset('testds')
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25.aql
new file mode 100644
index 0000000..b29b63a
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-25.aql
@@ -0,0 +1,26 @@
+/*
+ * Testcase Name : open-closed-25.aql
+ * Description : Test use of additional data(open) optional field in create type statement
+ * Success : Yes
+ * Date : 29th May 2012
+ */
+
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type testType as open {
+id : int32,
+name : string,
+opt_tag : {{ string }}?
+}
+
+create dataset testds(testType) partitioned by key id;
+
+insert into dataset testds({"id": 32,"name": "UCI","opt_tag":{{"optional text","put any text here","and more"}}});
+
+write output to nc1:"rttest/open-closed_open-closed-25.adm";
+for $l in dataset('testds')
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26.aql
new file mode 100644
index 0000000..f19e4a7
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-26.aql
@@ -0,0 +1,27 @@
+/*
+ * Testcase Name : open-closed-26.aql
+ * Description : Test use of additional data(open) optional field in create type statement
+ * : No additional data is inserted (as it is declared as optional) from the insert statement.
+ * Success : Yes
+ * Date : 29th May 2012
+ */
+
+drop dataverse test if exists;
+
+create dataverse test;
+
+use dataverse test;
+
+create type testType as open {
+id : int32,
+name : string,
+opt_tag : {{ string }}?
+}
+
+create dataset testds(testType) partitioned by key id;
+
+insert into dataset testds({"id": 32,"name": "UCI"});
+
+write output to nc1:"rttest/open-closed_open-closed-26.adm";
+for $l in dataset('testds')
+return $l
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28.aql
new file mode 100644
index 0000000..8fdab75
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-28.aql
@@ -0,0 +1,51 @@
+/*
+ * Testcase Name : open-closed-28.aql
+ * Description : Query for undeclared data from an open type internal dataset
+ * : use the every keyword in the where clause
+ * Status : Yes
+ * Date : 31st May 2012
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype01 as open {
+ id: string,
+ name: string
+}
+
+create type testtype02 as open {
+id : string,
+name : string
+}
+
+create dataset testds01(testtype01) partitioned by key id;
+
+create dataset testds02(testtype02) partitioned by key id;
+
+insert into dataset testds02 (
+{ "id": "001", "name": "Person One", "hobbies": {{"scuba", "music"}}}
+);
+
+insert into dataset testds02 (
+{ "id": "002", "name": "Person Two", "hobbies": {{"fishing", "dance"}}}
+);
+
+
+insert into dataset testds02 (
+{ "id": "003", "name": "Person Three", "hobbies": {{"hiking", "surfing"}}}
+);
+
+insert into dataset testds01(
+for $d in dataset("testds02")
+return $d
+);
+
+// select all hobbies where hiking is one of the hobbies
+
+write output to nc1:"rttest/open-closed_open-closed-28.adm";
+for $d in dataset('testds01')
+where every $h in $d.hobbies satisfies $h='hiking'
+order by $d.id
+return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29.aql
new file mode 100644
index 0000000..9560430
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-29.aql
@@ -0,0 +1,50 @@
+/*
+ * Testcase Name : open-closed-29.aql
+ * Description : Query for undeclared data from an open type internal dataset
+ * : use the some keyword in the where clause
+ * Status : Yes
+ * Date : 31st May 2012
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype01 as open {
+ id: string,
+ name: string
+}
+
+create type testtype02 as open {
+id : string,
+name : string
+}
+
+create dataset testds01(testtype01) partitioned by key id;
+
+create dataset testds02(testtype02) partitioned by key id;
+
+insert into dataset testds02 (
+{ "id": "001", "name": "Person One", "hobbies": {{"scuba", "music"}}}
+);
+
+insert into dataset testds02 (
+{ "id": "002", "name": "Person Two", "hobbies": {{"fishing", "dance"}}}
+);
+
+
+insert into dataset testds02 (
+{ "id": "003", "name": "Person Three", "hobbies": {{"hiking", "surfing"}}}
+);
+
+insert into dataset testds01(
+for $d in dataset("testds02")
+return $d
+);
+
+// select all hobbies where hiking is one of the hobbies
+write output to nc1:"rttest/open-closed_open-closed-29.adm";
+for $d in dataset('testds01')
+where some $h in $d.hobbies satisfies $h='hiking'
+order by $d.id
+return $d
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30.aql
new file mode 100644
index 0000000..42aa2e6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-30.aql
@@ -0,0 +1,49 @@
+/*
+ * Test case Name : open-closed-30.aql
+ * Description : Query undeclared data using every in the WHERE clause
+ * : where every $h in $d.hobbies satisfies $h='hiking'
+ * Success : Yes
+ * Date : 31st May 2012
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype01 as open {
+ id: string
+}
+
+create type testtype02 as open {
+id : string,
+name : string
+}
+
+create dataset testds01(testtype01) partitioned by key id;
+
+create dataset testds02(testtype02) partitioned by key id;
+
+insert into dataset testds02 (
+{ "id": "011", "name": "John Doe", "hobbies": {{"scuba", "music"}}}
+);
+
+insert into dataset testds02 (
+{ "id": "102", "name": "Roger Sanders", "hobbies": {{"fishing", "dance"}}}
+);
+
+
+insert into dataset testds02 (
+{ "id": "203", "name": "Phil Smith", "hobbies": {{"hiking", "surfing"}}}
+);
+
+insert into dataset testds01(
+for $d in dataset("testds02")
+return $d
+);
+
+write output to nc1:"rttest/open-closed_open-closed-30.adm";
+for $d in dataset('testds01')
+where every $h in $d.hobbies satisfies $h='hiking'
+order by $d.id
+return $d.hobbies
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31.aql
new file mode 100644
index 0000000..03b1754
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-31.aql
@@ -0,0 +1,48 @@
+/*
+ * Test case Name : open-closed-31.aql
+ * Description :
+ * Success : Yes
+ * Date : 31st May 2012
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype01 as open {
+ id: string
+}
+
+create type testtype02 as open {
+id : string,
+name : string
+}
+
+create dataset testds01(testtype01) partitioned by key id;
+
+create dataset testds02(testtype02) partitioned by key id;
+
+insert into dataset testds02 (
+{ "id": "011", "name": "John Doe", "hobbies": {{"scuba", "music"}}}
+);
+
+insert into dataset testds02 (
+{ "id": "102", "name": "Roger Sanders", "hobbies": {{"fishing", "dance"}}}
+);
+
+
+insert into dataset testds02 (
+{ "id": "203", "name": "Phil Smith", "hobbies": {{"hiking", "surfing"}}}
+);
+
+insert into dataset testds01(
+for $d in dataset("testds02")
+return $d
+);
+
+write output to nc1:"rttest/open-closed_open-closed-31.adm";
+for $d in dataset('testds01')
+where some $h in $d.hobbies satisfies $h='hiking'
+order by $d.id
+return $d.hobbies
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32.aql
new file mode 100644
index 0000000..f101e47
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-32.aql
@@ -0,0 +1,54 @@
+/*
+ * Test case Name : open-closed-32.aql
+ * Description : INSERT into target (closed type) internal dataset by doing SELECT on (closed type) source internal dataset
+ * : then query the target internal dataset for data enclosed within {{ }} braces, in this case interests field.
+ * Success : Yes
+ * Date : 31st May 2012
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype01 as open {
+id: string
+}
+
+create type testtype02 as closed {
+id : string,
+name : string,
+sex : string,
+dept : string,
+salary : int32,
+interests : {{string}}
+}
+
+create dataset testds01(testtype01) partitioned by key id;
+
+create dataset testds02(testtype02) partitioned by key id;
+
+insert into dataset testds02 (
+{ "id": "011", "name": "John Doe", "sex":"Male", "dept":"HR", "salary":80000,"interests":{{"hiking","scuba","painting","biking"}}});
+
+insert into dataset testds02 (
+{ "id": "921", "name": "John Smith", "sex":"Male", "dept":"Sales", "salary":65000,"interests":{{"gardening","biking","reading","hiking","fishing"}}});
+
+insert into dataset testds02 (
+{ "id": "959", "name": "Susan Malaika", "sex":"Female", "dept":"XML Dev", "salary":200000,"interests":{{"XML","Web Services","Cloud","X-Forms","art","travelling"}}});
+
+insert into dataset testds02 (
+{ "id": "371", "name": "Tom Sawyer", "sex":"Male", "dept":"Well Being", "salary":90000,"interests":{{"tennis","scuba","running","biking"}}});
+
+// insert into open type target dataset by doing a select on the closed type (source) internal dataset
+
+insert into dataset testds01(
+for $d in dataset("testds02")
+return $d
+);
+
+write output to nc1:"rttest/open-closed_open-closed-32.adm";
+for $d in dataset('testds01')
+where some $h in $d.interests satisfies $h='biking'
+order by $d.id
+return $d.interests
+
diff --git a/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33.aql b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33.aql
new file mode 100644
index 0000000..b75e6c6
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/queries/open-closed/open-closed-33.aql
@@ -0,0 +1,55 @@
+/*
+ * Test case Name : open-closed-33.aql
+ * Description : INSERT into target (closed type) internal dataset by doing SELECT on (closed type) source internal dataset
+ * : then query the target internal dataset for data enclosed within {{ }} braces, in this case interests field.
+ * : Here the interests field is optional.
+ * Success : Yes
+ * Date : 31st May 2012
+ */
+
+drop dataverse testdv2 if exists;
+create dataverse testdv2;
+use dataverse testdv2;
+
+create type testtype01 as open {
+id: string
+}
+
+create type testtype02 as closed {
+id : string,
+name : string,
+sex : string,
+dept : string,
+salary : int32,
+interests : {{string}}?
+}
+
+create dataset testds01(testtype01) partitioned by key id;
+
+create dataset testds02(testtype02) partitioned by key id;
+
+insert into dataset testds02 (
+{ "id": "011", "name": "John Doe", "sex":"Male", "dept":"HR", "salary":80000,"interests":{{"hiking","scuba","painting","biking"}}});
+
+insert into dataset testds02 (
+{ "id": "921", "name": "John Smith", "sex":"Male", "dept":"Sales", "salary":65000,"interests":{{"gardening","biking","reading","hiking","fishing"}}});
+
+insert into dataset testds02 (
+{ "id": "959", "name": "Susan Malaika", "sex":"Female", "dept":"XML Dev", "salary":200000,"interests":{{"XML","Web Services","Cloud","X-Forms","art","travelling"}}});
+
+insert into dataset testds02 (
+{ "id": "371", "name": "Tom Sawyer", "sex":"Male", "dept":"Well Being", "salary":90000,"interests":{{"tennis","scuba","running","biking"}}});
+
+// insert into open type target dataset by doing a select on the closed type (source) internal dataset
+
+insert into dataset testds01(
+for $d in dataset("testds02")
+return $d
+);
+
+write output to nc1:"rttest/open-closed_open-closed-33.adm";
+for $d in dataset('testds01')
+where some $h in $d.interests satisfies $h='biking'
+order by $d.id
+return $d.interests
+
diff --git a/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive.adm
new file mode 100644
index 0000000..60a389c
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o-recursive.adm
@@ -0,0 +1,4 @@
+{ "name": "Person One", "id": "001", "address": { "street": "3019 DBH", "city": "Irvine", "zip": 92697 }, "department": {{ { "name": "CS", "id": 299, "review": 5 }, { "name": "EE", "id": 399 } }} }
+{ "name": "Person Two", "id": "002", "address": null, "department": null }
+{ "name": "Person Three", "id": "003", "address": { "street": "2019 DBH", "city": "Irvine" }, "department": null }
+{ "name": "Person Four", "id": "004", "address": { "street": "1019 DBH", "city": "irvine", "property": { "zip": 92697, "review": "positive" } }, "department": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o.adm
index 5e7a349..6086a08 100644
--- a/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o.adm
+++ b/asterix-app/src/test/resources/runtimets/results/dml/opentype-c2o.adm
@@ -1,5 +1,5 @@
-{ "id": "001", "name": "Person Three", "hobby": "music" }
-{ "id": "002", "name": "Person One", "hobby": "sports" }
-{ "id": "003", "name": "Person Two", "hobby": "movie" }
-{ "id": "004", "name": "Person Four", "hobby": "swimming" }
+{ "id": "001", "name": "Person Three", "hobby": {{ "music", "coding" }} }
+{ "id": "002", "name": "Person One", "hobby": {{ "sports" }} }
+{ "id": "003", "name": "Person Two", "hobby": {{ "movie", "sports" }} }
+{ "id": "004", "name": "Person Four", "hobby": {{ "swimming" }} }
{ "id": "005", "name": "Person Five", "hobby": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive.adm
new file mode 100644
index 0000000..c67c3cb
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c-recursive.adm
@@ -0,0 +1,4 @@
+{ "name": "Person One", "id": "001", "address": { "street": "3019 DBH", "city": "Irvine", "zip": 92697 }, "department": {{ { "name": "CS", "id": 299 }, { "name": "EE", "id": 399 } }} }
+{ "name": "Person Two", "id": "002", "address": null, "department": null }
+{ "name": "Person Three", "id": "003", "address": { "street": "2019 DBH", "city": "Irvine" }, "department": null }
+{ "name": "Person Four", "id": "004", "address": { "street": "1019 DBH", "city": "irvine", "property": { "zip": 92697, "review": "positive" } }, "department": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c.adm b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c.adm
index d9c778b..92809fd 100644
--- a/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c.adm
+++ b/asterix-app/src/test/resources/runtimets/results/dml/opentype-o2c.adm
@@ -1,5 +1,5 @@
-{ "hobby": "music", "id": "001", "name": "Person Three" }
-{ "hobby": "football", "id": "002", "name": "Person Three" }
-{ "hobby": "movie", "id": "003", "name": "Person Three" }
-{ "hobby": "swimming", "id": "004", "name": "Person Three" }
+{ "hobby": {{ "music" }}, "id": "001", "name": "Person Three" }
+{ "hobby": {{ "football" }}, "id": "002", "name": "Person Three" }
+{ "hobby": {{ "movie", "coding", "debugging" }}, "id": "003", "name": "Person Three" }
+{ "hobby": {{ "swimming", "music" }}, "id": "004", "name": "Person Three" }
{ "hobby": null, "id": "005", "name": "Person Five" }
diff --git a/asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord.adm b/asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord.adm
new file mode 100644
index 0000000..2b255b0
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/nestrecords/nestrecord.adm
@@ -0,0 +1,4 @@
+{ "name": "Person One", "id": "001", "address": { "street": "3019 DBH", "city": "Irvine", "zip": 92697 } }
+{ "name": "Person Two", "id": "002", "address": null }
+{ "name": "Person Three", "id": "003", "address": { "street": "2019 DBH", "city": "Irvine" } }
+{ "name": "Person Four", "id": "004", "address": null, "home": { "street": "2019 DBH", "city": { "name": "Irvine", "zip": 92697 } } }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01.adm
new file mode 100644
index 0000000..ee958f2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list-ordered01.adm
@@ -0,0 +1 @@
+{ "id": 1234, "description": "donut", "name": "Cake", "batters": [ [ { "id": 345, "descrpt": "Regular" }, { "id": 445, "descrpt": "Chocolate" } ] ] }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01.adm
new file mode 100644
index 0000000..30c55c2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/heterog-list01.adm
@@ -0,0 +1 @@
+{ "id": 1234, "description": "donut", "name": "Cake", "batters": {{ { "id": 345, "descrpt": "Regular" }, { "id": 445, "descrpt": "Chocolate" } }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01.adm
new file mode 100644
index 0000000..c5aac6d
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-01.adm
@@ -0,0 +1 @@
+{ "id": 123, "name": "John Doe", "hobbies": {{ "scuba", "music" }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12.adm
new file mode 100644
index 0000000..7570226
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-12.adm
@@ -0,0 +1,3 @@
+{ "id": "001", "name": "Person One", "hobbies": {{ "scuba", "music" }} }
+{ "id": "002", "name": "Person Two", "hobbies": {{ "fishing", "dance" }} }
+{ "id": "003", "name": "Person Three", "hobbies": {{ "hiking", "surfing" }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14.adm
new file mode 100644
index 0000000..70b6b95
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-14.adm
@@ -0,0 +1,5 @@
+{ "id": "001", "name": null }
+{ "id": "002", "name": "John Doe" }
+{ "id": "003", "name": null }
+{ "id": "004", "name": null }
+{ "id": "005", "name": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24.adm
new file mode 100644
index 0000000..fbcf8ee
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-24.adm
@@ -0,0 +1 @@
+{ "id": 32, "name": "UCI", "opt_tag": {{ "optional text", "put any text here", "and more" }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25.adm
new file mode 100644
index 0000000..fbcf8ee
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-25.adm
@@ -0,0 +1 @@
+{ "id": 32, "name": "UCI", "opt_tag": {{ "optional text", "put any text here", "and more" }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26.adm
new file mode 100644
index 0000000..755a799
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-26.adm
@@ -0,0 +1 @@
+{ "id": 32, "name": "UCI", "opt_tag": null }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29.adm
new file mode 100644
index 0000000..2c3d0ea
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-29.adm
@@ -0,0 +1 @@
+{ "id": "003", "name": "Person Three", "hobbies": {{ "hiking", "surfing" }} }
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31.adm
new file mode 100644
index 0000000..d5816e2
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-31.adm
@@ -0,0 +1 @@
+{{ "hiking", "surfing" }}
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32.adm
new file mode 100644
index 0000000..2103e83
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-32.adm
@@ -0,0 +1,3 @@
+{{ "hiking", "scuba", "painting", "biking" }}
+{{ "tennis", "scuba", "running", "biking" }}
+{{ "gardening", "biking", "reading", "hiking", "fishing" }}
diff --git a/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33.adm b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33.adm
new file mode 100644
index 0000000..2103e83
--- /dev/null
+++ b/asterix-app/src/test/resources/runtimets/results/open-closed/open-closed-33.adm
@@ -0,0 +1,3 @@
+{{ "hiking", "scuba", "painting", "biking" }}
+{{ "tennis", "scuba", "running", "biking" }}
+{{ "gardening", "biking", "reading", "hiking", "fishing" }}
diff --git a/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java b/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java
index fc5c930..3e03c0a 100644
--- a/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java
+++ b/asterix-common/src/main/java/edu/uci/ics/asterix/common/utils/UTF8CharSequence.java
@@ -1,7 +1,7 @@
package edu.uci.ics.asterix.common.utils;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
import edu.uci.ics.hyracks.dataflow.common.data.util.StringUtils;
public class UTF8CharSequence implements CharSequence {
@@ -48,7 +48,7 @@
int sStart = start + 2;
int c = 0;
int i = 0;
- byte[] bytes = valueRef.getBytes();
+ byte[] bytes = valueRef.getByteArray();
while (c < len) {
buf[i++] = UTF8StringPointable.charAt(bytes, sStart + c);
c += UTF8StringPointable.charSize(bytes, sStart + c);
@@ -57,7 +57,7 @@
}
private void resetLength(IValueReference valueRef) {
- this.len = UTF8StringPointable.getUTFLen(valueRef.getBytes(), start);
+ this.len = UTF8StringPointable.getUTFLen(valueRef.getByteArray(), start);
}
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAOrderedListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAOrderedListBuilder.java
index 881c302..0ca40a5 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAOrderedListBuilder.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAOrderedListBuilder.java
@@ -4,7 +4,7 @@
import edu.uci.ics.asterix.om.types.AOrderedListType;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
public interface IAOrderedListBuilder {
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java
index 18699f1..544b532 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IARecordBuilder.java
@@ -19,7 +19,7 @@
import java.io.IOException;
import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
/**
* A record builder helps to construct Asterix Records in a serialized format.
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAUnorderedListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAUnorderedListBuilder.java
index f962dfb..50d2038 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAUnorderedListBuilder.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/IAUnorderedListBuilder.java
@@ -4,7 +4,7 @@
import edu.uci.ics.asterix.om.types.AUnorderedListType;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
public interface IAUnorderedListBuilder {
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java
index dcb0b87..18cec15 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/OrderedListBuilder.java
@@ -10,7 +10,7 @@
import edu.uci.ics.asterix.om.types.ATypeTag;
import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
public class OrderedListBuilder implements IAOrderedListBuilder {
@@ -60,10 +60,10 @@
this.offsets.add((short) outputStream.size());
if (itemTypeTag == ATypeTag.ANY) {
this.numberOfItems++;
- this.outputStream.write(item.getBytes(), item.getStartIndex(), item.getLength());
- } else if (item.getBytes()[0] != serNullTypeTag) {
+ this.outputStream.write(item.getByteArray(), item.getStartOffset(), item.getLength());
+ } else if (item.getByteArray()[0] != serNullTypeTag) {
this.numberOfItems++;
- this.outputStream.write(item.getBytes(), item.getStartIndex() + 1, item.getLength() - 1);
+ this.outputStream.write(item.getByteArray(), item.getStartOffset() + 1, item.getLength() - 1);
}
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java
index fb8d2e4..03f0e20 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/RecordBuilder.java
@@ -11,8 +11,8 @@
import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
import edu.uci.ics.hyracks.api.dataflow.value.IBinaryHashFunction;
import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryHashFunctionFactory;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
public class RecordBuilder implements IARecordBuilder {
private int openPartOffset;
@@ -127,9 +127,9 @@
closedPartOffsets[id] = closedPartOutputStream.size();
int len = value.getLength() - 1;
// +1 because we do not store the value tag.
- closedPartOutputStream.write(value.getBytes(), value.getStartIndex() + 1, len);
+ closedPartOutputStream.write(value.getByteArray(), value.getStartOffset() + 1, len);
numberOfClosedFields++;
- if (isNullable && value.getBytes()[0] != SER_NULL_TYPE_TAG) {
+ if (isNullable && value.getByteArray()[0] != SER_NULL_TYPE_TAG) {
nullBitMap[id / 8] |= (byte) (1 << (7 - (id % 8)));
}
}
@@ -142,12 +142,12 @@
for (int i = 0; i < tempOpenPartOffsets.length; i++)
openPartOffsets[i] = tempOpenPartOffsets[i];
}
- fieldNameHashCode = utf8HashFunction.hash(name.getBytes(), name.getStartIndex() + 1, name.getLength());
+ fieldNameHashCode = utf8HashFunction.hash(name.getByteArray(), name.getStartOffset() + 1, name.getLength());
openPartOffsets[this.numberOfOpenFields] = fieldNameHashCode;
openPartOffsets[this.numberOfOpenFields] = (openPartOffsets[numberOfOpenFields] << 32);
openPartOffsets[numberOfOpenFields++] += openPartOutputStream.size();
- openPartOutputStream.write(name.getBytes(), name.getStartIndex() + 1, name.getLength() - 1);
- openPartOutputStream.write(value.getBytes(), value.getStartIndex(), value.getLength());
+ openPartOutputStream.write(name.getByteArray(), name.getStartOffset() + 1, name.getLength() - 1);
+ openPartOutputStream.write(value.getByteArray(), value.getStartOffset(), value.getLength());
}
@Override
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java
index 2f74f97..e8dbc29 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/builders/UnorderedListBuilder.java
@@ -10,7 +10,7 @@
import edu.uci.ics.asterix.om.types.AUnorderedListType;
import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
import edu.uci.ics.hyracks.api.exceptions.HyracksDataException;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
public class UnorderedListBuilder implements IAUnorderedListBuilder {
@@ -63,10 +63,10 @@
this.offsets.add((short) outputStream.size());
if (itemTypeTag == ATypeTag.ANY) {
this.numberOfItems++;
- this.outputStream.write(item.getBytes(), item.getStartIndex(), item.getLength());
- } else if (item.getBytes()[0] != serNullTypeTag) {
+ this.outputStream.write(item.getByteArray(), item.getStartOffset(), item.getLength());
+ } else if (item.getByteArray()[0] != serNullTypeTag) {
this.numberOfItems++;
- this.outputStream.write(item.getBytes(), item.getStartIndex() + 1, item.getLength() - 1);
+ this.outputStream.write(item.getByteArray(), item.getStartOffset() + 1, item.getLength() - 1);
}
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
index 5494669..caa8821 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2009-2010 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.asterix.dataflow.data.nontagged.serde;
import java.io.DataInput;
@@ -33,9 +48,9 @@
private ARecordType recordType;
private int numberOfSchemaFields = 0;
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
private ISerializerDeserializer serializers[];
- @SuppressWarnings("unchecked")
+ @SuppressWarnings("rawtypes")
private ISerializerDeserializer deserializers[];
private ARecordSerializerDeserializer() {
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java
index e8786ec..2c7ff10 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/base/TypeComputerUtilities.java
@@ -1,28 +1,27 @@
+/*
+ * Copyright 2009-2010 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.asterix.om.typecomputer.base;
-import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.IAType;
import edu.uci.ics.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
public class TypeComputerUtilities {
- public static void setOpenType(AbstractFunctionCallExpression expr, boolean openType) {
- Boolean openField = true;
- Object[] opaqueParameters = new Object[1];
- opaqueParameters[0] = openField;
- expr.setOpaqueParameters(opaqueParameters);
- }
-
- public static boolean isOpenType(AbstractFunctionCallExpression expr) {
- boolean openType = false;
- Object[] opaqueParameters = expr.getOpaqueParameters();
- if (opaqueParameters != null) {
- openType = (Boolean) opaqueParameters[0];
- }
- return openType;
- }
-
- public static boolean setRequiredAndInputTypes(AbstractFunctionCallExpression expr, ARecordType requiredRecordType,
- ARecordType inputRecordType) {
+ public static boolean setRequiredAndInputTypes(AbstractFunctionCallExpression expr, IAType requiredRecordType,
+ IAType inputRecordType) {
boolean changed = false;
Object opaqueParameter = expr.getOpaqueParameters();
if (opaqueParameter == null) {
@@ -35,22 +34,21 @@
return changed;
}
- public static ARecordType getRequiredType(AbstractFunctionCallExpression expr) {
+ public static IAType getRequiredType(AbstractFunctionCallExpression expr) {
Object[] type = expr.getOpaqueParameters();
if (type != null) {
- ARecordType recordType = (ARecordType) type[0];
- return recordType;
+ IAType returnType = (IAType) type[0];
+ return returnType;
} else
return null;
}
- public static ARecordType getInputType(AbstractFunctionCallExpression expr) {
+ public static IAType getInputType(AbstractFunctionCallExpression expr) {
Object[] type = expr.getOpaqueParameters();
if (type != null) {
- ARecordType recordType = (ARecordType) type[1];
- return recordType;
+ IAType returnType = (IAType) type[1];
+ return returnType;
} else
return null;
}
-
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
index 6a17a46..daf7164 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/ClosedRecordConstructorResultType.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2009-2010 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.asterix.om.typecomputer.impl;
import java.util.Iterator;
@@ -31,10 +46,10 @@
/**
* if type has been top-down propagated, use the enforced type
*/
- ARecordType type = TypeComputerUtilities.getRequiredType(f);
+ ARecordType type = (ARecordType) TypeComputerUtilities.getRequiredType(f);
if (type != null)
return type;
-
+
int n = f.getArguments().size() / 2;
String[] fieldNames = new String[n];
IAType[] fieldTypes = new IAType[n];
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
index 8b27a82..c46c59b 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OpenRecordConstructorResultType.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2009-2010 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.asterix.om.typecomputer.impl;
import java.util.ArrayList;
@@ -33,7 +48,7 @@
/**
* if type has been top-down propagated, use the enforced type
*/
- ARecordType type = TypeComputerUtilities.getRequiredType(f);
+ ARecordType type = (ARecordType) TypeComputerUtilities.getRequiredType(f);
if (type != null)
return type;
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java
index 47f239b..01e43d3 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/OrderedListConstructorResultType.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2009-2010 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.asterix.om.typecomputer.impl;
import java.util.ArrayList;
@@ -24,26 +39,28 @@
public AOrderedListType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expression;
- boolean openType = TypeComputerUtilities.isOpenType(f);
- int n = f.getArguments().size();
- if (n == 0 || openType) {
- return new AOrderedListType(BuiltinType.ANY, null);
- } else {
- ArrayList<IAType> types = new ArrayList<IAType>();
- for (int k = 0; k < f.getArguments().size(); k++) {
- IAType type = (IAType) env.getType(f.getArguments().get(k).getValue());
- if (type.getTypeTag() == ATypeTag.UNION && NonTaggedFormatUtil.isOptionalField((AUnionType) type))
- type = ((AUnionType) type).getUnionList()
- .get(NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
- if (types.indexOf(type) < 0) {
- types.add(type);
- }
- }
- if (types.size() == 1) {
- return new AOrderedListType(types.get(0), null);
- } else {
- throw new AlgebricksException("You can not construct a heterogenous list.");
+
+ /**
+ * if type has been top-down propagated, use the enforced type
+ */
+ AOrderedListType reqType = (AOrderedListType) TypeComputerUtilities.getRequiredType(f);
+ if (reqType != null)
+ return reqType;
+
+ ArrayList<IAType> types = new ArrayList<IAType>();
+ for (int k = 0; k < f.getArguments().size(); k++) {
+ IAType type = (IAType) env.getType(f.getArguments().get(k).getValue());
+ if (type.getTypeTag() == ATypeTag.UNION && NonTaggedFormatUtil.isOptionalField((AUnionType) type))
+ type = ((AUnionType) type).getUnionList().get(NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+ if (types.indexOf(type) < 0) {
+ types.add(type);
}
}
+ if (types.size() == 1) {
+ return new AOrderedListType(types.get(0), null);
+ } else {
+ return new AOrderedListType(BuiltinType.ANY, null);
+ }
+
}
}
diff --git a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java
index 0e03e6d..2fa36f2 100644
--- a/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java
+++ b/asterix-om/src/main/java/edu/uci/ics/asterix/om/typecomputer/impl/UnorderedListConstructorResultType.java
@@ -1,3 +1,18 @@
+/*
+ * Copyright 2009-2010 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.asterix.om.typecomputer.impl;
import java.util.ArrayList;
@@ -24,26 +39,28 @@
public AUnorderedListType computeType(ILogicalExpression expression, IVariableTypeEnvironment env,
IMetadataProvider<?, ?> metadataProvider) throws AlgebricksException {
AbstractFunctionCallExpression f = (AbstractFunctionCallExpression) expression;
- boolean openType = TypeComputerUtilities.isOpenType(f);
- int n = f.getArguments().size();
- if (n == 0 || openType) {
- return new AUnorderedListType(BuiltinType.ANY, null);
- } else {
- ArrayList<IAType> types = new ArrayList<IAType>();
- for (int k = 0; k < f.getArguments().size(); k++) {
- IAType type = (IAType) env.getType(f.getArguments().get(k).getValue());
- if (type.getTypeTag() == ATypeTag.UNION && NonTaggedFormatUtil.isOptionalField((AUnionType) type))
- type = ((AUnionType) type).getUnionList()
- .get(NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
- if (types.indexOf(type) < 0) {
- types.add(type);
- }
- }
- if (types.size() == 1) {
- return new AUnorderedListType(types.get(0), null);
- } else {
- throw new AlgebricksException("You can not construct a heterogenous list.");
+
+ /**
+ * if type has been top-down propagated, use the enforced type
+ */
+ AUnorderedListType reqType = (AUnorderedListType) TypeComputerUtilities.getRequiredType(f);
+ if (reqType != null)
+ return reqType;
+
+ ArrayList<IAType> types = new ArrayList<IAType>();
+ for (int k = 0; k < f.getArguments().size(); k++) {
+ IAType type = (IAType) env.getType(f.getArguments().get(k).getValue());
+ if (type.getTypeTag() == ATypeTag.UNION && NonTaggedFormatUtil.isOptionalField((AUnionType) type))
+ type = ((AUnionType) type).getUnionList().get(NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+ if (types.indexOf(type) < 0) {
+ types.add(type);
}
}
+ if (types.size() == 1) {
+ return new AUnorderedListType(types.get(0), null);
+ } else {
+ return new AUnorderedListType(BuiltinType.ANY, null);
+ }
+
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
index acc1e09..5c6aa8e 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableAvgAggregateDescriptor.java
@@ -91,35 +91,35 @@
if (inputVal.getLength() > 0) {
++count;
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
- byte val = AInt8SerializerDeserializer.getByte(inputVal.getBytes(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT16: {
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT32: {
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT64: {
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
sum += val;
break;
}
case FLOAT: {
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
sum += val;
break;
}
case DOUBLE: {
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
sum += val;
break;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
index b2c9be8..5b647d4 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableGlobalAvgAggregateDescriptor.java
@@ -118,7 +118,7 @@
inputVal.reset();
eval.evaluate(tuple);
- byte[] serBytes = inputVal.getBytes();
+ byte[] serBytes = inputVal.getByteArray();
if (serBytes[0] == SER_NULL_TYPE_TAG)
metNull = true;
if (serBytes[0] != SER_RECORD_TYPE_TAG) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
index 9d65ad4..9b5e5e9 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableLocalAvgAggregateDescriptor.java
@@ -121,35 +121,35 @@
if (inputVal.getLength() > 0) {
++count;
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
- byte val = AInt8SerializerDeserializer.getByte(inputVal.getBytes(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT16: {
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT32: {
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT64: {
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
sum += val;
break;
}
case FLOAT: {
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
sum += val;
break;
}
case DOUBLE: {
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
sum += val;
break;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
index ac1b4e1..4764cdb 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/serializable/std/SerializableSumAggregateDescriptor.java
@@ -107,41 +107,41 @@
eval.evaluate(tuple);
if (inputVal.getLength() > 0) {
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8s = true;
- byte val = AInt8SerializerDeserializer.getByte(inputVal.getBytes(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT16: {
metInt16s = true;
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT32: {
metInt32s = true;
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT64: {
metInt64s = true;
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
sum += val;
break;
}
case FLOAT: {
metFloats = true;
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
sum += val;
break;
}
case DOUBLE: {
metDoubles = true;
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
sum += val;
break;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
index 028a9a2..f5c9816 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/AvgAggregateDescriptor.java
@@ -120,35 +120,35 @@
if (inputVal.getLength() > 0) {
++count;
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
- byte val = AInt8SerializerDeserializer.getByte(inputVal.getBytes(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT16: {
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT32: {
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT64: {
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
sum += val;
break;
}
case FLOAT: {
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
sum += val;
break;
}
case DOUBLE: {
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
sum += val;
break;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
index f1d6fbd..530f790 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/GlobalAvgAggregateDescriptor.java
@@ -116,7 +116,7 @@
public void step(IFrameTupleReference tuple) throws AlgebricksException {
inputVal.reset();
eval.evaluate(tuple);
- byte[] serBytes = inputVal.getBytes();
+ byte[] serBytes = inputVal.getByteArray();
if (serBytes[0] == SER_NULL_TYPE_TAG)
metNull = true;
if (serBytes[0] != SER_RECORD_TYPE_TAG) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
index 88d917f..5523b0d 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/LocalAvgAggregateDescriptor.java
@@ -121,35 +121,35 @@
if (inputVal.getLength() > 0) {
++count;
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
- byte val = AInt8SerializerDeserializer.getByte(inputVal.getBytes(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT16: {
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT32: {
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT64: {
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
sum += val;
break;
}
case FLOAT: {
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
sum += val;
break;
}
case DOUBLE: {
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
sum += val;
break;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
index 6f7ac58..43a8cb1 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MaxAggregateDescriptor.java
@@ -106,7 +106,7 @@
eval.evaluate(tuple);
if (inputVal.getLength() > 0) {
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8s = true;
@@ -114,35 +114,35 @@
}
case INT16: {
metInt16s = true;
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
if (val > shortVal)
shortVal = val;
throw new NotImplementedException("no implementation for int16's comparator");
}
case INT32: {
metInt32s = true;
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
if (val > intVal)
intVal = val;
break;
}
case INT64: {
metInt64s = true;
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
if (val > longVal)
longVal = val;
break;
}
case FLOAT: {
metFloats = true;
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
if (val > floatVal)
floatVal = val;
break;
}
case DOUBLE: {
metDoubles = true;
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
if (val > doubleVal)
doubleVal = val;
break;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
index 2b36918..8654076 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/MinAggregateDescriptor.java
@@ -106,7 +106,7 @@
eval.evaluate(tuple);
if (inputVal.getLength() > 0) {
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8s = true;
@@ -114,35 +114,35 @@
}
case INT16: {
metInt16s = true;
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
if (val < shortVal)
shortVal = val;
throw new NotImplementedException("no implementation for int16's comparator");
}
case INT32: {
metInt32s = true;
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
if (val < intVal)
intVal = val;
break;
}
case INT64: {
metInt64s = true;
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
if (val < longVal)
longVal = val;
break;
}
case FLOAT: {
metFloats = true;
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
if (val < floatVal)
floatVal = val;
break;
}
case DOUBLE: {
metDoubles = true;
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
if (val < doubleVal)
doubleVal = val;
break;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
index e51badd..129d0b7 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/aggregates/std/SumAggregateDescriptor.java
@@ -98,41 +98,41 @@
eval.evaluate(tuple);
if (inputVal.getLength() > 0) {
ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
- .deserialize(inputVal.getBytes()[0]);
+ .deserialize(inputVal.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8s = true;
- byte val = AInt8SerializerDeserializer.getByte(inputVal.getBytes(), 1);
+ byte val = AInt8SerializerDeserializer.getByte(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT16: {
metInt16s = true;
- short val = AInt16SerializerDeserializer.getShort(inputVal.getBytes(), 1);
+ short val = AInt16SerializerDeserializer.getShort(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT32: {
metInt32s = true;
- int val = AInt32SerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int val = AInt32SerializerDeserializer.getInt(inputVal.getByteArray(), 1);
sum += val;
break;
}
case INT64: {
metInt64s = true;
- long val = AInt64SerializerDeserializer.getLong(inputVal.getBytes(), 1);
+ long val = AInt64SerializerDeserializer.getLong(inputVal.getByteArray(), 1);
sum += val;
break;
}
case FLOAT: {
metFloats = true;
- float val = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float val = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
sum += val;
break;
}
case DOUBLE: {
metDoubles = true;
- double val = ADoubleSerializerDeserializer.getDouble(inputVal.getBytes(), 1);
+ double val = ADoubleSerializerDeserializer.getDouble(inputVal.getByteArray(), 1);
sum += val;
break;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java
index 8bb0b9f..3ef8cf3 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/base/AsterixTupleFilter.java
@@ -39,6 +39,6 @@
public boolean accept(IFrameTupleReference tuple) throws Exception {
evalOut.reset();
eval.evaluate(tuple);
- return boolInspector.getBooleanValue(evalOut.getBytes(), 0, 2);
+ return boolInspector.getBooleanValue(evalOut.getByteArray(), 0, 2);
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
index 15ab112..2c14bd0 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
@@ -67,7 +67,7 @@
for (int i = 0; i < evalFields.length; i++) {
fieldValueBuffer.reset();
evalFields[i].evaluate(tuple);
- if (fieldValueBuffer.getBytes()[0] != SER_NULL_TYPE_TAG) {
+ if (fieldValueBuffer.getByteArray()[0] != SER_NULL_TYPE_TAG) {
recBuilder.addField(i, fieldValueBuffer);
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
index d7404bb..165cd56 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
@@ -63,11 +63,11 @@
try {
- int dimension = AInt32SerializerDeserializer.getInt(outInput1.getBytes(), 1);
- int coordinate = AInt32SerializerDeserializer.getInt(outInput2.getBytes(), 1);
+ int dimension = AInt32SerializerDeserializer.getInt(outInput1.getByteArray(), 1);
+ int coordinate = AInt32SerializerDeserializer.getInt(outInput2.getByteArray(), 1);
double value;
if (dimension == 2) {
- ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput0.getBytes()[0]);
+ ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput0.getByteArray()[0]);
switch (tag) {
case POINT:
switch (coordinate) {
@@ -75,7 +75,7 @@
// for
// max x, and 3 for max y
case 2: {
- double x = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double x = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X));
value = x;
@@ -83,7 +83,7 @@
break;
case 1:
case 3: {
- double y = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double y = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y));
value = y;
@@ -101,9 +101,9 @@
case 0: {
value = Double.MAX_VALUE;
double startX = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), ALineSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.X));
- double endX = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double endX = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ALineSerializerDeserializer.getEndPointCoordinateOffset(Coordinate.X));
value = Math.min(Math.min(startX, endX), value);
@@ -112,9 +112,9 @@
case 1: {
value = Double.MAX_VALUE;
double startY = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), ALineSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.Y));
- double endY = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double endY = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ALineSerializerDeserializer.getEndPointCoordinateOffset(Coordinate.Y));
value = Math.min(Math.min(startY, endY), value);
@@ -123,9 +123,9 @@
case 2: {
value = Double.MIN_VALUE;
double startX = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), ALineSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.X));
- double endX = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double endX = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ALineSerializerDeserializer.getEndPointCoordinateOffset(Coordinate.X));
value = Math.max(Math.min(startX, endX), value);
@@ -134,9 +134,9 @@
case 3: {
value = Double.MIN_VALUE;
double startY = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), ALineSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.Y));
- double endY = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double endY = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ALineSerializerDeserializer.getEndPointCoordinateOffset(Coordinate.Y));
value = Math.max(Math.min(startY, endY), value);
@@ -149,14 +149,14 @@
}
break;
case POLYGON:
- int numOfPoints = AInt16SerializerDeserializer.getShort(outInput0.getBytes(),
+ int numOfPoints = AInt16SerializerDeserializer.getShort(outInput0.getByteArray(),
APolygonSerializerDeserializer.getNumberOfPointsOffset());
switch (coordinate) {
case 0: {
value = Double.MAX_VALUE;
for (int i = 0; i < numOfPoints; i++) {
double x = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), APolygonSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), APolygonSerializerDeserializer
.getCoordinateOffset(i, Coordinate.X));
value = Math.min(x, value);
}
@@ -166,7 +166,7 @@
value = Double.MAX_VALUE;
for (int i = 0; i < numOfPoints; i++) {
double y = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), APolygonSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), APolygonSerializerDeserializer
.getCoordinateOffset(i, Coordinate.Y));
value = Math.min(y, value);
}
@@ -176,7 +176,7 @@
value = Double.MIN_VALUE;
for (int i = 0; i < numOfPoints; i++) {
double x = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), APolygonSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), APolygonSerializerDeserializer
.getCoordinateOffset(i, Coordinate.X));
value = Math.max(x, value);
}
@@ -186,7 +186,7 @@
value = Double.MIN_VALUE;
for (int i = 0; i < numOfPoints; i++) {
double y = ADoubleSerializerDeserializer
- .getDouble(outInput0.getBytes(), APolygonSerializerDeserializer
+ .getDouble(outInput0.getByteArray(), APolygonSerializerDeserializer
.getCoordinateOffset(i, Coordinate.Y));
value = Math.max(y, value);
}
@@ -201,10 +201,10 @@
case CIRCLE:
switch (coordinate) {
case 0: {
- double x = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double x = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.X));
- double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.X));
@@ -212,10 +212,10 @@
}
break;
case 1: {
- double y = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double y = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.Y));
- double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.Y));
@@ -223,10 +223,10 @@
}
break;
case 2: {
- double x = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double x = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.X));
- double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.X));
@@ -234,10 +234,10 @@
}
break;
case 3: {
- double y = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double y = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.Y));
- double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double radius = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ACircleSerializerDeserializer
.getCenterPointCoordinateOffset(Coordinate.Y));
@@ -254,25 +254,25 @@
value = Double.MAX_VALUE;
switch (coordinate) {
case 0: {
- value = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ value = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ARectangleSerializerDeserializer
.getBottomLeftCoordinateOffset(Coordinate.X));
}
break;
case 1: {
- value = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ value = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ARectangleSerializerDeserializer
.getBottomLeftCoordinateOffset(Coordinate.Y));
}
break;
case 2: {
- value = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ value = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ARectangleSerializerDeserializer
.getUpperRightCoordinateOffset(Coordinate.X));
}
break;
case 3: {
- value = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ value = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
ARectangleSerializerDeserializer
.getUpperRightCoordinateOffset(Coordinate.Y));
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
index 0f8be91..57331db 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
@@ -56,15 +56,15 @@
if (!checkArgTypes(firstTypeTag, secondTypeTag))
return;
- itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[firstStart + 1]);
+ itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[firstStart + 1]);
if (itemTypeTag == ATypeTag.ANY)
throw new AlgebricksException("\n Edit Distance can only be called on homogenous lists");
- itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[secondStart + 1]);
+ itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[secondStart + 1]);
if (itemTypeTag == ATypeTag.ANY)
throw new AlgebricksException("\n Edit Distance can only be called on homogenous lists");
- editDistance = computeResult(argOut.getBytes(), firstStart, secondStart, firstTypeTag);
+ editDistance = computeResult(argOut.getByteArray(), firstStart, secondStart, firstTypeTag);
try {
writeResult(editDistance);
@@ -81,8 +81,8 @@
secondStart = argOut.getLength();
secondStringEval.evaluate(tuple);
- firstTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[firstStart]);
- secondTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[secondStart]);
+ firstTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[firstStart]);
+ secondTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[secondStart]);
}
protected int computeResult(byte[] bytes, int firstStart, int secondStart, ATypeTag argType)
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java
index 06bcedf..49a1d99 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/FieldAccessByIndexEvalFactory.java
@@ -73,7 +73,7 @@
eval0.evaluate(tuple);
outInput1.reset();
eval1.evaluate(tuple);
- byte[] serRecord = outInput0.getBytes();
+ byte[] serRecord = outInput0.getByteArray();
if (serRecord[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
@@ -85,7 +85,7 @@
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serRecord[0]));
}
- fieldIndex = IntegerSerializerDeserializer.getInt(outInput1.getBytes(), 1);
+ fieldIndex = IntegerSerializerDeserializer.getInt(outInput1.getByteArray(), 1);
fieldValueOffset = ARecordSerializerDeserializer.getFieldOffsetById(serRecord, fieldIndex,
nullBitmapSize, recordType.isOpen());
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java
index 4713c38..4b392bd 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/GramTokensEvaluator.java
@@ -59,7 +59,7 @@
int prePostOff = argOut.getLength();
prePostEval.evaluate(tuple);
- byte[] bytes = argOut.getBytes();
+ byte[] bytes = argOut.getByteArray();
int gramLength = IntegerSerializerDeserializer.getInt(bytes, gramLengthOff + typeIndicatorSize);
tokenizer.setGramlength(gramLength);
boolean prePost = BooleanSerializerDeserializer.getBoolean(bytes, prePostOff + typeIndicatorSize);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
index 932036e..0c0c36d 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
@@ -63,7 +63,7 @@
runArgEvals(tuple);
if (!checkArgTypes(firstTypeTag, secondTypeTag))
return;
- jaccSim = computeResult(argOut.getBytes(), firstStart, secondStart, firstTypeTag);
+ jaccSim = computeResult(argOut.getByteArray(), firstStart, secondStart, firstTypeTag);
try {
writeResult(jaccSim);
} catch (IOException e) {
@@ -79,8 +79,8 @@
secondStart = argOut.getLength();
secondOrdListEval.evaluate(tuple);
- firstTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[firstStart]);
- secondTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[secondStart]);
+ firstTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[firstStart]);
+ secondTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[secondStart]);
}
protected float computeResult(byte[] bytes, int firstStart, int secondStart, ATypeTag argType)
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
index 4884806..8961257 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
@@ -74,7 +74,7 @@
sim = 0;
inputVal.reset();
evalThreshold.evaluate(tuple);
- float similarityThreshold = AFloatSerializerDeserializer.getFloat(inputVal.getBytes(), 1);
+ float similarityThreshold = AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(), 1);
if (similarityThreshold != similarityThresholdCache || similarityFilters == null) {
similarityFilters = new SimilarityFiltersJaccard(similarityThreshold);
@@ -83,11 +83,11 @@
inputVal.reset();
evalLen1.evaluate(tuple);
- int length1 = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int length1 = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
inputVal.reset();
evalLen2.evaluate(tuple);
- int length2 = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int length2 = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
//
// -- - length filter - --
@@ -100,7 +100,7 @@
inputVal.reset();
evalTokens1.evaluate(tuple);
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
if (serList[0] != SER_ORDEREDLIST_TYPE_TAG && serList[0] != SER_UNORDEREDLIST_TYPE_TAG) {
throw new AlgebricksException("Scan collection is not defined for values of type"
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[0]));
@@ -108,7 +108,7 @@
int lengthTokens1;
if (serList[0] == SER_ORDEREDLIST_TYPE_TAG) {
- lengthTokens1 = AOrderedListSerializerDeserializer.getNumberOfItems(inputVal.getBytes());
+ lengthTokens1 = AOrderedListSerializerDeserializer.getNumberOfItems(inputVal.getByteArray());
// read tokens
for (i = 0; i < lengthTokens1; i++) {
int itemOffset;
@@ -120,7 +120,7 @@
tokens1.add(IntegerSerializerDeserializer.getInt(serList, itemOffset));
}
} else {
- lengthTokens1 = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal.getBytes());
+ lengthTokens1 = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal.getByteArray());
// read tokens
for (i = 0; i < lengthTokens1; i++) {
int itemOffset;
@@ -142,7 +142,7 @@
inputVal.reset();
evalTokens2.evaluate(tuple);
- serList = inputVal.getBytes();
+ serList = inputVal.getByteArray();
if (serList[0] != SER_ORDEREDLIST_TYPE_TAG && serList[0] != SER_UNORDEREDLIST_TYPE_TAG) {
throw new AlgebricksException("Scan collection is not defined for values of type"
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[0]));
@@ -150,7 +150,7 @@
int lengthTokens2;
if (serList[0] == SER_ORDEREDLIST_TYPE_TAG) {
- lengthTokens2 = AOrderedListSerializerDeserializer.getNumberOfItems(inputVal.getBytes());
+ lengthTokens2 = AOrderedListSerializerDeserializer.getNumberOfItems(inputVal.getByteArray());
// read tokens
for (i = 0; i < lengthTokens2; i++) {
int itemOffset;
@@ -162,7 +162,7 @@
tokens2.add(IntegerSerializerDeserializer.getInt(serList, itemOffset));
}
} else {
- lengthTokens2 = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal.getBytes());
+ lengthTokens2 = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal.getByteArray());
// read tokens
for (i = 0; i < lengthTokens2; i++) {
int itemOffset;
@@ -182,7 +182,7 @@
// -- - token prefix - --
inputVal.reset();
evalTokenPrefix.evaluate(tuple);
- int tokenPrefix = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int tokenPrefix = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
//
// -- - position filter - --
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java
index 800c4ee..d9fde50 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/common/WordTokensEvaluator.java
@@ -43,7 +43,7 @@
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
argOut.reset();
stringEval.evaluate(tuple);
- byte[] bytes = argOut.getBytes();
+ byte[] bytes = argOut.getByteArray();
tokenizer.reset(bytes, 0, argOut.getLength());
tokenBuffer.reset();
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
index 958b04b..5082c67 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
@@ -74,7 +74,7 @@
if (outLeft.getLength() == 0) {
isLeftNull = true;
} else {
- typeTag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outLeft.getBytes()[0]);
+ typeTag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outLeft.getByteArray()[0]);
if (typeTag1 == ATypeTag.NULL) {
isLeftNull = true;
}
@@ -82,7 +82,7 @@
if (outRight.getLength() == 0) {
isRightNull = true;
} else {
- typeTag2 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outRight.getBytes()[0]);
+ typeTag2 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outRight.getByteArray()[0]);
if (typeTag2 == ATypeTag.NULL) {
isRightNull = true;
}
@@ -130,8 +130,8 @@
if (typeTag2 == ATypeTag.NULL) {
return ComparisonResult.GREATER_THAN;
} else if (typeTag2 == ATypeTag.DATETIME) {
- int result = dateTimeBinaryComp.compare(outLeft.getBytes(), 1, outLeft.getLength() - 1,
- outRight.getBytes(), 1, outRight.getLength() - 1);
+ int result = dateTimeBinaryComp.compare(outLeft.getByteArray(), 1, outLeft.getLength() - 1,
+ outRight.getByteArray(), 1, outRight.getLength() - 1);
if (result == 0)
return ComparisonResult.EQUAL;
else if (result < 0)
@@ -144,8 +144,8 @@
private ComparisonResult compareBooleanWithArg(ATypeTag typeTag2) throws AlgebricksException {
if (typeTag2 == ATypeTag.BOOLEAN) {
- byte b0 = outLeft.getBytes()[1];
- byte b1 = outRight.getBytes()[1];
+ byte b0 = outLeft.getByteArray()[1];
+ byte b1 = outRight.getByteArray()[1];
return compareByte(b0, b1);
}
throw new AlgebricksException("Comparison is undefined between types ABoolean and " + typeTag2 + " .");
@@ -153,7 +153,7 @@
private ComparisonResult compareStringWithArg(ATypeTag typeTag2) throws AlgebricksException {
if (typeTag2 == ATypeTag.STRING) {
- int result = strBinaryComp.compare(outLeft.getBytes(), 1, outLeft.getLength() - 1, outRight.getBytes(), 1,
+ int result = strBinaryComp.compare(outLeft.getByteArray(), 1, outLeft.getLength() - 1, outRight.getByteArray(), 1,
outRight.getLength() - 1);
if (result == 0)
return ComparisonResult.EQUAL;
@@ -166,30 +166,30 @@
}
private ComparisonResult compareDoubleWithArg(ATypeTag typeTag2) throws AlgebricksException {
- double s = ADoubleSerializerDeserializer.getDouble(outLeft.getBytes(), 1);
+ double s = ADoubleSerializerDeserializer.getDouble(outLeft.getByteArray(), 1);
switch (typeTag2) {
case INT8: {
- byte v2 = AInt8SerializerDeserializer.getByte(outRight.getBytes(), 1);
+ byte v2 = AInt8SerializerDeserializer.getByte(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
case INT16: {
- short v2 = AInt16SerializerDeserializer.getShort(outRight.getBytes(), 1);
+ short v2 = AInt16SerializerDeserializer.getShort(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
case INT32: {
- int v2 = AInt32SerializerDeserializer.getInt(outRight.getBytes(), 1);
+ int v2 = AInt32SerializerDeserializer.getInt(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
case INT64: {
- long v2 = AInt64SerializerDeserializer.getLong(outRight.getBytes(), 1);
+ long v2 = AInt64SerializerDeserializer.getLong(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
case FLOAT: {
- float v2 = AFloatSerializerDeserializer.getFloat(outRight.getBytes(), 1);
+ float v2 = AFloatSerializerDeserializer.getFloat(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
case DOUBLE: {
- double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getBytes(), 1);
+ double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
default: {
@@ -199,30 +199,30 @@
}
private ComparisonResult compareFloatWithArg(ATypeTag typeTag2) throws AlgebricksException {
- float s = FloatSerializerDeserializer.getFloat(outLeft.getBytes(), 1);
+ float s = FloatSerializerDeserializer.getFloat(outLeft.getByteArray(), 1);
switch (typeTag2) {
case INT8: {
- byte v2 = AInt8SerializerDeserializer.getByte(outRight.getBytes(), 1);
+ byte v2 = AInt8SerializerDeserializer.getByte(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case INT16: {
- short v2 = AInt16SerializerDeserializer.getShort(outRight.getBytes(), 1);
+ short v2 = AInt16SerializerDeserializer.getShort(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case INT32: {
- int v2 = AInt32SerializerDeserializer.getInt(outRight.getBytes(), 1);
+ int v2 = AInt32SerializerDeserializer.getInt(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case INT64: {
- long v2 = AInt64SerializerDeserializer.getLong(outRight.getBytes(), 1);
+ long v2 = AInt64SerializerDeserializer.getLong(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case FLOAT: {
- float v2 = AFloatSerializerDeserializer.getFloat(outRight.getBytes(), 1);
+ float v2 = AFloatSerializerDeserializer.getFloat(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case DOUBLE: {
- double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getBytes(), 1);
+ double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
default: {
@@ -232,30 +232,30 @@
}
private ComparisonResult compareInt64WithArg(ATypeTag typeTag2) throws AlgebricksException {
- long s = AInt64SerializerDeserializer.getLong(outLeft.getBytes(), 1);
+ long s = AInt64SerializerDeserializer.getLong(outLeft.getByteArray(), 1);
switch (typeTag2) {
case INT8: {
- byte v2 = AInt8SerializerDeserializer.getByte(outRight.getBytes(), 1);
+ byte v2 = AInt8SerializerDeserializer.getByte(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case INT16: {
- short v2 = AInt16SerializerDeserializer.getShort(outRight.getBytes(), 1);
+ short v2 = AInt16SerializerDeserializer.getShort(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case INT32: {
- int v2 = AInt32SerializerDeserializer.getInt(outRight.getBytes(), 1);
+ int v2 = AInt32SerializerDeserializer.getInt(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case INT64: {
- long v2 = AInt64SerializerDeserializer.getLong(outRight.getBytes(), 1);
+ long v2 = AInt64SerializerDeserializer.getLong(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case FLOAT: {
- float v2 = AFloatSerializerDeserializer.getFloat(outRight.getBytes(), 1);
+ float v2 = AFloatSerializerDeserializer.getFloat(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case DOUBLE: {
- double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getBytes(), 1);
+ double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
default: {
@@ -265,30 +265,30 @@
}
private ComparisonResult compareInt32WithArg(ATypeTag typeTag2) throws AlgebricksException {
- int s = IntegerSerializerDeserializer.getInt(outLeft.getBytes(), 1);
+ int s = IntegerSerializerDeserializer.getInt(outLeft.getByteArray(), 1);
switch (typeTag2) {
case INT8: {
- byte v2 = AInt8SerializerDeserializer.getByte(outRight.getBytes(), 1);
+ byte v2 = AInt8SerializerDeserializer.getByte(outRight.getByteArray(), 1);
return compareInt(s, v2);
}
case INT16: {
- short v2 = AInt16SerializerDeserializer.getShort(outRight.getBytes(), 1);
+ short v2 = AInt16SerializerDeserializer.getShort(outRight.getByteArray(), 1);
return compareInt(s, v2);
}
case INT32: {
- int v2 = AInt32SerializerDeserializer.getInt(outRight.getBytes(), 1);
+ int v2 = AInt32SerializerDeserializer.getInt(outRight.getByteArray(), 1);
return compareInt(s, v2);
}
case INT64: {
- long v2 = AInt64SerializerDeserializer.getLong(outRight.getBytes(), 1);
+ long v2 = AInt64SerializerDeserializer.getLong(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case FLOAT: {
- float v2 = AFloatSerializerDeserializer.getFloat(outRight.getBytes(), 1);
+ float v2 = AFloatSerializerDeserializer.getFloat(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case DOUBLE: {
- double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getBytes(), 1);
+ double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
default: {
@@ -298,30 +298,30 @@
}
private ComparisonResult compareInt16WithArg(ATypeTag typeTag2) throws AlgebricksException {
- short s = AInt16SerializerDeserializer.getShort(outLeft.getBytes(), 1);
+ short s = AInt16SerializerDeserializer.getShort(outLeft.getByteArray(), 1);
switch (typeTag2) {
case INT8: {
- byte v2 = AInt8SerializerDeserializer.getByte(outRight.getBytes(), 1);
+ byte v2 = AInt8SerializerDeserializer.getByte(outRight.getByteArray(), 1);
return compareShort(s, v2);
}
case INT16: {
- short v2 = AInt16SerializerDeserializer.getShort(outRight.getBytes(), 1);
+ short v2 = AInt16SerializerDeserializer.getShort(outRight.getByteArray(), 1);
return compareShort(s, v2);
}
case INT32: {
- int v2 = AInt32SerializerDeserializer.getInt(outRight.getBytes(), 1);
+ int v2 = AInt32SerializerDeserializer.getInt(outRight.getByteArray(), 1);
return compareInt(s, v2);
}
case INT64: {
- long v2 = AInt64SerializerDeserializer.getLong(outRight.getBytes(), 1);
+ long v2 = AInt64SerializerDeserializer.getLong(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case FLOAT: {
- float v2 = AFloatSerializerDeserializer.getFloat(outRight.getBytes(), 1);
+ float v2 = AFloatSerializerDeserializer.getFloat(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case DOUBLE: {
- double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getBytes(), 1);
+ double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
default: {
@@ -331,30 +331,30 @@
}
private ComparisonResult compareInt8WithArg(ATypeTag typeTag2) throws AlgebricksException {
- byte s = AInt8SerializerDeserializer.getByte(outLeft.getBytes(), 1);
+ byte s = AInt8SerializerDeserializer.getByte(outLeft.getByteArray(), 1);
switch (typeTag2) {
case INT8: {
- byte v2 = AInt8SerializerDeserializer.getByte(outRight.getBytes(), 1);
+ byte v2 = AInt8SerializerDeserializer.getByte(outRight.getByteArray(), 1);
return compareByte(s, v2);
}
case INT16: {
- short v2 = AInt16SerializerDeserializer.getShort(outRight.getBytes(), 1);
+ short v2 = AInt16SerializerDeserializer.getShort(outRight.getByteArray(), 1);
return compareShort(s, v2);
}
case INT32: {
- int v2 = AInt32SerializerDeserializer.getInt(outRight.getBytes(), 1);
+ int v2 = AInt32SerializerDeserializer.getInt(outRight.getByteArray(), 1);
return compareInt(s, v2);
}
case INT64: {
- long v2 = AInt64SerializerDeserializer.getLong(outRight.getBytes(), 1);
+ long v2 = AInt64SerializerDeserializer.getLong(outRight.getByteArray(), 1);
return compareLong(s, v2);
}
case FLOAT: {
- float v2 = AFloatSerializerDeserializer.getFloat(outRight.getBytes(), 1);
+ float v2 = AFloatSerializerDeserializer.getFloat(outRight.getByteArray(), 1);
return compareFloat(s, v2);
}
case DOUBLE: {
- double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getBytes(), 1);
+ double v2 = ADoubleSerializerDeserializer.getDouble(outRight.getByteArray(), 1);
return compareDouble(s, v2);
}
default: {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
index 701c20a4..c379b58 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ABooleanConstructorDescriptor.java
@@ -66,7 +66,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(), TRUE, 0, 6) == 0) {
booleanSerde.serialize(ABoolean.TRUE, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
index 3e64b56..57e6f22 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ACircleConstructorDescriptor.java
@@ -64,7 +64,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
int commaIndex = s.indexOf(',');
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
index 83c9167..ab32e1e 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateConstructorDescriptor.java
@@ -66,7 +66,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
index 2f5a203..1e53cf2 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADateTimeConstructorDescriptor.java
@@ -67,7 +67,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
index 6a89def..271ae78 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADoubleConstructorDescriptor.java
@@ -77,7 +77,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
if (utf8BinaryComparator
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
index b4ded9e..1d3760f 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ADurationConstructorDescriptor.java
@@ -67,7 +67,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
if (serString[offset] == '-') {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
index 6cb6306..53a823c 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AFloatConstructorDescriptor.java
@@ -76,7 +76,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
if (utf8BinaryComparator
.compare(serString, 1, outInput.getLength(), POSITIVE_INF, 0, 5) == 0) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
index c1ac181..ce0bc25 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt16ConstructorDescriptor.java
@@ -65,7 +65,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
value = 0;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
index 2edfbdd..f3e2faf 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt32ConstructorDescriptor.java
@@ -64,7 +64,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
value = 0;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
index 5fd7a3a..a307da2 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt64ConstructorDescriptor.java
@@ -65,7 +65,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
value = 0;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
index 6719fbf..983ffe7 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AInt8ConstructorDescriptor.java
@@ -65,7 +65,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
value = 0;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
index 87063c3..2cc090a 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ALineConstructorDescriptor.java
@@ -64,7 +64,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
int commaIndex = s.indexOf(',');
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java
index 963e95d..a94d581 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ANullConstructorDescriptor.java
@@ -59,7 +59,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
if (utf8BinaryComparator.compare(serString, 1, outInput.getLength(), NULL, 0, 6) == 0) {
nullSerde.serialize(ANull.NULL, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
index 1c0962c..5169362 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APoint3DConstructorDescriptor.java
@@ -63,7 +63,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
int firstCommaIndex = s.indexOf(',');
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
index 378e619..22c89dc 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APointConstructorDescriptor.java
@@ -62,7 +62,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
aPoint.setValue(Double.parseDouble(s.substring(0, s.indexOf(','))),
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
index 8a88c0e..6511b2d 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/APolygonConstructorDescriptor.java
@@ -59,7 +59,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
String[] points = s.split(" ");
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
index c2b98f9..4ffd671 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ARectangleConstructorDescriptor.java
@@ -65,7 +65,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
String s = new String(serString, 3, outInput.getLength() - 3, "UTF-8");
int commaIndex = s.indexOf(',');
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
index 982871d..11aa889 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/AStringConstructorDescriptor.java
@@ -56,9 +56,9 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
- out.write(outInput.getBytes(), outInput.getStartIndex(), outInput.getLength());
+ out.write(outInput.getByteArray(), outInput.getStartOffset(), outInput.getLength());
} else if (serString[0] == SER_NULL_TYPE_TAG)
nullSerde.serialize(ANull.NULL, out);
else
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
index 10b6af5..46f0738 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/constructors/ATimeConstructorDescriptor.java
@@ -66,7 +66,7 @@
try {
outInput.reset();
eval.evaluate(tuple);
- byte[] serString = outInput.getBytes();
+ byte[] serString = outInput.getByteArray();
if (serString[0] == SER_STRING_TYPE_TAG) {
offset = 3;
if (serString[offset + 2] != ':' || serString[offset + 5] != ':')
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
index b0f4580..9225f6a 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AbstractStringContainsEval.java
@@ -39,8 +39,8 @@
evalPattern.evaluate(tuple);
array0.reset();
evalString.evaluate(tuple);
- byte[] b1 = array0.getBytes();
- byte[] b2 = array1.getBytes();
+ byte[] b1 = array0.getByteArray();
+ byte[] b2 = array1.getByteArray();
ABoolean res = findMatch(b1, b2) ? ABoolean.TRUE : ABoolean.FALSE;
try {
boolSerde.serialize(res, dout);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java
index 7e2877c..6a46c6d 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AndDescriptor.java
@@ -70,11 +70,11 @@
for (int i = 0; i < n; i++) {
argOut.reset();
evals[i].evaluate(tuple);
- if (argOut.getBytes()[0] == SER_NULL_TYPE_TAG) {
+ if (argOut.getByteArray()[0] == SER_NULL_TYPE_TAG) {
metNull = true;
continue;
}
- boolean argResult = ABooleanSerializerDeserializer.getBoolean(argOut.getBytes(), 1);
+ boolean argResult = ABooleanSerializerDeserializer.getBoolean(argOut.getByteArray(), 1);
res = res && argResult;
}
if (metNull) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
index 055d94b..aa8b430 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/AnyCollectionMemberDescriptor.java
@@ -81,7 +81,7 @@
try {
outInputList.reset();
evalList.evaluate(tuple);
- byte[] serList = outInputList.getBytes();
+ byte[] serList = outInputList.getByteArray();
if (serList[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java
index 705efab..32498c3 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CastRecordDescriptor.java
@@ -1,16 +1,18 @@
package edu.uci.ics.asterix.runtime.evaluators.functions;
import java.io.DataOutput;
-import java.io.IOException;
import edu.uci.ics.asterix.common.functions.FunctionConstants;
import edu.uci.ics.asterix.om.functions.IFunctionDescriptor;
import edu.uci.ics.asterix.om.functions.IFunctionDescriptorFactory;
import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.IAType;
import edu.uci.ics.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor;
-import edu.uci.ics.asterix.runtime.util.ARecordAccessor;
-import edu.uci.ics.asterix.runtime.util.ARecordCaster;
+import edu.uci.ics.asterix.runtime.pointables.PointableAllocator;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.pointables.cast.ACastVisitor;
import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
import edu.uci.ics.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
import edu.uci.ics.hyracks.algebricks.runtime.base.IEvaluator;
import edu.uci.ics.hyracks.algebricks.runtime.base.IEvaluatorFactory;
@@ -56,18 +58,24 @@
final IEvaluator recEvaluator = recordEvalFactory.createEvaluator(recordBuffer);
return new IEvaluator() {
- final ARecordAccessor recAccessor = new ARecordAccessor(inputType);
- final ARecordCaster caster = new ARecordCaster();
+ // pointable allocator
+ private PointableAllocator allocator = new PointableAllocator();
+ final IVisitablePointable recAccessor = allocator.allocateRecordValue(inputType);
+ final IVisitablePointable resultAccessor = allocator.allocateRecordValue(reqType);
+ final ACastVisitor castVisitor = new ACastVisitor();
+ final Triple<IVisitablePointable, IAType, Boolean> arg = new Triple<IVisitablePointable, IAType, Boolean>(
+ resultAccessor, reqType, Boolean.FALSE);
@Override
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
try {
recordBuffer.reset();
recEvaluator.evaluate(tuple);
- recAccessor.reset(recordBuffer.getBytes(), recordBuffer.getStartIndex(),
- recordBuffer.getLength());
- caster.castRecord(recAccessor, reqType, out);
- } catch (IOException ioe) {
+ recAccessor.set(recordBuffer);
+ recAccessor.accept(castVisitor, arg);
+ out.write(resultAccessor.getByteArray(), resultAccessor.getStartOffset(),
+ resultAccessor.getLength());
+ } catch (Exception ioe) {
throw new AlgebricksException(ioe);
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
index 463dfd2..76c2206 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateCircleDescriptor.java
@@ -64,11 +64,11 @@
eval1.evaluate(tuple);
try {
- aPoint.setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ aPoint.setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X)),
- ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y)));
- aCircle.setValue(aPoint, ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(), 1));
+ aCircle.setValue(aPoint, ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(), 1));
circleSerde.serialize(aCircle, out);
} catch (IOException e1) {
throw new AlgebricksException(e1);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
index fab060d..8ca81cd 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateLineDescriptor.java
@@ -64,13 +64,13 @@
eval1.evaluate(tuple);
try {
- aPoint[0].setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ aPoint[0].setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X)),
- ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y)));
- aPoint[1].setValue(ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ aPoint[1].setValue(ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X)),
- ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y)));
aLine.setValue(aPoint[0], aPoint[1]);
lineSerde.serialize(aLine, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
index f7d284c..2a4a0f1 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePointDescriptor.java
@@ -60,8 +60,8 @@
eval1.evaluate(tuple);
try {
- aPoint.setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(), 1),
- ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(), 1));
+ aPoint.setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(), 1),
+ ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(), 1));
pointSerde.serialize(aPoint, out);
} catch (IOException e1) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
index e0b424f..eb3959e 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreatePolygonDescriptor.java
@@ -62,7 +62,7 @@
outInput.reset();
argEvals[i].evaluate(tuple);
try {
- out.write(outInput.getBytes(), outInput.getStartIndex() + 1, outInput.getLength() - 1);
+ out.write(outInput.getByteArray(), outInput.getStartOffset() + 1, outInput.getLength() - 1);
} catch (IOException e) {
throw new AlgebricksException(e);
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
index 1e4a98a..9d7bb5f 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/CreateRectangleDescriptor.java
@@ -63,13 +63,13 @@
eval1.evaluate(tuple);
try {
- aPoint[0].setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ aPoint[0].setValue(ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X)),
- ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y)));
- aPoint[1].setValue(ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ aPoint[1].setValue(ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X)),
- ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y)));
if (aPoint[0].getX() > aPoint[1].getX() || aPoint[0].getY() > aPoint[1].getY()) {
throw new IllegalArgumentException(
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
index cb89147..550cfc4 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/EditDistanceCheckDescriptor.java
@@ -75,7 +75,7 @@
super.runArgEvals(tuple);
int edThreshStart = argOut.getLength();
edThreshEval.evaluate(tuple);
- edThresh = IntegerSerializerDeserializer.getInt(argOut.getBytes(), edThreshStart + typeIndicatorSize);
+ edThresh = IntegerSerializerDeserializer.getInt(argOut.getByteArray(), edThreshStart + typeIndicatorSize);
}
@Override
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java
index 67a8dfa..a0b4af0 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/FieldAccessByNameDescriptor.java
@@ -85,7 +85,7 @@
eval0.evaluate(tuple);
outInput1.reset();
eval1.evaluate(tuple);
- byte[] serRecord = outInput0.getBytes();
+ byte[] serRecord = outInput0.getByteArray();
if (serRecord[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
@@ -97,7 +97,7 @@
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serRecord[0]));
}
- byte[] serFldName = outInput1.getBytes();
+ byte[] serFldName = outInput1.getByteArray();
fieldValueOffset = ARecordSerializerDeserializer.getFieldOffsetByName(serRecord, serFldName);
if (fieldValueOffset < 0) {
out.writeByte(ATypeTag.NULL.serialize());
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java
index 4ce843b..34ea593 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/GetItemDescriptor.java
@@ -87,7 +87,7 @@
evalList.evaluate(tuple);
outInputIdx.reset();
evalIdx.evaluate(tuple);
- byte[] serOrderedList = outInputList.getBytes();
+ byte[] serOrderedList = outInputList.getByteArray();
if (serOrderedList[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
@@ -99,7 +99,7 @@
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serOrderedList[0]));
}
- itemIndex = IntegerSerializerDeserializer.getInt(outInputIdx.getBytes(), 1);
+ itemIndex = IntegerSerializerDeserializer.getInt(outInputIdx.getByteArray(), 1);
if (itemIndex >= AOrderedListSerializerDeserializer.getNumberOfItems(serOrderedList)) {
out.writeByte(SER_NULL_TYPE_TAG);
return;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
index 478316f..941bd53 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/InjectFailureDescriptor.java
@@ -55,9 +55,9 @@
// evaluator the failure condition
argOut.reset();
evals[1].evaluate(tuple);
- ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[0]);
+ ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
if (typeTag == ATypeTag.BOOLEAN) {
- boolean argResult = ABooleanSerializerDeserializer.getBoolean(argOut.getBytes(), 1);
+ boolean argResult = ABooleanSerializerDeserializer.getBoolean(argOut.getByteArray(), 1);
if (argResult)
throw new AlgebricksException("Injecting a intended failure");
}
@@ -65,7 +65,7 @@
// evaluate the real evaluator
argOut.reset();
evals[0].evaluate(tuple);
- output.getDataOutput().write(argOut.getBytes(), argOut.getStartIndex(), argOut.getLength());
+ output.getDataOutput().write(argOut.getByteArray(), argOut.getStartOffset(), argOut.getLength());
} catch (IOException e) {
throw new AlgebricksException(e);
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java
index 59bce2d..9583c75 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/IsNullDescriptor.java
@@ -49,7 +49,7 @@
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
argOut.reset();
eval.evaluate(tuple);
- boolean isNull = argOut.getBytes()[argOut.getStartIndex()] == SER_NULL_TYPE_TAG;
+ boolean isNull = argOut.getByteArray()[argOut.getStartOffset()] == SER_NULL_TYPE_TAG;
ABoolean res = isNull ? ABoolean.TRUE : ABoolean.FALSE;
try {
AObjectSerializerDeserializer.INSTANCE.serialize(res, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java
index 769fdb7..b87eb37 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LenDescriptor.java
@@ -67,7 +67,7 @@
inputVal.reset();
evalList.evaluate(tuple);
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
if (serList[0] == SER_NULL_TYPE_TAG) {
try {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java
index 1090742..3a4af19 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/LikeDescriptor.java
@@ -91,7 +91,7 @@
try {
array0.reset();
evalPattern.evaluate(tuple);
- if (array0.getBytes()[0] == SER_NULL_TYPE_TAG) {
+ if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, dout);
return;
}
@@ -100,7 +100,7 @@
first = false;
newPattern = true;
} else {
- int c = strComp.compare(array0.getBytes(), array0.getStartIndex(), array0.getLength(),
+ int c = strComp.compare(array0.getByteArray(), array0.getStartOffset(), array0.getLength(),
lastPattern.getByteArray(), 0, lastPattern.size());
if (c != 0) {
newPattern = true;
@@ -108,7 +108,7 @@
}
if (newPattern) {
lastPattern.reset();
- lastPattern.write(array0.getBytes(), array0.getStartIndex(), array0.getLength());
+ lastPattern.write(array0.getByteArray(), array0.getStartOffset(), array0.getLength());
// ! object creation !
DataInputStream di = new DataInputStream(new ByteArrayInputStream(
lastPattern.getByteArray()));
@@ -118,7 +118,7 @@
}
array0.reset();
evalString.evaluate(tuple);
- if (array0.getBytes()[0] == SER_NULL_TYPE_TAG) {
+ if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, dout);
return;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java
index 1e4cb3e..0ddf9f6 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NotDescriptor.java
@@ -68,11 +68,11 @@
argOut.reset();
eval.evaluate(tuple);
try {
- if (argOut.getBytes()[0] == SER_BOOLEAN_TYPE_TAG) {
- boolean argRes = ABooleanSerializerDeserializer.getBoolean(argOut.getBytes(), 1);
+ if (argOut.getByteArray()[0] == SER_BOOLEAN_TYPE_TAG) {
+ boolean argRes = ABooleanSerializerDeserializer.getBoolean(argOut.getByteArray(), 1);
ABoolean aResult = argRes ? (ABoolean.FALSE) : (ABoolean.TRUE);
booleanSerde.serialize(aResult, out);
- } else if (argOut.getBytes()[0] == SER_NULL_TYPE_TAG)
+ } else if (argOut.getByteArray()[0] == SER_NULL_TYPE_TAG)
nullSerde.serialize(ANull.NULL, out);
else
throw new AlgebricksException(errorMessage);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
index 405a006..b525bc3 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericAddDescriptor.java
@@ -88,36 +88,36 @@
evalLeft.evaluate(tuple);
else
evalRight.evaluate(tuple);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[0]);
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8 = true;
- operands[i] = AInt8SerializerDeserializer.getByte(argOut.getBytes(), 1);
+ operands[i] = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
break;
}
case INT16: {
metInt16 = true;
- operands[i] = AInt16SerializerDeserializer.getShort(argOut.getBytes(), 1);
+ operands[i] = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
break;
}
case INT32: {
metInt32 = true;
- operands[i] = AInt32SerializerDeserializer.getInt(argOut.getBytes(), 1);
+ operands[i] = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
break;
}
case INT64: {
metInt64 = true;
- operands[i] = AInt64SerializerDeserializer.getLong(argOut.getBytes(), 1);
+ operands[i] = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
break;
}
case FLOAT: {
metFloat = true;
- operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getBytes(), 1);
+ operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
break;
}
case DOUBLE: {
metDouble = true;
- operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(), 1);
+ operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
break;
}
case NULL: {
@@ -131,7 +131,7 @@
: "Right"
+ " Operand of Addition can not be "
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut
- .getBytes()[0]));
+ .getByteArray()[0]));
}
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
index a6d0f47..39c1fbf 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericDivideDescriptor.java
@@ -88,36 +88,36 @@
evalLeft.evaluate(tuple);
else
evalRight.evaluate(tuple);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[0]);
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8 = true;
- operands[i] = AInt8SerializerDeserializer.getByte(argOut.getBytes(), 1);
+ operands[i] = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
break;
}
case INT16: {
metInt16 = true;
- operands[i] = AInt16SerializerDeserializer.getShort(argOut.getBytes(), 1);
+ operands[i] = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
break;
}
case INT32: {
metInt32 = true;
- operands[i] = AInt32SerializerDeserializer.getInt(argOut.getBytes(), 1);
+ operands[i] = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
break;
}
case INT64: {
metInt64 = true;
- operands[i] = AInt64SerializerDeserializer.getLong(argOut.getBytes(), 1);
+ operands[i] = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
break;
}
case FLOAT: {
metFloat = true;
- operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getBytes(), 1);
+ operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
break;
}
case DOUBLE: {
metDouble = true;
- operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(), 1);
+ operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
break;
}
case NULL: {
@@ -131,7 +131,7 @@
: "Right"
+ " Operand of Division can not be "
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut
- .getBytes()[0]));
+ .getByteArray()[0]));
}
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
index 33a1a90..ed7626e 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericMultiplyDescriptor.java
@@ -88,36 +88,36 @@
evalLeft.evaluate(tuple);
else
evalRight.evaluate(tuple);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[0]);
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8 = true;
- operands[i] = AInt8SerializerDeserializer.getByte(argOut.getBytes(), 1);
+ operands[i] = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
break;
}
case INT16: {
metInt16 = true;
- operands[i] = AInt16SerializerDeserializer.getShort(argOut.getBytes(), 1);
+ operands[i] = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
break;
}
case INT32: {
metInt32 = true;
- operands[i] = AInt32SerializerDeserializer.getInt(argOut.getBytes(), 1);
+ operands[i] = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
break;
}
case INT64: {
metInt64 = true;
- operands[i] = AInt64SerializerDeserializer.getLong(argOut.getBytes(), 1);
+ operands[i] = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
break;
}
case FLOAT: {
metFloat = true;
- operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getBytes(), 1);
+ operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
break;
}
case DOUBLE: {
metDouble = true;
- operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(), 1);
+ operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
break;
}
case NULL: {
@@ -131,7 +131,7 @@
: "Right"
+ " Operand of Multiplication can not be "
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut
- .getBytes()[0]));
+ .getByteArray()[0]));
}
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
index ffed14e..77ae37c 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericSubtractDescriptor.java
@@ -88,36 +88,36 @@
evalLeft.evaluate(tuple);
else
evalRight.evaluate(tuple);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[0]);
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]);
switch (typeTag) {
case INT8: {
metInt8 = true;
- operands[i] = AInt8SerializerDeserializer.getByte(argOut.getBytes(), 1);
+ operands[i] = AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1);
break;
}
case INT16: {
metInt16 = true;
- operands[i] = AInt16SerializerDeserializer.getShort(argOut.getBytes(), 1);
+ operands[i] = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
break;
}
case INT32: {
metInt32 = true;
- operands[i] = AInt32SerializerDeserializer.getInt(argOut.getBytes(), 1);
+ operands[i] = AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1);
break;
}
case INT64: {
metInt64 = true;
- operands[i] = AInt64SerializerDeserializer.getLong(argOut.getBytes(), 1);
+ operands[i] = AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1);
break;
}
case FLOAT: {
metFloat = true;
- operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getBytes(), 1);
+ operands[i] = AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1);
break;
}
case DOUBLE: {
metDouble = true;
- operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(), 1);
+ operands[i] = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1);
break;
}
case NULL: {
@@ -131,7 +131,7 @@
: "Right"
+ " Operand of Substraction can not be "
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut
- .getBytes()[0]));
+ .getByteArray()[0]));
}
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
index cd234cb..73181d6 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/NumericUnaryMinusDescriptor.java
@@ -80,44 +80,44 @@
argOut.reset();
eval.evaluate(tuple);
try {
- if (argOut.getBytes()[0] == serNullTypeTag) {
+ if (argOut.getByteArray()[0] == serNullTypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ANULL);
serde.serialize(ANull.NULL, out);
return;
- } else if (argOut.getBytes()[0] == serInt8TypeTag) {
+ } else if (argOut.getByteArray()[0] == serInt8TypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT8);
- aInt8.setValue((byte) -AInt8SerializerDeserializer.getByte(argOut.getBytes(), 1));
+ aInt8.setValue((byte) -AInt8SerializerDeserializer.getByte(argOut.getByteArray(), 1));
serde.serialize(aInt8, out);
- } else if (argOut.getBytes()[0] == serInt16TypeTag) {
+ } else if (argOut.getByteArray()[0] == serInt16TypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT16);
- aInt16.setValue((short) -AInt16SerializerDeserializer.getShort(argOut.getBytes(), 1));
+ aInt16.setValue((short) -AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1));
serde.serialize(aInt16, out);
- } else if (argOut.getBytes()[0] == serInt32TypeTag) {
+ } else if (argOut.getByteArray()[0] == serInt32TypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT32);
- aInt32.setValue(-AInt32SerializerDeserializer.getInt(argOut.getBytes(), 1));
+ aInt32.setValue(-AInt32SerializerDeserializer.getInt(argOut.getByteArray(), 1));
serde.serialize(aInt32, out);
- } else if (argOut.getBytes()[0] == serInt64TypeTag) {
+ } else if (argOut.getByteArray()[0] == serInt64TypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AINT64);
- aInt64.setValue(-AInt64SerializerDeserializer.getLong(argOut.getBytes(), 1));
+ aInt64.setValue(-AInt64SerializerDeserializer.getLong(argOut.getByteArray(), 1));
serde.serialize(aInt64, out);
- } else if (argOut.getBytes()[0] == serFloatTypeTag) {
+ } else if (argOut.getByteArray()[0] == serFloatTypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.AFLOAT);
- aFloat.setValue(-AFloatSerializerDeserializer.getFloat(argOut.getBytes(), 1));
+ aFloat.setValue(-AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), 1));
serde.serialize(aFloat, out);
- } else if (argOut.getBytes()[0] == serDoubleTypeTag) {
+ } else if (argOut.getByteArray()[0] == serDoubleTypeTag) {
serde = AqlSerializerDeserializerProvider.INSTANCE
.getSerializerDeserializer(BuiltinType.ADOUBLE);
- aDouble.setValue(-ADoubleSerializerDeserializer.getDouble(argOut.getBytes(), 1));
+ aDouble.setValue(-ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(), 1));
serde.serialize(aDouble, out);
} else {
throw new NotImplementedException("Unary minus is not implemented for "
- + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getBytes()[0]));
+ + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argOut.getByteArray()[0]));
}
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java
index aeb6b15..cc53a04 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OpenRecordConstructorDescriptor.java
@@ -81,7 +81,7 @@
evalNames[i].evaluate(tuple);
recBuilder.addField(fieldNameBuffer, fieldValueBuffer);
} else {
- if (fieldValueBuffer.getBytes()[0] != ATypeTag.NULL.serialize()) {
+ if (fieldValueBuffer.getByteArray()[0] != ATypeTag.NULL.serialize()) {
recBuilder.addField(closedFieldId, fieldValueBuffer);
}
closedFieldId++;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java
index 837d54a..c310164 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/OrDescriptor.java
@@ -69,11 +69,11 @@
for (int i = 0; i < n; i++) {
argOut.reset();
evals[i].evaluate(tuple);
- if (argOut.getBytes()[0] == SER_NULL_TYPE_TAG) {
+ if (argOut.getByteArray()[0] == SER_NULL_TYPE_TAG) {
metNull = true;
continue;
}
- boolean argResult = ABooleanSerializerDeserializer.getBoolean(argOut.getBytes(), 1);
+ boolean argResult = ABooleanSerializerDeserializer.getBoolean(argOut.getByteArray(), 1);
if (argResult == true) {
res = true;
break;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
index 880e84e..3e70f3c 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenDescriptor.java
@@ -65,19 +65,19 @@
// length
inputVal.reset();
evalLen.evaluate(tuple);
- int length = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int length = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
// similarity threshold
inputVal.reset();
evalThreshold.evaluate(tuple);
float similarityThreshold = (float) ADoubleSerializerDeserializer.getDouble(
- inputVal.getBytes(), 1);
+ inputVal.getByteArray(), 1);
// similarity name
inputVal.reset();
evalSimilarity.evaluate(tuple);
SimilarityFilters similarityFilters = similarityFiltersCache.get(similarityThreshold,
- inputVal.getBytes());
+ inputVal.getByteArray());
int prefixLength = similarityFilters.getPrefixLength(length);
res.setValue(prefixLength);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
index ab95a36..8021c2d 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/PrefixLenJaccardDescriptor.java
@@ -64,12 +64,12 @@
// length
inputVal.reset();
evalLen.evaluate(tuple);
- int length = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int length = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
// similarity threshold
inputVal.reset();
evalThreshold.evaluate(tuple);
- float similarityThreshold = (float) AFloatSerializerDeserializer.getFloat(inputVal.getBytes(),
+ float similarityThreshold = (float) AFloatSerializerDeserializer.getFloat(inputVal.getByteArray(),
1);
if (similarityThreshold != similarityThresholdCache || similarityFilters == null) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java
index 2a415e4..596439e 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/RegExpDescriptor.java
@@ -91,7 +91,7 @@
try {
array0.reset();
evalPattern.evaluate(tuple);
- if (array0.getBytes()[0] == SER_NULL_TYPE_TAG) {
+ if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, dout);
return;
}
@@ -100,7 +100,7 @@
first = false;
newPattern = true;
} else {
- int c = strComp.compare(array0.getBytes(), array0.getStartIndex(), array0.getLength(),
+ int c = strComp.compare(array0.getByteArray(), array0.getStartOffset(), array0.getLength(),
lastPattern.getByteArray(), 0, lastPattern.size());
if (c != 0) {
newPattern = true;
@@ -108,7 +108,7 @@
}
if (newPattern) {
lastPattern.reset();
- lastPattern.write(array0.getBytes(), array0.getStartIndex(), array0.getLength());
+ lastPattern.write(array0.getByteArray(), array0.getStartOffset(), array0.getLength());
// ! object creation !
DataInputStream di = new DataInputStream(new ByteArrayInputStream(
lastPattern.getByteArray()));
@@ -118,7 +118,7 @@
}
array0.reset();
evalString.evaluate(tuple);
- if (array0.getBytes()[0] == SER_NULL_TYPE_TAG) {
+ if (array0.getByteArray()[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, dout);
return;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
index 85adfe1..90788a6 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityDescriptor.java
@@ -85,21 +85,21 @@
inputVal.reset();
evalThreshold.evaluate(tuple);
float similarityThreshold = (float) ADoubleSerializerDeserializer.getDouble(
- inputVal.getBytes(), 1);
+ inputVal.getByteArray(), 1);
// similarity name
inputVal.reset();
evalSimilarity.evaluate(tuple);
SimilarityFilters similarityFilters = similarityFiltersCache.get(similarityThreshold,
- inputVal.getBytes());
+ inputVal.getByteArray());
inputVal.reset();
evalLen1.evaluate(tuple);
- int length1 = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int length1 = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
inputVal.reset();
evalLen2.evaluate(tuple);
- int length2 = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int length2 = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
float sim = 0;
@@ -114,7 +114,7 @@
inputVal.reset();
evalTokens1.evaluate(tuple);
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
if (serList[0] != SER_ORDEREDLIST_TYPE_TAG && serList[0] != SER_UNORDEREDLIST_TYPE_TAG) {
throw new AlgebricksException("Scan collection is not defined for values of type"
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[0]));
@@ -123,7 +123,7 @@
int lengthTokens1;
if (serList[0] == SER_ORDEREDLIST_TYPE_TAG) {
lengthTokens1 = AOrderedListSerializerDeserializer
- .getNumberOfItems(inputVal.getBytes());
+ .getNumberOfItems(inputVal.getByteArray());
// read tokens
for (i = 0; i < lengthTokens1; i++) {
int itemOffset;
@@ -136,7 +136,7 @@
}
} else {
lengthTokens1 = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal
- .getBytes());
+ .getByteArray());
// read tokens
for (i = 0; i < lengthTokens1; i++) {
int itemOffset;
@@ -158,7 +158,7 @@
inputVal.reset();
evalTokens2.evaluate(tuple);
- serList = inputVal.getBytes();
+ serList = inputVal.getByteArray();
if (serList[0] != SER_ORDEREDLIST_TYPE_TAG && serList[0] != SER_UNORDEREDLIST_TYPE_TAG) {
throw new AlgebricksException("Scan collection is not defined for values of type"
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[0]));
@@ -167,7 +167,7 @@
int lengthTokens2;
if (serList[0] == SER_ORDEREDLIST_TYPE_TAG) {
lengthTokens2 = AOrderedListSerializerDeserializer
- .getNumberOfItems(inputVal.getBytes());
+ .getNumberOfItems(inputVal.getByteArray());
// read tokens
for (i = 0; i < lengthTokens2; i++) {
int itemOffset;
@@ -180,7 +180,7 @@
}
} else {
lengthTokens2 = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal
- .getBytes());
+ .getByteArray());
// read tokens
for (i = 0; i < lengthTokens2; i++) {
int itemOffset;
@@ -200,7 +200,7 @@
// -- - token prefix - --
inputVal.reset();
evalTokenPrefix.evaluate(tuple);
- int tokenPrefix = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ int tokenPrefix = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
//
// -- - position filter - --
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java
index 3021717..971bfee 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SimilarityJaccardCheckDescriptor.java
@@ -79,7 +79,7 @@
super.runArgEvals(tuple);
int jaccThreshStart = argOut.getLength();
jaccThreshEval.evaluate(tuple);
- jaccThresh = (float) AFloatSerializerDeserializer.getFloat(argOut.getBytes(), jaccThreshStart
+ jaccThresh = (float) AFloatSerializerDeserializer.getFloat(argOut.getByteArray(), jaccThreshStart
+ typeIndicatorSize);
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
index 91496fd..7736fa7 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialAreaDescriptor.java
@@ -55,36 +55,36 @@
eval.evaluate(tuple);
try {
- byte[] bytes = argOut.getBytes();
+ byte[] bytes = argOut.getByteArray();
ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes[0]);
double area = 0.0;
switch (tag) {
case POLYGON:
- int numOfPoints = AInt16SerializerDeserializer.getShort(argOut.getBytes(), 1);
+ int numOfPoints = AInt16SerializerDeserializer.getShort(argOut.getByteArray(), 1);
if (numOfPoints < 3) {
throw new AlgebricksException("Polygon must have at least 3 points");
}
- area = Math.abs(SpatialUtils.polygonArea(argOut.getBytes(), numOfPoints));
+ area = Math.abs(SpatialUtils.polygonArea(argOut.getByteArray(), numOfPoints));
break;
case CIRCLE:
- double radius = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(),
+ double radius = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(),
ACircleSerializerDeserializer.getRadiusOffset());
area = SpatialUtils.pi() * radius * radius;
break;
case RECTANGLE:
- double x1 = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(),
+ double x1 = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(),
ARectangleSerializerDeserializer
.getBottomLeftCoordinateOffset(Coordinate.X));
- double y1 = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(),
+ double y1 = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(),
ARectangleSerializerDeserializer
.getBottomLeftCoordinateOffset(Coordinate.Y));
- double x2 = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(),
+ double x2 = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(),
ARectangleSerializerDeserializer
.getUpperRightCoordinateOffset(Coordinate.X));
- double y2 = ADoubleSerializerDeserializer.getDouble(argOut.getBytes(),
+ double y2 = ADoubleSerializerDeserializer.getDouble(argOut.getByteArray(),
ARectangleSerializerDeserializer
.getUpperRightCoordinateOffset(Coordinate.Y));
area = (x2 - x1) * (y2 - y1);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
index 85586d8..5182ee8 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialCellDescriptor.java
@@ -75,20 +75,20 @@
eval3.evaluate(tuple);
try {
- ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput0.getBytes()[0]);
+ ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput0.getByteArray()[0]);
if (tag == ATypeTag.POINT) {
- double xLoc = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double xLoc = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X));
- double yLoc = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double yLoc = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y));
- double xOrigin = ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ double xOrigin = ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X));
- double yOrigin = ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ double yOrigin = ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y));
- double xInc = ADoubleSerializerDeserializer.getDouble(outInput2.getBytes(), 1);
- double yInc = ADoubleSerializerDeserializer.getDouble(outInput3.getBytes(), 1);
+ double xInc = ADoubleSerializerDeserializer.getDouble(outInput2.getByteArray(), 1);
+ double yInc = ADoubleSerializerDeserializer.getDouble(outInput3.getByteArray(), 1);
double x = xOrigin + (Math.floor((xLoc - xOrigin) / xInc)) * xInc;
double y = yOrigin + (Math.floor((yLoc - yOrigin) / yInc)) * yInc;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
index 3ea1994..3a474ca 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialDistanceDescriptor.java
@@ -56,20 +56,20 @@
eval1.evaluate(tuple);
try {
- byte[] bytes0 = outInput0.getBytes();
- byte[] bytes1 = outInput1.getBytes();
+ byte[] bytes0 = outInput0.getByteArray();
+ byte[] bytes1 = outInput1.getByteArray();
ATypeTag tag0 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes0[0]);
ATypeTag tag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(bytes1[0]);
double distance = 0.0;
if (tag0 == ATypeTag.POINT) {
if (tag1 == ATypeTag.POINT) {
- double x1 = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double x1 = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X));
- double y1 = ADoubleSerializerDeserializer.getDouble(outInput0.getBytes(),
+ double y1 = ADoubleSerializerDeserializer.getDouble(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y));
- double x2 = ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ double x2 = ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X));
- double y2 = ADoubleSerializerDeserializer.getDouble(outInput1.getBytes(),
+ double y2 = ADoubleSerializerDeserializer.getDouble(outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y));
distance = Math.sqrt(Math.pow(x2 - x1, 2) + Math.pow(y2 - y1, 2));
} else {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
index 272e7e0..07eeb10 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SpatialIntersectDescriptor.java
@@ -751,20 +751,20 @@
try {
boolean res = false;
- ATypeTag tag0 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput0.getBytes()[0]);
- ATypeTag tag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput1.getBytes()[0]);
+ ATypeTag tag0 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput0.getByteArray()[0]);
+ ATypeTag tag1 = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(outInput1.getByteArray()[0]);
switch (tag0) {
case POINT:
switch (tag1) {
case POINT:
- if (ascDoubleComp.compare(outInput0.getBytes(),
+ if (ascDoubleComp.compare(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X), 8,
- outInput1.getBytes(),
+ outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.X), 8) == 0) {
- if (ascDoubleComp.compare(outInput0.getBytes(),
+ if (ascDoubleComp.compare(outInput0.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y),
- 8, outInput1.getBytes(),
+ 8, outInput1.getByteArray(),
APointSerializerDeserializer.getCoordinateOffset(Coordinate.Y),
8) == 0) {
res = true;
@@ -772,16 +772,16 @@
}
break;
case LINE:
- res = pointOnLine(outInput1.getBytes(), outInput0.getBytes());
+ res = pointOnLine(outInput1.getByteArray(), outInput0.getByteArray());
break;
case POLYGON:
- res = pointInPolygon(outInput0.getBytes(), outInput1.getBytes());
+ res = pointInPolygon(outInput0.getByteArray(), outInput1.getByteArray());
break;
case CIRCLE:
- res = pointInCircle(outInput0.getBytes(), outInput1.getBytes());
+ res = pointInCircle(outInput0.getByteArray(), outInput1.getByteArray());
break;
case RECTANGLE:
- res = pointInRectangle(outInput0.getBytes(), outInput1.getBytes());
+ res = pointInRectangle(outInput0.getByteArray(), outInput1.getByteArray());
break;
case NULL:
res = false;
@@ -796,45 +796,45 @@
case LINE:
switch (tag1) {
case POINT:
- res = pointOnLine(outInput0.getBytes(), outInput1.getBytes());
+ res = pointOnLine(outInput0.getByteArray(), outInput1.getByteArray());
break;
case LINE:
double startX1 = ADoubleSerializerDeserializer.getDouble(outInput0
- .getBytes(), ALineSerializerDeserializer
+ .getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.X));
double startY1 = ADoubleSerializerDeserializer.getDouble(outInput0
- .getBytes(), ALineSerializerDeserializer
+ .getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.Y));
double endX1 = ADoubleSerializerDeserializer.getDouble(
- outInput0.getBytes(), ALineSerializerDeserializer
+ outInput0.getByteArray(), ALineSerializerDeserializer
.getEndPointCoordinateOffset(Coordinate.X));
double endY1 = ADoubleSerializerDeserializer.getDouble(
- outInput0.getBytes(), ALineSerializerDeserializer
+ outInput0.getByteArray(), ALineSerializerDeserializer
.getEndPointCoordinateOffset(Coordinate.Y));
double startX2 = ADoubleSerializerDeserializer.getDouble(outInput1
- .getBytes(), ALineSerializerDeserializer
+ .getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.X));
double startY2 = ADoubleSerializerDeserializer.getDouble(outInput1
- .getBytes(), ALineSerializerDeserializer
+ .getByteArray(), ALineSerializerDeserializer
.getStartPointCoordinateOffset(Coordinate.Y));
double endX2 = ADoubleSerializerDeserializer.getDouble(
- outInput1.getBytes(), ALineSerializerDeserializer
+ outInput1.getByteArray(), ALineSerializerDeserializer
.getEndPointCoordinateOffset(Coordinate.X));
double endY2 = ADoubleSerializerDeserializer.getDouble(
- outInput1.getBytes(), ALineSerializerDeserializer
+ outInput1.getByteArray(), ALineSerializerDeserializer
.getEndPointCoordinateOffset(Coordinate.Y));
res = lineLineIntersection(startX1, startY1, endX1, endY1, startX2,
startY2, endX2, endY2);
break;
case POLYGON:
- res = linePolygonIntersection(outInput0.getBytes(), outInput1.getBytes());
+ res = linePolygonIntersection(outInput0.getByteArray(), outInput1.getByteArray());
break;
case CIRCLE:
- res = lineCircleIntersection(outInput0.getBytes(), outInput1.getBytes());
+ res = lineCircleIntersection(outInput0.getByteArray(), outInput1.getByteArray());
break;
case RECTANGLE:
- res = lineRectangleIntersection(outInput0.getBytes(), outInput1.getBytes());
+ res = lineRectangleIntersection(outInput0.getByteArray(), outInput1.getByteArray());
break;
case NULL:
res = false;
@@ -849,26 +849,26 @@
case POLYGON:
switch (tag1) {
case POINT:
- res = pointInPolygon(outInput1.getBytes(), outInput0.getBytes());
+ res = pointInPolygon(outInput1.getByteArray(), outInput0.getByteArray());
break;
case LINE:
- res = linePolygonIntersection(outInput1.getBytes(), outInput0.getBytes());
+ res = linePolygonIntersection(outInput1.getByteArray(), outInput0.getByteArray());
break;
case POLYGON:
int numOfPoints0 = AInt16SerializerDeserializer.getShort(
- outInput0.getBytes(),
+ outInput0.getByteArray(),
APolygonSerializerDeserializer.getNumberOfPointsOffset());
int numOfPoints1 = AInt16SerializerDeserializer.getShort(
- outInput1.getBytes(),
+ outInput1.getByteArray(),
APolygonSerializerDeserializer.getNumberOfPointsOffset());
if (numOfPoints0 < 3 || numOfPoints1 < 3) {
throw new AlgebricksException("Polygon must have at least 3 points.");
}
- getCounterClockWisePolygon(outInput0.getBytes(), pointsOffsets0,
+ getCounterClockWisePolygon(outInput0.getByteArray(), pointsOffsets0,
numOfPoints0);
- getCounterClockWisePolygon(outInput1.getBytes(), pointsOffsets1,
+ getCounterClockWisePolygon(outInput1.getByteArray(), pointsOffsets1,
numOfPoints1);
int nonSimplePolygonDetection0 = 2 * numOfPoints0;
int nonSimplePolygonDetection1 = 2 * numOfPoints1;
@@ -880,7 +880,7 @@
trianglesX1.reset();
trianglesY1.reset();
while (true) {
- middleVertex1 = triangulatePolygon(outInput1.getBytes(), numOfPoints1,
+ middleVertex1 = triangulatePolygon(outInput1.getByteArray(), numOfPoints1,
pointsOffsets1, trianglesX1, trianglesY1, numOfTriangles1,
nonSimplePolygonDetection1, middleVertex1);
@@ -896,7 +896,7 @@
trianglesX0.reset();
trianglesY0.reset();
while (true) {
- middleVertex0 = triangulatePolygon(outInput0.getBytes(), numOfPoints0,
+ middleVertex0 = triangulatePolygon(outInput0.getByteArray(), numOfPoints0,
pointsOffsets0, trianglesX0, trianglesY0, numOfTriangles0,
nonSimplePolygonDetection0, middleVertex0);
@@ -929,11 +929,11 @@
}
break;
case CIRCLE:
- res = polygonCircleIntersection(outInput0.getBytes(), outInput1.getBytes());
+ res = polygonCircleIntersection(outInput0.getByteArray(), outInput1.getByteArray());
break;
case RECTANGLE:
- res = rectanglePolygonIntersection(outInput1.getBytes(),
- outInput0.getBytes());
+ res = rectanglePolygonIntersection(outInput1.getByteArray(),
+ outInput0.getByteArray());
break;
case NULL:
res = false;
@@ -948,20 +948,20 @@
case CIRCLE:
switch (tag1) {
case POINT:
- res = pointInCircle(outInput1.getBytes(), outInput0.getBytes());
+ res = pointInCircle(outInput1.getByteArray(), outInput0.getByteArray());
break;
case LINE:
- res = lineCircleIntersection(outInput1.getBytes(), outInput0.getBytes());
+ res = lineCircleIntersection(outInput1.getByteArray(), outInput0.getByteArray());
break;
case POLYGON:
- res = polygonCircleIntersection(outInput1.getBytes(), outInput0.getBytes());
+ res = polygonCircleIntersection(outInput1.getByteArray(), outInput0.getByteArray());
break;
case CIRCLE:
- res = circleCircleIntersection(outInput0.getBytes(), outInput1.getBytes());
+ res = circleCircleIntersection(outInput0.getByteArray(), outInput1.getByteArray());
break;
case RECTANGLE:
- res = rectangleCircleIntersection(outInput1.getBytes(),
- outInput0.getBytes());
+ res = rectangleCircleIntersection(outInput1.getByteArray(),
+ outInput0.getByteArray());
break;
case NULL:
res = false;
@@ -976,22 +976,22 @@
case RECTANGLE:
switch (tag1) {
case POINT:
- res = pointInRectangle(outInput1.getBytes(), outInput0.getBytes());
+ res = pointInRectangle(outInput1.getByteArray(), outInput0.getByteArray());
break;
case LINE:
- res = lineRectangleIntersection(outInput1.getBytes(), outInput0.getBytes());
+ res = lineRectangleIntersection(outInput1.getByteArray(), outInput0.getByteArray());
break;
case POLYGON:
- res = rectanglePolygonIntersection(outInput0.getBytes(),
- outInput1.getBytes());
+ res = rectanglePolygonIntersection(outInput0.getByteArray(),
+ outInput1.getByteArray());
break;
case CIRCLE:
- res = rectangleCircleIntersection(outInput0.getBytes(),
- outInput1.getBytes());
+ res = rectangleCircleIntersection(outInput0.getByteArray(),
+ outInput1.getByteArray());
break;
case RECTANGLE:
- triangulateRectangle(outInput0.getBytes(), trianglesX0, trianglesY0);
- triangulateRectangle(outInput1.getBytes(), trianglesX1, trianglesY1);
+ triangulateRectangle(outInput0.getByteArray(), trianglesX0, trianglesY0);
+ triangulateRectangle(outInput1.getByteArray(), trianglesX1, trianglesY1);
boolean intersect = false;
// 2 triangles in a rectangle
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java
index c2678b5..8f3ca50 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SubstringDescriptor.java
@@ -49,14 +49,14 @@
public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
argOut.reset();
evalStart.evaluate(tuple);
- int start = IntegerSerializerDeserializer.getInt(argOut.getBytes(), 1) - 1;
+ int start = IntegerSerializerDeserializer.getInt(argOut.getByteArray(), 1) - 1;
argOut.reset();
evalLen.evaluate(tuple);
- int len = IntegerSerializerDeserializer.getInt(argOut.getBytes(), 1);
+ int len = IntegerSerializerDeserializer.getInt(argOut.getByteArray(), 1);
argOut.reset();
evalString.evaluate(tuple);
- byte[] bytes = argOut.getBytes();
+ byte[] bytes = argOut.getByteArray();
int utflen = UTF8StringPointable.getUTFLen(bytes, 1);
int sStart = 3;
int c = 0;
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java
index 1c1ca13..93ad6fb 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/SwitchCaseDescriptor.java
@@ -71,7 +71,7 @@
if (equals(condOut, caseOut)) {
argOut.reset();
evals[i + 1].evaluate(tuple);
- output.getDataOutput().write(argOut.getBytes(), argOut.getStartIndex(),
+ output.getDataOutput().write(argOut.getByteArray(), argOut.getStartOffset(),
argOut.getLength());
return;
}
@@ -79,7 +79,7 @@
// the default case
argOut.reset();
evals[n - 1].evaluate(tuple);
- output.getDataOutput().write(argOut.getBytes(), argOut.getStartIndex(), argOut.getLength());
+ output.getDataOutput().write(argOut.getByteArray(), argOut.getStartOffset(), argOut.getLength());
} catch (HyracksDataException hde) {
throw new AlgebricksException(hde);
} catch (IOException ioe) {
@@ -88,11 +88,11 @@
}
private boolean equals(ArrayBackedValueStorage out1, ArrayBackedValueStorage out2) {
- if (out1.getStartIndex() != out2.getStartIndex() || out1.getLength() != out2.getLength())
+ if (out1.getStartOffset() != out2.getStartOffset() || out1.getLength() != out2.getLength())
return false;
- byte[] data1 = out1.getBytes();
- byte[] data2 = out2.getBytes();
- for (int i = out1.getStartIndex(); i < out1.getLength(); i++) {
+ byte[] data1 = out1.getByteArray();
+ byte[] data2 = out2.getByteArray();
+ for (int i = out1.getStartOffset(); i < out1.getLength(); i++) {
if (data1[i] != data2[i]) {
return false;
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/YearDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/YearDescriptor.java
index 65be0bd..03a5ddc 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/YearDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/evaluators/functions/YearDescriptor.java
@@ -72,7 +72,7 @@
try {
out1.reset();
eval1.evaluate(tuple);
- byte[] dateArray = out1.getBytes();
+ byte[] dateArray = out1.getByteArray();
if (dateArray[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
index 0fa62aa..efff2cd 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/formats/NonTaggedDataFormat.java
@@ -366,7 +366,7 @@
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
- IEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getBytes(),
+ IEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(),
abvs.getLength()));
IEvaluatorFactory evalFactory = new FieldAccessByIndexEvalFactory(recordEvalFactory,
fldIndexEvalFactory, recType);
@@ -392,7 +392,7 @@
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
- IEvaluatorFactory dimensionEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs1.getBytes(),
+ IEvaluatorFactory dimensionEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs1.getByteArray(),
abvs1.getLength()));
for (int i = 0; i < numOfFields; i++) {
@@ -404,7 +404,7 @@
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
- IEvaluatorFactory coordinateEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs2.getBytes(),
+ IEvaluatorFactory coordinateEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs2.getByteArray(),
abvs2.getLength()));
evalFactories[i] = new CreateMBREvalFactory(evalFactory, dimensionEvalFactory, coordinateEvalFactory);
@@ -431,7 +431,7 @@
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
- IEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getBytes(),
+ IEvaluatorFactory fldIndexEvalFactory = new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(),
abvs.getLength()));
IEvaluatorFactory evalFactory = new FieldAccessByIndexEvalFactory(recordEvalFactory,
fldIndexEvalFactory, recType);
@@ -569,7 +569,7 @@
} catch (HyracksDataException e) {
throw new AlgebricksException(e);
}
- return new ConstantEvalFactory(Arrays.copyOf(abvs.getBytes(), abvs.getLength()));
+ return new ConstantEvalFactory(Arrays.copyOf(abvs.getByteArray(), abvs.getLength()));
}
@Override
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java
index 46d1ba3..43556f2 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmSchemafullRecordParserFactory.java
@@ -25,8 +25,8 @@
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADateTimeSerializerDeserializer;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ADurationSerializerDeserializer;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ALineSerializerDeserializer;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.APointSerializerDeserializer;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.APoint3DSerializerDeserializer;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.APointSerializerDeserializer;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.APolygonSerializerDeserializer;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ARectangleSerializerDeserializer;
import edu.uci.ics.asterix.dataflow.data.nontagged.serde.ATimeSerializerDeserializer;
@@ -793,11 +793,11 @@
token = nextToken();
this.admFromLexerStream(token, fieldType, fieldValueBuffer.getDataOutput(), false);
if (openRecordField) {
- if (fieldValueBuffer.getBytes()[0] != ATypeTag.NULL.serialize())
+ if (fieldValueBuffer.getByteArray()[0] != ATypeTag.NULL.serialize())
recBuilder.addField(fieldNameBuffer, fieldValueBuffer);
} else if (recType.getFieldTypes()[fieldId].getTypeTag() == ATypeTag.UNION) {
if (NonTaggedFormatUtil.isOptionalField((AUnionType) recType.getFieldTypes()[fieldId])) {
- if (fieldValueBuffer.getBytes()[0] != ATypeTag.NULL.serialize()) {
+ if (fieldValueBuffer.getByteArray()[0] != ATypeTag.NULL.serialize()) {
recBuilder.addField(fieldId, fieldValueBuffer);
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java
index 3b52315..573eb78 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/operators/file/AdmTupleParser.java
@@ -468,14 +468,14 @@
this.admFromLexerStream(token, fieldType,
fieldValueBuffer.getDataOutput(), false);
if (openRecordField) {
- if (fieldValueBuffer.getBytes()[0] != ATypeTag.NULL
+ if (fieldValueBuffer.getByteArray()[0] != ATypeTag.NULL
.serialize())
recBuilder.addField(fieldNameBuffer, fieldValueBuffer);
} else if (recType.getFieldTypes()[fieldId].getTypeTag() == ATypeTag.UNION) {
if (NonTaggedFormatUtil
.isOptionalField((AUnionType) recType
.getFieldTypes()[fieldId])) {
- if (fieldValueBuffer.getBytes()[0] != ATypeTag.NULL
+ if (fieldValueBuffer.getByteArray()[0] != ATypeTag.NULL
.serialize()) {
recBuilder.addField(fieldId, fieldValueBuffer);
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AFlatValuePointable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AFlatValuePointable.java
new file mode 100644
index 0000000..a3547a4
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AFlatValuePointable.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.pointables.visitor.IVisitablePointableVisitor;
+import edu.uci.ics.asterix.runtime.util.container.IObjectFactory;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
+
+/**
+ * This class represents a flat field, e.g., int field, string field, and
+ * so on, based on a binary representation.
+ */
+public class AFlatValuePointable extends AbstractVisitablePointable {
+
+ /**
+ * DO NOT allow to create AFlatValuePointable object arbitrarily, force to
+ * use object pool based allocator. The factory is not public so that it
+ * cannot called in other places than PointableAllocator.
+ */
+ static IObjectFactory<IVisitablePointable, IAType> FACTORY = new IObjectFactory<IVisitablePointable, IAType>() {
+ public AFlatValuePointable create(IAType type) {
+ return new AFlatValuePointable();
+ }
+ };
+
+ /**
+ * private constructor, to prevent arbitrary creation
+ */
+ private AFlatValuePointable() {
+
+ }
+
+ @Override
+ public boolean equals(Object o) {
+ if (!(o instanceof IValueReference))
+ return false;
+
+ // get right raw data
+ IValueReference ivf = (IValueReference) o;
+ byte[] odata = ivf.getByteArray();
+ int ostart = ivf.getStartOffset();
+ int olen = ivf.getLength();
+
+ // get left raw data
+ byte[] data = getByteArray();
+ int start = getStartOffset();
+ int len = getLength();
+
+ // bytes length should be equal
+ if (len != olen)
+ return false;
+
+ // check each byte
+ for (int i = 0; i < len; i++) {
+ if (data[start + i] != odata[ostart + i])
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public <R, T> R accept(IVisitablePointableVisitor<R, T> vistor, T tag) throws AsterixException {
+ return vistor.visit(this, tag);
+ }
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AListPointable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AListPointable.java
new file mode 100644
index 0000000..6f85694
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AListPointable.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables;
+
+import java.io.DataOutputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.pointables.visitor.IVisitablePointableVisitor;
+import edu.uci.ics.asterix.runtime.util.ResettableByteArrayOutputStream;
+import edu.uci.ics.asterix.runtime.util.container.IObjectFactory;
+
+/**
+ * This class interprets the binary data representation of a list, one can
+ * call getItems and getItemTags to get pointable objects for items and item
+ * type tags.
+ *
+ */
+public class AListPointable extends AbstractVisitablePointable {
+
+ /**
+ * DO NOT allow to create AListPointable object arbitrarily, force to use
+ * object pool based allocator, in order to have object reuse.
+ */
+ static IObjectFactory<IVisitablePointable, IAType> FACTORY = new IObjectFactory<IVisitablePointable, IAType>() {
+ public IVisitablePointable create(IAType type) {
+ return new AListPointable((AbstractCollectionType) type);
+ }
+ };
+
+ private final List<IVisitablePointable> items = new ArrayList<IVisitablePointable>();
+ private final List<IVisitablePointable> itemTags = new ArrayList<IVisitablePointable>();
+ private final PointableAllocator allocator = new PointableAllocator();
+
+ private final ResettableByteArrayOutputStream dataBos = new ResettableByteArrayOutputStream();
+ private final DataOutputStream dataDos = new DataOutputStream(dataBos);
+
+ private IAType itemType;
+ private ATypeTag itemTag;
+ private boolean typedItemList = false;
+
+ /**
+ * private constructor, to prevent constructing it arbitrarily
+ *
+ * @param inputType
+ */
+ private AListPointable(AbstractCollectionType inputType) {
+ if (inputType != null && inputType.getItemType() != null) {
+ itemType = inputType.getItemType();
+ if (itemType.getTypeTag() == ATypeTag.ANY) {
+ typedItemList = false;
+ } else {
+ typedItemList = true;
+ itemTag = inputType.getItemType().getTypeTag();
+ }
+ } else {
+ this.typedItemList = false;
+ }
+ }
+
+ private void reset() {
+ allocator.reset();
+ items.clear();
+ itemTags.clear();
+ dataBos.reset();
+ }
+
+ @Override
+ public void set(byte[] b, int s, int len) {
+ reset();
+
+ int numberOfitems = AInt32SerializerDeserializer.getInt(b, s + 6);
+ int itemOffset;
+ if (typedItemList) {
+ switch (itemTag) {
+ case STRING:
+ case RECORD:
+ case ORDEREDLIST:
+ case UNORDEREDLIST:
+ case ANY:
+ itemOffset = s + 10 + (numberOfitems * 4);
+ break;
+ default:
+ itemOffset = s + 10;
+ }
+ } else {
+ itemOffset = s + 10 + (numberOfitems * 4);
+ }
+ int itemLength = 0;
+ try {
+ if (typedItemList) {
+ for (int i = 0; i < numberOfitems; i++) {
+ itemLength = NonTaggedFormatUtil.getFieldValueLength(b, itemOffset, itemTag, false);
+ IVisitablePointable tag = allocator.allocateEmpty();
+ IVisitablePointable item = allocator.allocateFieldValue(itemType);
+
+ // set item type tag
+ int start = dataBos.size();
+ dataDos.writeByte(itemTag.serialize());
+ int end = dataBos.size();
+ tag.set(dataBos.getByteArray(), start, end - start);
+ itemTags.add(tag);
+
+ // set item value
+ start = dataBos.size();
+ dataDos.writeByte(itemTag.serialize());
+ dataDos.write(b, itemOffset, itemLength);
+ end = dataBos.size();
+ item.set(dataBos.getByteArray(), start, end - start);
+ itemOffset += itemLength;
+ items.add(item);
+ }
+ } else {
+ for (int i = 0; i < numberOfitems; i++) {
+ itemTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[itemOffset]);
+ itemLength = NonTaggedFormatUtil.getFieldValueLength(b, itemOffset, itemTag, true) + 1;
+ IVisitablePointable tag = allocator.allocateEmpty();
+ IVisitablePointable item = allocator.allocateFieldValue(itemType);
+
+ // set item type tag
+ int start = dataBos.size();
+ dataDos.writeByte(itemTag.serialize());
+ int end = dataBos.size();
+ tag.set(dataBos.getByteArray(), start, end - start);
+ itemTags.add(tag);
+
+ // open part field already include the type tag
+ item.set(b, itemOffset, itemLength);
+ itemOffset += itemLength;
+ items.add(item);
+ }
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ @Override
+ public <R, T> R accept(IVisitablePointableVisitor<R, T> vistor, T tag) throws AsterixException {
+ return vistor.visit(this, tag);
+ }
+
+ public List<IVisitablePointable> getItems() {
+ return items;
+ }
+
+ public List<IVisitablePointable> getItemTags() {
+ return itemTags;
+ }
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/ARecordPointable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/ARecordPointable.java
new file mode 100644
index 0000000..5904170
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/ARecordPointable.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables;
+
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.dataflow.data.nontagged.AqlNullWriterFactory;
+import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.pointables.visitor.IVisitablePointableVisitor;
+import edu.uci.ics.asterix.runtime.util.ResettableByteArrayOutputStream;
+import edu.uci.ics.asterix.runtime.util.container.IObjectFactory;
+import edu.uci.ics.hyracks.api.dataflow.value.INullWriter;
+
+/**
+ * This class interprets the binary data representation of a record. One can
+ * call getFieldNames, getFieldTypeTags and getFieldValues to get pointable
+ * objects for field names, field type tags, and field values.
+ *
+ */
+public class ARecordPointable extends AbstractVisitablePointable {
+
+ /**
+ * DO NOT allow to create ARecordPointable object arbitrarily, force to use
+ * object pool based allocator, in order to have object reuse
+ */
+ static IObjectFactory<IVisitablePointable, IAType> FACTORY = new IObjectFactory<IVisitablePointable, IAType>() {
+ public IVisitablePointable create(IAType type) {
+ return new ARecordPointable((ARecordType) type);
+ }
+ };
+
+ // access results: field names, field types, and field values
+ private final List<IVisitablePointable> fieldNames = new ArrayList<IVisitablePointable>();
+ private final List<IVisitablePointable> fieldTypeTags = new ArrayList<IVisitablePointable>();
+ private final List<IVisitablePointable> fieldValues = new ArrayList<IVisitablePointable>();
+
+ // pointable allocator
+ private final PointableAllocator allocator = new PointableAllocator();
+
+ private final ResettableByteArrayOutputStream typeBos = new ResettableByteArrayOutputStream();
+ private final DataOutputStream typeDos = new DataOutputStream(typeBos);
+
+ private final ResettableByteArrayOutputStream dataBos = new ResettableByteArrayOutputStream();
+ private final DataOutputStream dataDos = new DataOutputStream(dataBos);
+
+ private final ARecordType inputRecType;
+
+ private final int numberOfSchemaFields;
+ private final int[] fieldOffsets;
+ private final IVisitablePointable nullReference = AFlatValuePointable.FACTORY.create(null);
+
+ private int closedPartTypeInfoSize = 0;
+ private int offsetArrayOffset;
+ private ATypeTag typeTag;
+
+ /**
+ * private constructor, to prevent constructing it arbitrarily
+ *
+ * @param inputType
+ */
+ private ARecordPointable(ARecordType inputType) {
+ this.inputRecType = inputType;
+ IAType[] fieldTypes = inputType.getFieldTypes();
+ String[] fieldNameStrs = inputType.getFieldNames();
+ numberOfSchemaFields = fieldTypes.length;
+
+ // initialize the buffer for closed parts(fieldName bytes+ type bytes) +
+ // constant(null bytes)
+ typeBos.reset();
+ try {
+ for (int i = 0; i < numberOfSchemaFields; i++) {
+ ATypeTag ftypeTag = fieldTypes[i].getTypeTag();
+
+ if (fieldTypes[i].getTypeTag() == ATypeTag.UNION
+ && NonTaggedFormatUtil.isOptionalField((AUnionType) fieldTypes[i]))
+ // optional field: add the embedded non-null type tag
+ ftypeTag = ((AUnionType) fieldTypes[i]).getUnionList()
+ .get(NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST).getTypeTag();
+
+ // add type tag Reference
+ int tagStart = typeBos.size();
+ typeDos.writeByte(ftypeTag.serialize());
+ int tagEnd = typeBos.size();
+ IVisitablePointable typeTagReference = AFlatValuePointable.FACTORY.create(null);
+ typeTagReference.set(typeBos.getByteArray(), tagStart, tagEnd - tagStart);
+ fieldTypeTags.add(typeTagReference);
+
+ // add type name Reference (including a astring type tag)
+ int nameStart = typeBos.size();
+ typeDos.writeByte(ATypeTag.STRING.serialize());
+ typeDos.writeUTF(fieldNameStrs[i]);
+ int nameEnd = typeBos.size();
+ IVisitablePointable typeNameReference = AFlatValuePointable.FACTORY.create(null);
+ typeNameReference.set(typeBos.getByteArray(), nameStart, nameEnd - nameStart);
+ fieldNames.add(typeNameReference);
+ }
+
+ // initialize a constant: null value bytes reference
+ int nullFieldStart = typeBos.size();
+ INullWriter nullWriter = AqlNullWriterFactory.INSTANCE.createNullWriter();
+ nullWriter.writeNull(typeDos);
+ int nullFieldEnd = typeBos.size();
+ nullReference.set(typeBos.getByteArray(), nullFieldStart, nullFieldEnd - nullFieldStart);
+ } catch (IOException e) {
+ throw new IllegalStateException(e);
+ }
+ closedPartTypeInfoSize = typeBos.size();
+ fieldOffsets = new int[numberOfSchemaFields];
+ }
+
+ private void reset() {
+ typeBos.reset(closedPartTypeInfoSize);
+ dataBos.reset(0);
+ // reset the allocator
+ allocator.reset();
+
+ // clean up the returned containers
+ for (int i = fieldNames.size() - 1; i >= numberOfSchemaFields; i--)
+ fieldNames.remove(i);
+ for (int i = fieldTypeTags.size() - 1; i >= numberOfSchemaFields; i--)
+ fieldTypeTags.remove(i);
+ fieldValues.clear();
+ }
+
+ @Override
+ public void set(byte[] b, int start, int len) {
+ // clear the previous states
+ reset();
+ super.set(b, start, len);
+
+ boolean isExpanded = false;
+ int openPartOffset = 0;
+ int s = start;
+ int recordOffset = s;
+ if (inputRecType == null) {
+ openPartOffset = s + AInt32SerializerDeserializer.getInt(b, s + 6);
+ s += 8;
+ isExpanded = true;
+ } else {
+ if (inputRecType.isOpen()) {
+ isExpanded = b[s + 5] == 1 ? true : false;
+ if (isExpanded) {
+ openPartOffset = s + AInt32SerializerDeserializer.getInt(b, s + 6);
+ s += 10;
+ } else {
+ s += 6;
+ }
+ } else {
+ s += 5;
+ }
+ }
+ try {
+ if (numberOfSchemaFields > 0) {
+ s += 4;
+ int nullBitMapOffset = 0;
+ boolean hasNullableFields = NonTaggedFormatUtil.hasNullableField(inputRecType);
+ if (hasNullableFields) {
+ nullBitMapOffset = s;
+ offsetArrayOffset = s
+ + (this.numberOfSchemaFields % 8 == 0 ? numberOfSchemaFields / 8
+ : numberOfSchemaFields / 8 + 1);
+ } else {
+ offsetArrayOffset = s;
+ }
+ for (int i = 0; i < numberOfSchemaFields; i++) {
+ fieldOffsets[i] = AInt32SerializerDeserializer.getInt(b, offsetArrayOffset) + recordOffset;
+ offsetArrayOffset += 4;
+ }
+ for (int fieldNumber = 0; fieldNumber < numberOfSchemaFields; fieldNumber++) {
+ if (hasNullableFields) {
+ byte b1 = b[nullBitMapOffset + fieldNumber / 8];
+ int p = 1 << (7 - (fieldNumber % 8));
+ if ((b1 & p) == 0) {
+ // set null value (including type tag inside)
+ fieldValues.add(nullReference);
+ continue;
+ }
+ }
+ IAType[] fieldTypes = inputRecType.getFieldTypes();
+ int fieldValueLength = 0;
+
+ IAType fieldType = fieldTypes[fieldNumber];
+ if (fieldTypes[fieldNumber].getTypeTag() == ATypeTag.UNION) {
+ if (NonTaggedFormatUtil.isOptionalField((AUnionType) fieldTypes[fieldNumber])) {
+ fieldType = ((AUnionType) fieldTypes[fieldNumber]).getUnionList().get(
+ NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+ typeTag = fieldType.getTypeTag();
+ fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffsets[fieldNumber],
+ typeTag, false);
+ }
+ } else {
+ typeTag = fieldTypes[fieldNumber].getTypeTag();
+ fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffsets[fieldNumber],
+ typeTag, false);
+ }
+ // set field value (including the type tag)
+ int fstart = dataBos.size();
+ dataDos.writeByte(typeTag.serialize());
+ dataDos.write(b, fieldOffsets[fieldNumber], fieldValueLength);
+ int fend = dataBos.size();
+ IVisitablePointable fieldValue = allocator.allocateFieldValue(fieldType);
+ fieldValue.set(dataBos.getByteArray(), fstart, fend - fstart);
+ fieldValues.add(fieldValue);
+ }
+ }
+ if (isExpanded) {
+ int numberOfOpenFields = AInt32SerializerDeserializer.getInt(b, openPartOffset);
+ int fieldOffset = openPartOffset + 4 + (8 * numberOfOpenFields);
+ for (int i = 0; i < numberOfOpenFields; i++) {
+ // set the field name (including a type tag, which is
+ // astring)
+ int fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffset, ATypeTag.STRING,
+ false);
+ int fnstart = dataBos.size();
+ dataDos.writeByte(ATypeTag.STRING.serialize());
+ dataDos.write(b, fieldOffset, fieldValueLength);
+ int fnend = dataBos.size();
+ IVisitablePointable fieldName = allocator.allocateEmpty();
+ fieldName.set(dataBos.getByteArray(), fnstart, fnend - fnstart);
+ fieldNames.add(fieldName);
+ fieldOffset += fieldValueLength;
+
+ // set the field type tag
+ IVisitablePointable fieldTypeTag = allocator.allocateEmpty();
+ fieldTypeTag.set(b, fieldOffset, 1);
+ fieldTypeTags.add(fieldTypeTag);
+ typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[fieldOffset]);
+
+ // set the field value (already including type tag)
+ fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffset, typeTag, true) + 1;
+
+ // allocate
+ IVisitablePointable fieldValueAccessor = allocator.allocateFieldValue(typeTag);
+ fieldValueAccessor.set(b, fieldOffset, fieldValueLength);
+ fieldValues.add(fieldValueAccessor);
+ fieldOffset += fieldValueLength;
+ }
+ }
+ } catch (Exception e) {
+ throw new IllegalStateException(e);
+ }
+ }
+
+ public List<IVisitablePointable> getFieldNames() {
+ return fieldNames;
+ }
+
+ public List<IVisitablePointable> getFieldTypeTags() {
+ return fieldTypeTags;
+ }
+
+ public List<IVisitablePointable> getFieldValues() {
+ return fieldValues;
+ }
+
+ @Override
+ public <R, T> R accept(IVisitablePointableVisitor<R, T> vistor, T tag) throws AsterixException {
+ return vistor.visit(this, tag);
+ }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AbstractVisitablePointable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AbstractVisitablePointable.java
new file mode 100644
index 0000000..8cfe661
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/AbstractVisitablePointable.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables;
+
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
+
+/**
+ * This class implements several "routine" methods in IVisitablePointable
+ * interface, so that subclasses do not need to repeat the same code.
+ *
+ */
+public abstract class AbstractVisitablePointable implements IVisitablePointable {
+
+ private byte[] data;
+ private int start;
+ private int len;
+
+ @Override
+ public byte[] getByteArray() {
+ return data;
+ }
+
+ @Override
+ public int getLength() {
+ return len;
+ }
+
+ @Override
+ public int getStartOffset() {
+ return start;
+ }
+
+ @Override
+ public void set(byte[] b, int start, int len) {
+ this.data = b;
+ this.start = start;
+ this.len = len;
+ }
+
+ @Override
+ public void set(IValueReference ivf) {
+ set(ivf.getByteArray(), ivf.getStartOffset(), ivf.getLength());
+ }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/PointableAllocator.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/PointableAllocator.java
new file mode 100644
index 0000000..b6116be
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/PointableAllocator.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables;
+
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.pointables.base.DefaultOpenFieldType;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.util.container.IObjectPool;
+import edu.uci.ics.asterix.runtime.util.container.ListObjectPool;
+
+/**
+ * This class is the ONLY place to create IVisitablePointable object instances,
+ * to enforce use of an object pool.
+ */
+public class PointableAllocator {
+
+ private IObjectPool<IVisitablePointable, IAType> flatValueAllocator = new ListObjectPool<IVisitablePointable, IAType>(
+ AFlatValuePointable.FACTORY);
+ private IObjectPool<IVisitablePointable, IAType> recordValueAllocator = new ListObjectPool<IVisitablePointable, IAType>(
+ ARecordPointable.FACTORY);
+ private IObjectPool<IVisitablePointable, IAType> listValueAllocator = new ListObjectPool<IVisitablePointable, IAType>(
+ AListPointable.FACTORY);
+
+ public IVisitablePointable allocateEmpty() {
+ return flatValueAllocator.allocate(null);
+ }
+
+ /**
+ * allocate closed part value pointable
+ *
+ * @param type
+ * @return the pointable object
+ */
+ public IVisitablePointable allocateFieldValue(IAType type) {
+ if (type == null)
+ return flatValueAllocator.allocate(null);
+ else if (type.getTypeTag().equals(ATypeTag.RECORD))
+ return recordValueAllocator.allocate(type);
+ else if (type.getTypeTag().equals(ATypeTag.UNORDEREDLIST) || type.getTypeTag().equals(ATypeTag.ORDEREDLIST))
+ return listValueAllocator.allocate(type);
+ else
+ return flatValueAllocator.allocate(null);
+ }
+
+ /**
+ * allocate open part value pointable
+ *
+ * @param typeTag
+ * @return the pointable object
+ */
+ public IVisitablePointable allocateFieldValue(ATypeTag typeTag) {
+ if (typeTag == null)
+ return flatValueAllocator.allocate(null);
+ else if (typeTag.equals(ATypeTag.RECORD))
+ return recordValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_RECORD_TYPE);
+ else if (typeTag.equals(ATypeTag.UNORDEREDLIST))
+ return listValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_AUNORDERED_LIST_TYPE);
+ else if (typeTag.equals(ATypeTag.ORDEREDLIST))
+ return listValueAllocator.allocate(DefaultOpenFieldType.NESTED_OPEN_AORDERED_LIST_TYPE);
+ else
+ return flatValueAllocator.allocate(null);
+ }
+
+ public IVisitablePointable allocateListValue(IAType type) {
+ return listValueAllocator.allocate(type);
+ }
+
+ public IVisitablePointable allocateRecordValue(IAType type) {
+ return recordValueAllocator.allocate(type);
+ }
+
+ public void reset() {
+ flatValueAllocator.reset();
+ recordValueAllocator.reset();
+ listValueAllocator.reset();
+ }
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/base/DefaultOpenFieldType.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/base/DefaultOpenFieldType.java
new file mode 100644
index 0000000..987ac02
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/base/DefaultOpenFieldType.java
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables.base;
+
+import edu.uci.ics.asterix.om.types.AOrderedListType;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnorderedListType;
+import edu.uci.ics.asterix.om.types.BuiltinType;
+import edu.uci.ics.asterix.om.types.IAType;
+
+/**
+ * This class serves as the repository for the default record type and list type
+ * fields in the open part, e.g., a "record" (nested) field in the open part is
+ * always a fully open one, and a "list" field in the open part is always a list
+ * of "ANY".
+ *
+ */
+public class DefaultOpenFieldType {
+
+ // nested open field rec type
+ public static ARecordType NESTED_OPEN_RECORD_TYPE = new ARecordType("nested-open", new String[] {},
+ new IAType[] {}, true);
+
+ // nested open list type
+ public static AOrderedListType NESTED_OPEN_AORDERED_LIST_TYPE = new AOrderedListType(BuiltinType.ANY,
+ "nested-ordered-list");
+
+ // nested open list type
+ public static AUnorderedListType NESTED_OPEN_AUNORDERED_LIST_TYPE = new AUnorderedListType(BuiltinType.ANY,
+ "nested-unordered-list");
+
+ public static IAType getDefaultOpenFieldType(ATypeTag tag) {
+ if (tag.equals(ATypeTag.RECORD))
+ return NESTED_OPEN_RECORD_TYPE;
+ if (tag.equals(ATypeTag.ORDEREDLIST))
+ return NESTED_OPEN_AORDERED_LIST_TYPE;
+ if (tag.equals(ATypeTag.UNORDEREDLIST))
+ return NESTED_OPEN_AUNORDERED_LIST_TYPE;
+ else
+ return null;
+ }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/base/IVisitablePointable.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/base/IVisitablePointable.java
new file mode 100644
index 0000000..28c61c2
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/base/IVisitablePointable.java
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables.base;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.runtime.pointables.visitor.IVisitablePointableVisitor;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+
+/**
+ * This interface extends IPointable with a visitor interface in order to ease
+ * programming for recursive record structures.
+ */
+public interface IVisitablePointable extends IPointable {
+
+ public <R, T> R accept(IVisitablePointableVisitor<R, T> vistor, T tag) throws AsterixException;
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/ACastVisitor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/ACastVisitor.java
new file mode 100644
index 0000000..822e37c
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/ACastVisitor.java
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables.cast;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.types.ARecordType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.pointables.AFlatValuePointable;
+import edu.uci.ics.asterix.runtime.pointables.AListPointable;
+import edu.uci.ics.asterix.runtime.pointables.ARecordPointable;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.pointables.visitor.IVisitablePointableVisitor;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+
+/**
+ * This class is a IVisitablePointableVisitor implementation which recursively
+ * visit a given record, list or flat value of a given type, and cast it to a
+ * specified type. For example:
+ *
+ * A record { "hobby": {{"music", "coding"}}, "id": "001", "name":
+ * "Person Three"} which confirms to closed type ( id: string, name: string,
+ * hobby: {{string}}? ) can be casted to a open type (id: string )
+ *
+ * Since the open/closed part of a record has a completely different underlying
+ * memory/storage layout, the visitor will change the layout as specified at
+ * runtime.
+ */
+public class ACastVisitor implements IVisitablePointableVisitor<Void, Triple<IVisitablePointable, IAType, Boolean>> {
+
+ private final Map<IVisitablePointable, ARecordCaster> raccessorToCaster = new HashMap<IVisitablePointable, ARecordCaster>();
+ private final Map<IVisitablePointable, AListCaster> laccessorToCaster = new HashMap<IVisitablePointable, AListCaster>();
+
+ @Override
+ public Void visit(AListPointable accessor, Triple<IVisitablePointable, IAType, Boolean> arg)
+ throws AsterixException {
+ AListCaster caster = laccessorToCaster.get(accessor);
+ if (caster == null) {
+ caster = new AListCaster();
+ laccessorToCaster.put(accessor, caster);
+ }
+ try {
+ caster.castList(accessor, arg.first, (AbstractCollectionType) arg.second, this);
+ } catch (Exception e) {
+ throw new AsterixException(e);
+ }
+ return null;
+ }
+
+ @Override
+ public Void visit(ARecordPointable accessor, Triple<IVisitablePointable, IAType, Boolean> arg)
+ throws AsterixException {
+ ARecordCaster caster = raccessorToCaster.get(accessor);
+ if (caster == null) {
+ caster = new ARecordCaster();
+ raccessorToCaster.put(accessor, caster);
+ }
+ try {
+ caster.castRecord(accessor, arg.first, (ARecordType) arg.second, this);
+ } catch (Exception e) {
+ throw new AsterixException(e);
+ }
+ return null;
+ }
+
+ @Override
+ public Void visit(AFlatValuePointable accessor, Triple<IVisitablePointable, IAType, Boolean> arg) {
+ // set the pointer for result
+ arg.first.set(accessor);
+ return null;
+ }
+
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/AListCaster.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/AListCaster.java
new file mode 100644
index 0000000..e10fb72
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/AListCaster.java
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables.cast;
+
+import java.io.DataOutput;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.List;
+
+import edu.uci.ics.asterix.builders.OrderedListBuilder;
+import edu.uci.ics.asterix.builders.UnorderedListBuilder;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.om.types.AOrderedListType;
+import edu.uci.ics.asterix.om.types.ATypeTag;
+import edu.uci.ics.asterix.om.types.AUnorderedListType;
+import edu.uci.ics.asterix.om.types.AbstractCollectionType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
+import edu.uci.ics.asterix.om.types.IAType;
+import edu.uci.ics.asterix.runtime.pointables.AListPointable;
+import edu.uci.ics.asterix.runtime.pointables.PointableAllocator;
+import edu.uci.ics.asterix.runtime.pointables.base.DefaultOpenFieldType;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.util.ResettableByteArrayOutputStream;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
+
+/**
+ * This class is to do the runtime type cast for a list. It is ONLY visible to
+ * ACastVisitor.
+ */
+class AListCaster {
+ // pointable allocator
+ private final PointableAllocator allocator = new PointableAllocator();
+
+ // for storing the cast result
+ private final IVisitablePointable itemTempReference = allocator.allocateEmpty();
+ private final Triple<IVisitablePointable, IAType, Boolean> itemVisitorArg = new Triple<IVisitablePointable, IAType, Boolean>(
+ itemTempReference, null, null);
+
+ private final UnorderedListBuilder unOrderedListBuilder = new UnorderedListBuilder();
+ private final OrderedListBuilder orderedListBuilder = new OrderedListBuilder();
+
+ private final ResettableByteArrayOutputStream dataBos = new ResettableByteArrayOutputStream();
+ private final DataOutput dataDos = new DataOutputStream(dataBos);
+ private IAType reqItemType;
+
+ public AListCaster() {
+
+ }
+
+ public void castList(AListPointable listAccessor, IVisitablePointable resultAccessor,
+ AbstractCollectionType reqType, ACastVisitor visitor) throws IOException, AsterixException {
+ if (reqType.getTypeTag().equals(ATypeTag.UNORDEREDLIST)) {
+ unOrderedListBuilder.reset((AUnorderedListType) reqType);
+ }
+ if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
+ orderedListBuilder.reset((AOrderedListType) reqType);
+ }
+ dataBos.reset();
+
+ List<IVisitablePointable> itemTags = listAccessor.getItemTags();
+ List<IVisitablePointable> items = listAccessor.getItems();
+
+ int start = dataBos.size();
+ for (int i = 0; i < items.size(); i++) {
+ IVisitablePointable itemTypeTag = itemTags.get(i);
+ IVisitablePointable item = items.get(i);
+ ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(itemTypeTag.getByteArray()[itemTypeTag
+ .getStartOffset()]);
+ if (reqItemType == null || reqItemType.getTypeTag().equals(ATypeTag.ANY)) {
+ itemVisitorArg.second = DefaultOpenFieldType.getDefaultOpenFieldType(typeTag);
+ item.accept(visitor, itemVisitorArg);
+ } else {
+ if (typeTag != reqItemType.getTypeTag())
+ throw new AsterixException("mismatched item type");
+ itemVisitorArg.second = reqItemType;
+ item.accept(visitor, itemVisitorArg);
+ }
+ if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
+ orderedListBuilder.addItem(itemVisitorArg.first);
+ }
+ if (reqType.getTypeTag().equals(ATypeTag.UNORDEREDLIST)) {
+ unOrderedListBuilder.addItem(itemVisitorArg.first);
+ }
+ }
+ if (reqType.getTypeTag().equals(ATypeTag.ORDEREDLIST)) {
+ orderedListBuilder.write(dataDos, true);
+ }
+ if (reqType.getTypeTag().equals(ATypeTag.UNORDEREDLIST)) {
+ unOrderedListBuilder.write(dataDos, true);
+ }
+ int end = dataBos.size();
+ resultAccessor.set(dataBos.getByteArray(), start, end - start);
+ }
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ARecordCaster.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/ARecordCaster.java
similarity index 61%
rename from asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ARecordCaster.java
rename to asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/ARecordCaster.java
index 505e769..50c8b37 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ARecordCaster.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/cast/ARecordCaster.java
@@ -13,7 +13,7 @@
* limitations under the License.
*/
-package edu.uci.ics.asterix.runtime.util;
+package edu.uci.ics.asterix.runtime.pointables.cast;
import java.io.DataOutput;
import java.io.DataOutputStream;
@@ -22,19 +22,58 @@
import java.util.List;
import edu.uci.ics.asterix.builders.RecordBuilder;
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
import edu.uci.ics.asterix.dataflow.data.nontagged.AqlNullWriterFactory;
import edu.uci.ics.asterix.om.types.ARecordType;
import edu.uci.ics.asterix.om.types.ATypeTag;
import edu.uci.ics.asterix.om.types.AUnionType;
+import edu.uci.ics.asterix.om.types.EnumDeserializer;
import edu.uci.ics.asterix.om.types.IAType;
import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
+import edu.uci.ics.asterix.runtime.pointables.ARecordPointable;
+import edu.uci.ics.asterix.runtime.pointables.PointableAllocator;
+import edu.uci.ics.asterix.runtime.pointables.base.DefaultOpenFieldType;
+import edu.uci.ics.asterix.runtime.pointables.base.IVisitablePointable;
+import edu.uci.ics.asterix.runtime.util.ResettableByteArrayOutputStream;
+import edu.uci.ics.hyracks.algebricks.common.utils.Triple;
import edu.uci.ics.hyracks.api.dataflow.value.IBinaryComparator;
import edu.uci.ics.hyracks.api.dataflow.value.INullWriter;
import edu.uci.ics.hyracks.data.std.accessors.PointableBinaryComparatorFactory;
+import edu.uci.ics.hyracks.data.std.api.IValueReference;
import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ByteArrayAccessibleOutputStream;
-public class ARecordCaster {
+/**
+ * This class is to do the runtime type cast for a record. It is ONLY visible to
+ * ACastVisitor.
+ */
+class ARecordCaster {
+
+ // pointable allocator
+ private final PointableAllocator allocator = new PointableAllocator();
+
+ private final List<IVisitablePointable> reqFieldNames = new ArrayList<IVisitablePointable>();
+ private final List<IVisitablePointable> reqFieldTypeTags = new ArrayList<IVisitablePointable>();
+ private ARecordType cachedReqType = null;
+
+ private final ResettableByteArrayOutputStream bos = new ResettableByteArrayOutputStream();
+ private final DataOutputStream dos = new DataOutputStream(bos);
+
+ private final RecordBuilder recBuilder = new RecordBuilder();
+ private final IVisitablePointable nullReference = allocator.allocateEmpty();
+ private final IVisitablePointable nullTypeTag = allocator.allocateEmpty();
+
+ private final IBinaryComparator fieldNameComparator = PointableBinaryComparatorFactory.of(
+ UTF8StringPointable.FACTORY).createBinaryComparator();
+
+ private final ByteArrayAccessibleOutputStream outputBos = new ByteArrayAccessibleOutputStream();
+ private final DataOutputStream outputDos = new DataOutputStream(outputBos);
+
+ private final IVisitablePointable fieldTempReference = allocator.allocateEmpty();
+ private final Triple<IVisitablePointable, IAType, Boolean> nestedVisitorArg = new Triple<IVisitablePointable, IAType, Boolean>(
+ fieldTempReference, null, null);
+
+ private int numInputFields = 0;
// describe closed fields in the required type
private int[] fieldPermutation;
@@ -43,46 +82,31 @@
// describe fields (open or not) in the input records
private boolean[] openFields;
private int[] fieldNamesSortedIndex;
-
- private List<SimpleValueReference> reqFieldNames = new ArrayList<SimpleValueReference>();
private int[] reqFieldNamesSortedIndex;
- private List<SimpleValueReference> reqFieldTypeTags = new ArrayList<SimpleValueReference>();
- private ARecordType cachedReqType = null;
-
- private byte[] buffer = new byte[32768];
- private ResettableByteArrayOutputStream bos = new ResettableByteArrayOutputStream();
- private DataOutputStream dos = new DataOutputStream(bos);
-
- private RecordBuilder recBuilder = new RecordBuilder();
- private SimpleValueReference nullReference = new SimpleValueReference();
- private SimpleValueReference nullTypeTag = new SimpleValueReference();
-
- private int numInputFields = 0;
- private IBinaryComparator fieldNameComparator = PointableBinaryComparatorFactory.of(UTF8StringPointable.FACTORY)
- .createBinaryComparator();
public ARecordCaster() {
try {
- bos.setByteArray(buffer, 0);
+ bos.reset();
int start = bos.size();
INullWriter nullWriter = AqlNullWriterFactory.INSTANCE.createNullWriter();
nullWriter.writeNull(dos);
int end = bos.size();
- nullReference.reset(buffer, start, end - start);
+ nullReference.set(bos.getByteArray(), start, end - start);
start = bos.size();
dos.write(ATypeTag.NULL.serialize());
end = bos.size();
- nullTypeTag.reset(buffer, start, end);
+ nullTypeTag.set(bos.getByteArray(), start, end);
} catch (IOException e) {
throw new IllegalStateException(e);
}
}
- public void castRecord(ARecordAccessor recordAccessor, ARecordType reqType, DataOutput output) throws IOException {
- List<SimpleValueReference> fieldNames = recordAccessor.getFieldNames();
- List<SimpleValueReference> fieldTypeTags = recordAccessor.getFieldTypeTags();
- List<SimpleValueReference> fieldValues = recordAccessor.getFieldValues();
- numInputFields = recordAccessor.getCursor() + 1;
+ public void castRecord(ARecordPointable recordAccessor, IVisitablePointable resultAccessor, ARecordType reqType,
+ ACastVisitor visitor) throws IOException, AsterixException {
+ List<IVisitablePointable> fieldNames = recordAccessor.getFieldNames();
+ List<IVisitablePointable> fieldTypeTags = recordAccessor.getFieldTypeTags();
+ List<IVisitablePointable> fieldValues = recordAccessor.getFieldValues();
+ numInputFields = fieldNames.size();
if (openFields == null || numInputFields > openFields.length) {
openFields = new boolean[numInputFields];
@@ -95,7 +119,8 @@
// clear the previous states
reset();
matchClosedPart(fieldNames, fieldTypeTags, fieldValues);
- writeOutput(fieldNames, fieldTypeTags, fieldValues, output);
+ writeOutput(fieldNames, fieldTypeTags, fieldValues, outputDos, visitor);
+ resultAccessor.set(outputBos.getByteArray(), 0, outputBos.size());
}
private void reset() {
@@ -105,6 +130,7 @@
fieldPermutation[i] = -1;
for (int i = 0; i < numInputFields; i++)
fieldNamesSortedIndex[i] = i;
+ outputBos.reset();
}
private void loadRequiredType(ARecordType reqType) throws IOException {
@@ -120,7 +146,7 @@
for (int i = 0; i < optionalFields.length; i++)
optionalFields[i] = false;
- bos.setByteArray(buffer, nullReference.getStartIndex() + nullReference.getLength());
+ bos.reset(nullReference.getStartOffset() + nullReference.getLength());
for (int i = 0; i < numSchemaFields; i++) {
ATypeTag ftypeTag = fieldTypes[i].getTypeTag();
String fname = fieldNames[i];
@@ -136,8 +162,8 @@
int tagStart = bos.size();
dos.writeByte(ftypeTag.serialize());
int tagEnd = bos.size();
- SimpleValueReference typeTagPointable = new SimpleValueReference();
- typeTagPointable.reset(buffer, tagStart, tagEnd - tagStart);
+ IVisitablePointable typeTagPointable = allocator.allocateEmpty();
+ typeTagPointable.set(bos.getByteArray(), tagStart, tagEnd - tagStart);
reqFieldTypeTags.add(typeTagPointable);
// add type name pointable (including a string type tag)
@@ -145,8 +171,8 @@
dos.write(ATypeTag.STRING.serialize());
dos.writeUTF(fname);
int nameEnd = bos.size();
- SimpleValueReference typeNamePointable = new SimpleValueReference();
- typeNamePointable.reset(buffer, nameStart, nameEnd - nameStart);
+ IVisitablePointable typeNamePointable = allocator.allocateEmpty();
+ typeNamePointable.set(bos.getByteArray(), nameStart, nameEnd - nameStart);
reqFieldNames.add(typeNamePointable);
}
@@ -157,8 +183,8 @@
quickSort(reqFieldNamesSortedIndex, reqFieldNames, 0, reqFieldNamesSortedIndex.length - 1);
}
- private void matchClosedPart(List<SimpleValueReference> fieldNames, List<SimpleValueReference> fieldTypeTags,
- List<SimpleValueReference> fieldValues) {
+ private void matchClosedPart(List<IVisitablePointable> fieldNames, List<IVisitablePointable> fieldTypeTags,
+ List<IVisitablePointable> fieldValues) {
// sort-merge based match
quickSort(fieldNamesSortedIndex, fieldNames, 0, numInputFields - 1);
int fnStart = 0;
@@ -168,8 +194,8 @@
int reqFnPos = reqFieldNamesSortedIndex[reqFnStart];
int c = compare(fieldNames.get(fnPos), reqFieldNames.get(reqFnPos));
if (c == 0) {
- SimpleValueReference fieldTypeTag = fieldTypeTags.get(fnPos);
- SimpleValueReference reqFieldTypeTag = reqFieldTypeTags.get(reqFnPos);
+ IVisitablePointable fieldTypeTag = fieldTypeTags.get(fnPos);
+ IVisitablePointable reqFieldTypeTag = reqFieldTypeTags.get(reqFnPos);
if (fieldTypeTag.equals(reqFieldTypeTag) || (
// match the null type of optional field
optionalFields[reqFnPos] && fieldTypeTag.equals(nullTypeTag))) {
@@ -203,8 +229,9 @@
}
}
- private void writeOutput(List<SimpleValueReference> fieldNames, List<SimpleValueReference> fieldTypeTags,
- List<SimpleValueReference> fieldValues, DataOutput output) throws IOException {
+ private void writeOutput(List<IVisitablePointable> fieldNames, List<IVisitablePointable> fieldTypeTags,
+ List<IVisitablePointable> fieldValues, DataOutput output, ACastVisitor visitor) throws IOException,
+ AsterixException {
// reset the states of the record builder
recBuilder.reset(cachedReqType);
recBuilder.init();
@@ -212,27 +239,43 @@
// write the closed part
for (int i = 0; i < fieldPermutation.length; i++) {
int pos = fieldPermutation[i];
- SimpleValueReference field;
+ IVisitablePointable field;
if (pos >= 0) {
field = fieldValues.get(pos);
} else {
field = nullReference;
}
- recBuilder.addField(i, field);
+ IAType fType = cachedReqType.getFieldTypes()[i];
+ nestedVisitorArg.second = fType;
+
+ // recursively casting, the result of casting can always be thought
+ // as flat
+ if (optionalFields[i]) {
+ nestedVisitorArg.second = ((AUnionType) fType).getUnionList().get(
+ NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST);
+ }
+ field.accept(visitor, nestedVisitorArg);
+ recBuilder.addField(i, nestedVisitorArg.first);
}
// write the open part
for (int i = 0; i < numInputFields; i++) {
if (openFields[i]) {
- SimpleValueReference name = fieldNames.get(i);
- SimpleValueReference field = fieldValues.get(i);
- recBuilder.addField(name, field);
+ IVisitablePointable name = fieldNames.get(i);
+ IVisitablePointable field = fieldValues.get(i);
+ IVisitablePointable fieldTypeTag = fieldTypeTags.get(i);
+
+ ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER
+ .deserialize(fieldTypeTag.getByteArray()[fieldTypeTag.getStartOffset()]);
+ nestedVisitorArg.second = DefaultOpenFieldType.getDefaultOpenFieldType(typeTag);
+ field.accept(visitor, nestedVisitorArg);
+ recBuilder.addField(name, nestedVisitorArg.first);
}
}
recBuilder.write(output, true);
}
- private void quickSort(int[] index, List<SimpleValueReference> names, int start, int end) {
+ private void quickSort(int[] index, List<IVisitablePointable> names, int start, int end) {
if (end <= start)
return;
int i = partition(index, names, start, end);
@@ -240,7 +283,7 @@
quickSort(index, names, i + 1, end);
}
- private int partition(int[] index, List<SimpleValueReference> names, int left, int right) {
+ private int partition(int[] index, List<IVisitablePointable> names, int left, int right) {
int i = left - 1;
int j = right;
while (true) {
@@ -269,7 +312,7 @@
private int compare(IValueReference a, IValueReference b) {
// start+1 and len-1 due to the type tag
- return fieldNameComparator.compare(a.getBytes(), a.getStartIndex() + 1, a.getLength() - 1, b.getBytes(),
- b.getStartIndex() + 1, b.getLength() - 1);
+ return fieldNameComparator.compare(a.getByteArray(), a.getStartOffset() + 1, a.getLength() - 1,
+ b.getByteArray(), b.getStartOffset() + 1, b.getLength() - 1);
}
}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/visitor/IVisitablePointableVisitor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/visitor/IVisitablePointableVisitor.java
new file mode 100644
index 0000000..669e3fc
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/pointables/visitor/IVisitablePointableVisitor.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.pointables.visitor;
+
+import edu.uci.ics.asterix.common.exceptions.AsterixException;
+import edu.uci.ics.asterix.runtime.pointables.AFlatValuePointable;
+import edu.uci.ics.asterix.runtime.pointables.AListPointable;
+import edu.uci.ics.asterix.runtime.pointables.ARecordPointable;
+
+/**
+ * This interface is a visitor for all the three different IVisitablePointable
+ * (Note that right now we have three pointable implementations for type
+ * casting) implementations.
+ */
+public interface IVisitablePointableVisitor<R, T> {
+
+ public R visit(AListPointable accessor, T arg) throws AsterixException;
+
+ public R visit(ARecordPointable accessor, T arg) throws AsterixException;
+
+ public R visit(AFlatValuePointable accessor, T arg) throws AsterixException;
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java
index d3b965f..9ca7596 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/RangeDescriptor.java
@@ -65,10 +65,10 @@
public void init(IFrameTupleReference tuple) throws AlgebricksException {
inputVal.reset();
eval0.evaluate(tuple);
- current = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ current = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
inputVal.reset();
eval1.evaluate(tuple);
- max = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ max = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
}
@SuppressWarnings("unchecked")
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
index 6bf5420..d59d6c4 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/ScanCollectionDescriptor.java
@@ -87,7 +87,7 @@
try {
inputVal.reset();
argEval.evaluate(tuple);
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
if (serList[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
@@ -99,12 +99,12 @@
+ EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[0]));
}
- serListTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(inputVal.getBytes()[0])
+ serListTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(inputVal.getByteArray()[0])
.serialize();
if (serListTag == SER_ORDEREDLIST_TYPE_TAG)
- numItems = AOrderedListSerializerDeserializer.getNumberOfItems(inputVal.getBytes());
+ numItems = AOrderedListSerializerDeserializer.getNumberOfItems(inputVal.getByteArray());
else
- numItems = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal.getBytes());
+ numItems = AUnorderedListSerializerDeserializer.getNumberOfItems(inputVal.getByteArray());
itemTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[1]);
if (itemTag == ATypeTag.ANY)
@@ -123,7 +123,7 @@
try {
if (pos < numItems) {
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
try {
if (serListTag == SER_ORDEREDLIST_TYPE_TAG) {
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java
index a045344..6214d27 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/unnestingfunctions/std/SubsetCollectionDescriptor.java
@@ -75,16 +75,16 @@
try {
inputVal.reset();
evalStart.evaluate(tuple);
- posStart = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ posStart = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
inputVal.reset();
evalLen.evaluate(tuple);
- numItems = IntegerSerializerDeserializer.getInt(inputVal.getBytes(), 1);
+ numItems = IntegerSerializerDeserializer.getInt(inputVal.getByteArray(), 1);
inputVal.reset();
evalList.evaluate(tuple);
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
if (serList[0] == SER_NULL_TYPE_TAG) {
nullSerde.serialize(ANull.NULL, out);
@@ -113,7 +113,7 @@
@Override
public boolean step() throws AlgebricksException {
if (posCrt < posStart + numItems && posCrt < numItemsMax) {
- byte[] serList = inputVal.getBytes();
+ byte[] serList = inputVal.getByteArray();
int itemLength = 0;
try {
int itemOffset = AOrderedListSerializerDeserializer.getItemOffset(serList, posCrt);
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ARecordAccessor.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ARecordAccessor.java
deleted file mode 100644
index d45b4ac..0000000
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ARecordAccessor.java
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- * Copyright 2009-2010 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.asterix.runtime.util;
-
-import java.io.DataOutputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-
-import edu.uci.ics.asterix.dataflow.data.nontagged.AqlNullWriterFactory;
-import edu.uci.ics.asterix.dataflow.data.nontagged.serde.AInt32SerializerDeserializer;
-import edu.uci.ics.asterix.om.types.ARecordType;
-import edu.uci.ics.asterix.om.types.ATypeTag;
-import edu.uci.ics.asterix.om.types.AUnionType;
-import edu.uci.ics.asterix.om.types.EnumDeserializer;
-import edu.uci.ics.asterix.om.types.IAType;
-import edu.uci.ics.asterix.om.util.NonTaggedFormatUtil;
-import edu.uci.ics.hyracks.api.dataflow.value.INullWriter;
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
-
-public class ARecordAccessor implements IValueReference {
-
- private List<SimpleValueReference> fieldNames = new ArrayList<SimpleValueReference>();
- private List<SimpleValueReference> fieldTypeTags = new ArrayList<SimpleValueReference>();
- private List<SimpleValueReference> fieldValues = new ArrayList<SimpleValueReference>();
-
- private byte[] typeBuffer = new byte[32768];
- private ResettableByteArrayOutputStream typeBos = new ResettableByteArrayOutputStream();
- private DataOutputStream typeDos = new DataOutputStream(typeBos);
-
- private byte[] dataBuffer = new byte[32768];
- private ResettableByteArrayOutputStream dataBos = new ResettableByteArrayOutputStream();
- private DataOutputStream dataDos = new DataOutputStream(dataBos);
-
- private int closedPartTypeInfoSize = 0;
- private ARecordType inputRecType;
-
- private int numberOfSchemaFields;
- private int offsetArrayOffset;
- private int[] fieldOffsets;
- private int fieldCursor = -1;
- private ATypeTag typeTag;
- private SimpleValueReference nullReference = new SimpleValueReference();
-
- private byte[] data;
- private int start;
- private int len;
-
- public ARecordAccessor(ARecordType inputType) {
- this.inputRecType = inputType;
- IAType[] fieldTypes = inputType.getFieldTypes();
- String[] fieldNameStrs = inputType.getFieldNames();
- numberOfSchemaFields = fieldTypes.length;
-
- // initialize the buffer for closed parts(fieldName bytes+ type bytes) +
- // constant(null bytes)
- typeBos.setByteArray(typeBuffer, 0);
- try {
- for (int i = 0; i < numberOfSchemaFields; i++) {
- ATypeTag ftypeTag = fieldTypes[i].getTypeTag();
-
- // add type tag Reference
- int tagStart = typeBos.size();
- typeDos.writeByte(ftypeTag.serialize());
- int tagEnd = typeBos.size();
- SimpleValueReference typeTagReference = new SimpleValueReference();
- typeTagReference.reset(typeBuffer, tagStart, tagEnd - tagStart);
- fieldTypeTags.add(typeTagReference);
-
- // add type name Reference (including a astring type tag)
- int nameStart = typeBos.size();
- typeDos.writeByte(ATypeTag.STRING.serialize());
- typeDos.writeUTF(fieldNameStrs[i]);
- int nameEnd = typeBos.size();
- SimpleValueReference typeNameReference = new SimpleValueReference();
- typeNameReference.reset(typeBuffer, nameStart, nameEnd - nameStart);
- fieldNames.add(typeNameReference);
- }
-
- // initialize a constant: null value bytes reference
- int nullFieldStart = typeBos.size();
- INullWriter nullWriter = AqlNullWriterFactory.INSTANCE.createNullWriter();
- nullWriter.writeNull(typeDos);
- int nullFieldEnd = typeBos.size();
- nullReference.reset(typeBuffer, nullFieldStart, nullFieldEnd - nullFieldStart);
- } catch (IOException e) {
- throw new IllegalStateException(e);
- }
- closedPartTypeInfoSize = typeBos.size();
- fieldOffsets = new int[numberOfSchemaFields];
- }
-
- private void reset() {
- typeBos.setByteArray(typeBuffer, closedPartTypeInfoSize);
- dataBos.setByteArray(dataBuffer, 0);
- fieldCursor = -1;
- }
-
- public void reset(byte[] b, int start, int len) {
- // clear the previous states
- reset();
- this.data = b;
- this.start = start;
- this.len = len;
-
- boolean isExpanded = false;
- int openPartOffset = 0;
- int s = start;
- int recordOffset = s;
- if (inputRecType == null) {
- openPartOffset = s + AInt32SerializerDeserializer.getInt(b, s + 6);
- s += 8;
- isExpanded = true;
- } else {
- if (inputRecType.isOpen()) {
- isExpanded = b[s + 5] == 1 ? true : false;
- if (isExpanded) {
- openPartOffset = s + AInt32SerializerDeserializer.getInt(b, s + 6);
- s += 10;
- } else
- s += 6;
- } else
- s += 5;
- }
- try {
- if (numberOfSchemaFields > 0) {
- s += 4;
- int nullBitMapOffset = 0;
- boolean hasNullableFields = NonTaggedFormatUtil.hasNullableField(inputRecType);
- if (hasNullableFields) {
- nullBitMapOffset = s;
- offsetArrayOffset = s
- + (this.numberOfSchemaFields % 8 == 0 ? numberOfSchemaFields / 8
- : numberOfSchemaFields / 8 + 1);
- } else {
- offsetArrayOffset = s;
- }
- for (int i = 0; i < numberOfSchemaFields; i++) {
- fieldOffsets[i] = AInt32SerializerDeserializer.getInt(b, offsetArrayOffset) + recordOffset;
- offsetArrayOffset += 4;
- }
- for (int fieldNumber = 0; fieldNumber < numberOfSchemaFields; fieldNumber++) {
- next();
- if (hasNullableFields) {
- byte b1 = b[nullBitMapOffset + fieldNumber / 8];
- int p = 1 << (7 - (fieldNumber % 8));
- if ((b1 & p) == 0) {
- // set null value (including type tag inside)
- nextFieldValue().reset(nullReference);
- continue;
- }
- }
- IAType[] fieldTypes = inputRecType.getFieldTypes();
- int fieldValueLength = 0;
-
- if (fieldTypes[fieldNumber].getTypeTag() == ATypeTag.UNION) {
- if (NonTaggedFormatUtil.isOptionalField((AUnionType) fieldTypes[fieldNumber])) {
- typeTag = ((AUnionType) fieldTypes[fieldNumber]).getUnionList()
- .get(NonTaggedFormatUtil.OPTIONAL_TYPE_INDEX_IN_UNION_LIST).getTypeTag();
- fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffsets[fieldNumber],
- typeTag, false);
- }
- } else {
- typeTag = fieldTypes[fieldNumber].getTypeTag();
- fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffsets[fieldNumber],
- typeTag, false);
- }
- // set field value (including the type tag)
- int fstart = dataBos.size();
- dataDos.writeByte(typeTag.serialize());
- dataDos.write(b, fieldOffsets[fieldNumber], fieldValueLength);
- int fend = dataBos.size();
- nextFieldValue().reset(dataBuffer, fstart, fend - fstart);
- }
- }
- if (isExpanded) {
- int numberOfOpenFields = AInt32SerializerDeserializer.getInt(b, openPartOffset);
- int fieldOffset = openPartOffset + 4 + (8 * numberOfOpenFields);
- for (int i = 0; i < numberOfOpenFields; i++) {
- next();
- // set the field name (including a type tag, which is
- // astring)
- int fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffset, ATypeTag.STRING,
- false);
- int fnstart = dataBos.size();
- dataDos.writeByte(ATypeTag.STRING.serialize());
- dataDos.write(b, fieldOffset, fieldValueLength);
- int fnend = dataBos.size();
- nextFieldName().reset(dataBuffer, fnstart, fnend - fnstart);
- fieldOffset += fieldValueLength;
-
- // set the field type tag
- nextFieldType().reset(b, fieldOffset, 1);
- typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(b[fieldOffset]);
-
- // set the field value (already including type tag)
- fieldValueLength = NonTaggedFormatUtil.getFieldValueLength(b, fieldOffset, typeTag, true) + 1;
- nextFieldValue().reset(b, fieldOffset, fieldValueLength);
- fieldOffset += fieldValueLength;
- }
- }
- } catch (Exception e) {
- throw new IllegalStateException(e);
- }
- }
-
- private void next() {
- fieldCursor++;
- }
-
- private SimpleValueReference nextFieldName() {
- if (fieldCursor < fieldNames.size()) {
- return fieldNames.get(fieldCursor);
- } else {
- SimpleValueReference fieldNameReference = new SimpleValueReference();
- fieldNames.add(fieldNameReference);
- return fieldNameReference;
- }
- }
-
- private SimpleValueReference nextFieldType() {
- if (fieldCursor < fieldTypeTags.size()) {
- return fieldTypeTags.get(fieldCursor);
- } else {
- SimpleValueReference fieldTypeReference = new SimpleValueReference();
- fieldTypeTags.add(fieldTypeReference);
- return fieldTypeReference;
- }
- }
-
- private SimpleValueReference nextFieldValue() {
- if (fieldCursor < fieldValues.size()) {
- return fieldValues.get(fieldCursor);
- } else {
- SimpleValueReference fieldValueReference = new SimpleValueReference();
- fieldValues.add(fieldValueReference);
- return fieldValueReference;
- }
- }
-
- public int getCursor() {
- return fieldCursor;
- }
-
- public List<SimpleValueReference> getFieldNames() {
- return fieldNames;
- }
-
- public List<SimpleValueReference> getFieldTypeTags() {
- return fieldTypeTags;
- }
-
- public List<SimpleValueReference> getFieldValues() {
- return fieldValues;
- }
-
- @Override
- public byte[] getBytes() {
- return data;
- }
-
- @Override
- public int getStartIndex() {
- return start;
- }
-
- @Override
- public int getLength() {
- return len;
- }
-}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayInputStream.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayInputStream.java
deleted file mode 100644
index af18133..0000000
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayInputStream.java
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- * Copyright 2009-2010 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.asterix.runtime.util;
-
-import java.io.ByteArrayInputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public class ResettableByteArrayInputStream extends ByteArrayInputStream {
- private static final Logger LOGGER = Logger.getLogger(ResettableByteArrayInputStream.class.getName());
-
- private byte[] data;
- private int position;
-
- public ResettableByteArrayInputStream(byte[] data) {
- super(data);
- }
-
- public void setByteArray(byte[] data, int position) {
- this.data = data;
- this.position = position;
- }
-
- @Override
- public int read() {
- int remaining = data.length - position;
- int value = remaining > 0 ? (data[position++] & 0xff) : -1;
- if (LOGGER.isLoggable(Level.FINEST)) {
- LOGGER.finest("read(): value: " + value + " remaining: " + remaining + " position: " + position);
- }
- return value;
- }
-
- @Override
- public int read(byte[] bytes, int offset, int length) {
- int remaining = data.length - position;
- if (LOGGER.isLoggable(Level.FINEST)) {
- LOGGER.finest("read(bytes[], int, int): remaining: " + remaining + " offset: " + offset + " length: "
- + length + " position: " + position);
- }
- if (remaining == 0) {
- return -1;
- }
- int l = Math.min(length, remaining);
- System.arraycopy(data, position, bytes, offset, l);
- position += l;
- return l;
- }
-}
\ No newline at end of file
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayOutputStream.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayOutputStream.java
index 62db3a9..5aecd08 100644
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayOutputStream.java
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/ResettableByteArrayOutputStream.java
@@ -1,63 +1,15 @@
-/*
- * Copyright 2009-2010 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.asterix.runtime.util;
-import java.io.ByteArrayOutputStream;
-import java.util.logging.Level;
-import java.util.logging.Logger;
+import edu.uci.ics.hyracks.dataflow.common.comm.io.ByteArrayAccessibleOutputStream;
-public class ResettableByteArrayOutputStream extends ByteArrayOutputStream {
- private static final Logger LOGGER = Logger.getLogger(ResettableByteArrayOutputStream.class.getName());
+/**
+ * This class extends ByteArrayAccessibleOutputStream to allow reset to a given
+ * size.
+ *
+ */
+public class ResettableByteArrayOutputStream extends ByteArrayAccessibleOutputStream {
- private byte[] data;
- private int position;
-
- public ResettableByteArrayOutputStream() {
+ public void reset(int size) {
+ count = size;
}
-
- public void setByteArray(byte[] data, int position) {
- this.data = data;
- this.position = position;
- }
-
- @Override
- public void write(int b) {
- int remaining = data.length - position;
- if (position + 1 > data.length - 1)
- throw new IndexOutOfBoundsException();
- data[position] = (byte) b;
- position++;
- if (LOGGER.isLoggable(Level.FINEST)) {
- LOGGER.finest("write(): value: " + b + " remaining: " + remaining + " position: " + position);
- }
- }
-
- @Override
- public void write(byte[] bytes, int offset, int length) {
- if (LOGGER.isLoggable(Level.FINEST)) {
- LOGGER.finest("write(bytes[], int, int) offset: " + offset + " length: " + length + " position: "
- + position);
- }
- if (position + length > data.length - 1)
- throw new IndexOutOfBoundsException();
- System.arraycopy(bytes, offset, data, position, length);
- position += length;
- }
-
- @Override
- public int size(){
- return position;
- }
-}
\ No newline at end of file
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/SimpleValueReference.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/SimpleValueReference.java
deleted file mode 100644
index e49218a..0000000
--- a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/SimpleValueReference.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright 2009-2010 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.asterix.runtime.util;
-
-import edu.uci.ics.hyracks.dataflow.common.data.accessors.IValueReference;
-
-public class SimpleValueReference implements IValueReference {
-
- private byte[] data;
- private int start;
- private int len;
-
- public void reset(byte[] data, int start, int len) {
- this.data = data;
- this.start = start;
- this.len = len;
- }
-
- public void reset(IValueReference ivf) {
- this.data = ivf.getBytes();
- this.start = ivf.getStartIndex();
- this.len = ivf.getLength();
- }
-
- @Override
- public byte[] getBytes() {
- return data;
- }
-
- @Override
- public int getStartIndex() {
- return start;
- }
-
- @Override
- public int getLength() {
- return len;
- }
-
- @Override
- public boolean equals(Object o) {
- if (!(o instanceof IValueReference))
- return false;
- IValueReference ivf = (IValueReference) o;
- byte[] odata = ivf.getBytes();
- int ostart = ivf.getStartIndex();
- int olen = ivf.getLength();
-
- if (len != olen)
- return false;
- for (int i = 0; i < len; i++) {
- if (data[start + i] != odata[ostart + i])
- return false;
- }
- return true;
- }
-}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/IObjectFactory.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/IObjectFactory.java
new file mode 100644
index 0000000..85f0fa3
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/IObjectFactory.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.util.container;
+
+/**
+ * A factory interface to create objects.
+ */
+public interface IObjectFactory<E, T> {
+
+ /**
+ * create an element of type E
+ *
+ * @param arg
+ * @return an E element
+ */
+ public E create(T arg);
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/IObjectPool.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/IObjectPool.java
new file mode 100644
index 0000000..dd2c3bf
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/IObjectPool.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.util.container;
+
+/**
+ * A reusable object pool interface.
+ */
+public interface IObjectPool<E, T> {
+
+ /**
+ * Give client an E instance
+ *
+ * @param arg
+ * the argument to create E
+ * @return an E instance
+ */
+ public E allocate(T arg);
+
+ /**
+ * Mark all instances in the pool as unused
+ */
+ public void reset();
+}
diff --git a/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/ListObjectPool.java b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/ListObjectPool.java
new file mode 100644
index 0000000..b8f8e3a
--- /dev/null
+++ b/asterix-runtime/src/main/java/edu/uci/ics/asterix/runtime/util/container/ListObjectPool.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2009-2010 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.asterix.runtime.util.container;
+
+import java.util.ArrayList;
+import java.util.BitSet;
+import java.util.List;
+
+/**
+ * Object pool backed by a list.
+ *
+ * The argument for creating E instances could be different. This class also
+ * considers arguments in object reusing, e.g., it reuses an E instances ONLY
+ * when the construction argument is "equal".
+ */
+public class ListObjectPool<E, T> implements IObjectPool<E, T> {
+
+ private IObjectFactory<E, T> factory;
+
+ /**
+ * cache of objects
+ */
+ private List<E> pool = new ArrayList<E>();
+
+ /**
+ * args that are used to create each element in the pool
+ */
+ private List<T> args = new ArrayList<T>();
+
+ /**
+ * bits indicating which element is in use
+ */
+ private BitSet usedBits = new BitSet();
+
+ public ListObjectPool(IObjectFactory<E, T> factory) {
+ this.factory = factory;
+ }
+
+ @Override
+ public E allocate(T arg) {
+ int freeSlot = -1;
+ while (freeSlot + 1 < pool.size()) {
+ freeSlot = usedBits.nextClearBit(freeSlot + 1);
+ if (freeSlot >= pool.size())
+ break;
+
+ // the two cases where an element in the pool is a match
+ if ((arg == null && args.get(freeSlot) == null)
+ || (arg != null && args.get(freeSlot) != null && arg.equals(args.get(freeSlot)))) {
+ // the element is not used and the arg is the same as
+ // input arg
+ usedBits.set(freeSlot);
+ return pool.get(freeSlot);
+ }
+ }
+
+ // if we do not find a reusable object, allocate a new one
+ E element = factory.create(arg);
+ pool.add(element);
+ args.add(arg);
+ usedBits.set(pool.size() - 1);
+ return element;
+ }
+
+ @Override
+ public void reset() {
+ usedBits.clear();
+ }
+}