You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by bu...@apache.org on 2016/02/13 03:15:53 UTC

[24/24] incubator-asterixdb git commit: Move to non-copy-based evaluator interfaces for all function implementations, including: - scalar functions, - aggregate functions, - running aggregate functions, - unnesting functions

Move to non-copy-based evaluator interfaces for all function implementations, including:
- scalar functions,
- aggregate functions,
- running aggregate functions,
- unnesting functions

Change-Id: If132857cf8d707ce96951f12ba6dd86f54aa4069
Reviewed-on: https://asterix-gerrit.ics.uci.edu/615
Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
Reviewed-by: Till Westmann <ti...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/commit/0ae30836
Tree: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/tree/0ae30836
Diff: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/diff/0ae30836

Branch: refs/heads/master
Commit: 0ae3083626e8767e77a7c4add6b035ede8c12007
Parents: f93405c
Author: Yingyi Bu <yi...@couchbase.com>
Authored: Fri Feb 12 15:56:12 2016 -0800
Committer: Yingyi Bu <bu...@gmail.com>
Committed: Fri Feb 12 18:10:41 2016 -0800

----------------------------------------------------------------------
 .../jobgen/QueryLogicalExpressionJobGen.java    |  52 +-
 .../AqlPlusExpressionToPlanTranslator.java      |   4 +-
 .../file/SecondaryBTreeOperationsHelper.java    |   4 +-
 .../file/SecondaryIndexOperationsHelper.java    |  66 ++-
 .../SecondaryInvertedIndexOperationsHelper.java |   4 +-
 .../substring-after-4/substring-after-4.1.adm   |   2 +-
 .../substring-before-3/substring-before-3.1.adm |   2 +-
 .../external/library/ExternalFunction.java      |  30 +-
 .../ExternalFunctionDescriptorProvider.java     |   6 +-
 .../library/ExternalFunctionProvider.java       |  28 +-
 .../ExternalScalarFunctionEvaluatorFactory.java |  16 +-
 .../SimilarityMetricEditDistance.java           |  69 ++-
 .../asterix/builders/AbstractListBuilder.java   |  16 +-
 .../comparators/ABinaryComparator.java          |   4 +-
 .../AOrderedListSerializerDeserializer.java     |   8 -
 .../serde/ARecordSerializerDeserializer.java    |  82 +--
 .../AUnorderedListSerializerDeserializer.java   |   8 -
 .../asterix/formats/base/IDataFormat.java       |  10 +-
 .../functions/AbstractFunctionDescriptor.java   |  22 +-
 .../om/functions/IFunctionDescriptor.java       |  22 +-
 .../pointables/nonvisitor/ARecordPointable.java |  18 +-
 .../org/apache/asterix/om/types/ATypeTag.java   |   7 +-
 .../om/types/hierachy/ATypeHierarchy.java       | 151 +++---
 .../collections/ListifyAggregateDescriptor.java |   7 +-
 .../ListifyAggregateFunctionEvalFactory.java    |  43 +-
 .../AbstractScalarAggregateDescriptor.java      |  23 +-
 .../scalar/GenericScalarAggregateFunction.java  |  36 +-
 ...bstractSerializableAvgAggregateFunction.java |  76 +--
 ...tractSerializableCountAggregateFunction.java |  27 +-
 ...bstractSerializableSumAggregateFunction.java |  41 +-
 .../std/SerializableAvgAggregateDescriptor.java |  19 +-
 .../std/SerializableAvgAggregateFunction.java   |   8 +-
 .../SerializableCountAggregateDescriptor.java   |  19 +-
 .../std/SerializableCountAggregateFunction.java |   8 +-
 ...erializableGlobalAvgAggregateDescriptor.java |  19 +-
 .../SerializableGlobalAvgAggregateFunction.java |   8 +-
 ...alizableGlobalSqlAvgAggregateDescriptor.java |  22 +-
 ...rializableGlobalSqlAvgAggregateFunction.java |   8 +-
 ...zableIntermediateAvgAggregateDescriptor.java |  24 +-
 ...lizableIntermediateAvgAggregateFunction.java |   8 +-
 ...leIntermediateSqlAvgAggregateDescriptor.java |  22 +-
 ...ableIntermediateSqlAvgAggregateFunction.java |   8 +-
 ...SerializableLocalAvgAggregateDescriptor.java |  20 +-
 .../SerializableLocalAvgAggregateFunction.java  |   8 +-
 ...ializableLocalSqlAvgAggregateDescriptor.java |  20 +-
 ...erializableLocalSqlAvgAggregateFunction.java |   8 +-
 ...ializableLocalSqlSumAggregateDescriptor.java |  19 +-
 ...SerializableLocalSumAggregateDescriptor.java |  19 +-
 .../SerializableSqlAvgAggregateDescriptor.java  |  20 +-
 .../SerializableSqlAvgAggregateFunction.java    |   8 +-
 ...SerializableSqlCountAggregateDescriptor.java |  19 +-
 .../SerializableSqlCountAggregateFunction.java  |   8 +-
 .../SerializableSqlSumAggregateDescriptor.java  |  19 +-
 .../SerializableSqlSumAggregateFunction.java    |   9 +-
 .../std/SerializableSumAggregateDescriptor.java |  19 +-
 .../std/SerializableSumAggregateFunction.java   |   9 +-
 .../std/AbstractAvgAggregateFunction.java       |  91 ++--
 .../std/AbstractCountAggregateFunction.java     |  41 +-
 .../std/AbstractMinMaxAggregateFunction.java    |  47 +-
 .../std/AbstractSumAggregateFunction.java       |  73 +--
 .../aggregates/std/AvgAggregateDescriptor.java  |  17 +-
 .../aggregates/std/AvgAggregateFunction.java    |  18 +-
 .../std/CountAggregateDescriptor.java           |  18 +-
 .../aggregates/std/CountAggregateFunction.java  |  10 +-
 .../std/GlobalAvgAggregateDescriptor.java       |  17 +-
 .../std/GlobalAvgAggregateFunction.java         |  17 +-
 .../std/GlobalSqlAvgAggregateDescriptor.java    |  17 +-
 .../std/GlobalSqlAvgAggregateFunction.java      |  17 +-
 .../std/IntermediateAvgAggregateDescriptor.java |  17 +-
 .../std/IntermediateAvgAggregateFunction.java   |  17 +-
 .../IntermediateSqlAvgAggregateDescriptor.java  |  17 +-
 .../IntermediateSqlAvgAggregateFunction.java    |  18 +-
 .../std/LocalAvgAggregateDescriptor.java        |  17 +-
 .../std/LocalAvgAggregateFunction.java          |  17 +-
 .../std/LocalMaxAggregateDescriptor.java        |  17 +-
 .../std/LocalMinAggregateDescriptor.java        |  17 +-
 .../std/LocalSqlAvgAggregateDescriptor.java     |  17 +-
 .../std/LocalSqlAvgAggregateFunction.java       |  17 +-
 .../std/LocalSqlMaxAggregateDescriptor.java     |  17 +-
 .../std/LocalSqlMinAggregateDescriptor.java     |  17 +-
 .../std/LocalSqlSumAggregateDescriptor.java     |  17 +-
 .../std/LocalSumAggregateDescriptor.java        |  17 +-
 .../aggregates/std/MaxAggregateDescriptor.java  |  17 +-
 .../aggregates/std/MinAggregateDescriptor.java  |  17 +-
 .../aggregates/std/MinMaxAggregateFunction.java |  12 +-
 .../std/SqlAvgAggregateDescriptor.java          |  17 +-
 .../aggregates/std/SqlAvgAggregateFunction.java |  18 +-
 .../std/SqlCountAggregateDescriptor.java        |  18 +-
 .../std/SqlCountAggregateFunction.java          |   8 +-
 .../std/SqlMaxAggregateDescriptor.java          |  17 +-
 .../std/SqlMinAggregateDescriptor.java          |  17 +-
 .../std/SqlMinMaxAggregateFunction.java         |  12 +-
 .../std/SqlSumAggregateDescriptor.java          |  17 +-
 .../aggregates/std/SqlSumAggregateFunction.java |  12 +-
 .../aggregates/std/SumAggregateDescriptor.java  |  17 +-
 .../aggregates/std/SumAggregateFunction.java    |  12 +-
 .../stream/EmptyStreamAggregateDescriptor.java  |  32 +-
 .../NonEmptyStreamAggregateDescriptor.java      |  33 +-
 .../accessors/CircleCenterAccessor.java         |  51 +-
 .../accessors/CircleRadiusAccessor.java         |  45 +-
 .../accessors/LineRectanglePolygonAccessor.java |  92 ++--
 .../accessors/PointXCoordinateAccessor.java     |  43 +-
 .../accessors/PointYCoordinateAccessor.java     |  43 +-
 .../accessors/TemporalDayAccessor.java          |  69 +--
 .../accessors/TemporalHourAccessor.java         |  70 +--
 .../accessors/TemporalIntervalEndAccessor.java  |  49 +-
 .../TemporalIntervalEndDateAccessor.java        |  59 ++-
 .../TemporalIntervalEndDatetimeAccessor.java    |  53 +-
 .../TemporalIntervalEndTimeAccessor.java        |  53 +-
 .../TemporalIntervalStartAccessor.java          |  51 +-
 .../TemporalIntervalStartDateAccessor.java      |  55 +-
 .../TemporalIntervalStartDatetimeAccessor.java  |  54 +-
 .../TemporalIntervalStartTimeAccessor.java      |  54 +-
 .../accessors/TemporalMillisecondAccessor.java  |  66 +--
 .../accessors/TemporalMinuteAccessor.java       |  66 +--
 .../accessors/TemporalMonthAccessor.java        |  65 +--
 .../accessors/TemporalSecondAccessor.java       |  64 +--
 .../accessors/TemporalYearAccessor.java         |  71 +--
 .../common/AccessibleByteArrayEval.java         |  28 +-
 .../ClosedRecordConstructorEvalFactory.java     |  57 +--
 .../evaluators/common/CreateMBREvalFactory.java | 190 +++----
 .../common/EditDistanceCheckEvaluator.java      |  42 +-
 .../common/EditDistanceContainsEvaluator.java   |  31 +-
 .../common/EditDistanceEvaluator.java           |  96 ++--
 .../evaluators/common/GramTokensEvaluator.java  |  54 +-
 .../common/SimilarityFiltersCache.java          |  11 +-
 .../common/SimilarityJaccardCheckEvaluator.java |  27 +-
 .../common/SimilarityJaccardEvaluator.java      |  86 ++--
 .../SimilarityJaccardPrefixEvaluator.java       | 127 ++---
 .../SimilarityJaccardSortedCheckEvaluator.java  |  12 +-
 .../SimilarityJaccardSortedEvaluator.java       |  13 +-
 .../runtime/evaluators/common/SpatialUtils.java |  19 +-
 .../evaluators/common/WordTokensEvaluator.java  |  32 +-
 .../AbstractComparisonEvaluator.java            | 230 +++++----
 .../comparisons/ComparisonEvalFactory.java      | 108 ++--
 ...BinaryBase64StringConstructorDescriptor.java |  17 +-
 .../ABinaryHexStringConstructorDescriptor.java  |  55 +-
 .../ABooleanConstructorDescriptor.java          |  55 +-
 .../ACircleConstructorDescriptor.java           |  53 +-
 .../ADateConstructorDescriptor.java             |  44 +-
 .../ADateTimeConstructorDescriptor.java         |  45 +-
 .../ADayTimeDurationConstructorDescriptor.java  |  44 +-
 .../ADoubleConstructorDescriptor.java           |  54 +-
 .../ADurationConstructorDescriptor.java         |  46 +-
 .../AFloatConstructorDescriptor.java            | 150 ++----
 .../AInt16ConstructorDescriptor.java            |  70 +--
 .../AInt32ConstructorDescriptor.java            |  68 +--
 .../AInt64ConstructorDescriptor.java            |  66 +--
 .../AInt8ConstructorDescriptor.java             |  69 +--
 .../AIntervalConstructorDescriptor.java         |  78 +--
 ...ervalStartFromDateConstructorDescriptor.java | 101 ++--
 ...lStartFromDateTimeConstructorDescriptor.java | 110 ++--
 ...ervalStartFromTimeConstructorDescriptor.java | 100 ++--
 .../ALineConstructorDescriptor.java             |  46 +-
 .../ANullConstructorDescriptor.java             |  46 +-
 .../APoint3DConstructorDescriptor.java          |  47 +-
 .../APointConstructorDescriptor.java            |  45 +-
 .../APolygonConstructorDescriptor.java          |  51 +-
 .../ARectangleConstructorDescriptor.java        |  45 +-
 .../AStringConstructorDescriptor.java           |  57 ++-
 .../ATimeConstructorDescriptor.java             |  43 +-
 .../AUUIDFromStringConstructorDescriptor.java   |  49 +-
 ...AYearMonthDurationConstructorDescriptor.java |  43 +-
 .../ClosedRecordConstructorDescriptor.java      |   4 +-
 .../OpenRecordConstructorDescriptor.java        |  50 +-
 .../functions/AbstractBinaryStringBoolEval.java |  65 ++-
 .../AbstractNumericArithmeticEval.java          | 199 ++++----
 .../functions/AbstractQuadStringStringEval.java |  91 ++--
 .../functions/AbstractTripleStringBoolEval.java |  74 +--
 .../AbstractTripleStringStringEval.java         |  74 +--
 .../evaluators/functions/AndDescriptor.java     |  51 +-
 .../AnyCollectionMemberDescriptor.java          |  70 +--
 .../functions/CastListDescriptor.java           |  37 +-
 .../functions/CastRecordDescriptor.java         |  37 +-
 .../functions/CodePointToStringDescriptor.java  |  58 ++-
 .../CountHashedGramTokensDescriptor.java        |  16 +-
 .../CountHashedWordTokensDescriptor.java        |  16 +-
 .../functions/CreateCircleDescriptor.java       |  70 +--
 .../functions/CreateLineDescriptor.java         |  79 +--
 .../functions/CreateMBRDescriptor.java          |   4 +-
 .../functions/CreatePointDescriptor.java        |  76 +--
 .../functions/CreatePolygonDescriptor.java      |  42 +-
 .../functions/CreateRectangleDescriptor.java    |  79 +--
 .../functions/CreateUUIDDescriptor.java         |  29 +-
 .../functions/DeepEqualityDescriptor.java       |  49 +-
 .../functions/EditDistanceCheckDescriptor.java  |  16 +-
 .../EditDistanceContainsDescriptor.java         |  16 +-
 .../functions/EditDistanceDescriptor.java       |  16 +-
 .../functions/EditDistanceListIsFilterable.java |  66 +--
 .../EditDistanceStringIsFilterable.java         |  81 +--
 .../functions/EmbedTypeDescriptor.java          |  18 +-
 .../functions/FlowRecordDescriptor.java         |  36 +-
 .../evaluators/functions/FuzzyEqDescriptor.java |   4 +-
 .../evaluators/functions/GetItemDescriptor.java | 100 ++--
 .../functions/GramTokensDescriptor.java         |  16 +-
 .../functions/HashedGramTokensDescriptor.java   |  16 +-
 .../functions/HashedWordTokensDescriptor.java   |  16 +-
 .../functions/InjectFailureDescriptor.java      |  63 ++-
 .../evaluators/functions/IsNullDescriptor.java  |  33 +-
 .../functions/IsSystemNullDescriptor.java       |  35 +-
 .../evaluators/functions/LenDescriptor.java     |  51 +-
 .../evaluators/functions/NotDescriptor.java     |  44 +-
 .../evaluators/functions/NotNullDescriptor.java |  41 +-
 .../functions/NumericAbsDescriptor.java         |  66 +--
 .../functions/NumericCeilingDescriptor.java     |  66 +--
 .../functions/NumericFloorDescriptor.java       |  65 +--
 .../functions/NumericModuloDescriptor.java      |  65 +--
 .../functions/NumericRoundDescriptor.java       |  65 +--
 .../NumericRoundHalfToEven2Descriptor.java      |  89 ++--
 .../NumericRoundHalfToEvenDescriptor.java       |  67 +--
 .../functions/NumericSubtractDescriptor.java    |  69 +--
 .../functions/NumericUnaryMinusDescriptor.java  |  67 +--
 .../evaluators/functions/OrDescriptor.java      |  50 +-
 .../OrderedListConstructorDescriptor.java       |  43 +-
 .../functions/PrefixLenDescriptor.java          |  81 +--
 .../functions/PrefixLenJaccardDescriptor.java   |  49 +-
 .../evaluators/functions/RegExpDescriptor.java  |  67 ++-
 .../functions/SimilarityDescriptor.java         | 165 +++---
 .../SimilarityJaccardCheckDescriptor.java       |  16 +-
 .../functions/SimilarityJaccardDescriptor.java  |  16 +-
 .../SimilarityJaccardPrefixCheckDescriptor.java |  21 +-
 .../SimilarityJaccardPrefixDescriptor.java      |  16 +-
 .../SimilarityJaccardSortedCheckDescriptor.java |  16 +-
 .../SimilarityJaccardSortedDescriptor.java      |  16 +-
 .../functions/SpatialAreaDescriptor.java        |  60 ++-
 .../functions/SpatialCellDescriptor.java        | 117 +++--
 .../functions/SpatialDistanceDescriptor.java    |  65 +--
 .../functions/SpatialIntersectDescriptor.java   | 498 +++++++++----------
 .../functions/StringConcatDescriptor.java       |  45 +-
 .../functions/StringContainsDescriptor.java     |  20 +-
 .../functions/StringEndsWithDescriptor.java     |  20 +-
 .../functions/StringEqualDescriptor.java        |  20 +-
 .../functions/StringJoinDescriptor.java         |  78 +--
 .../functions/StringLengthDescriptor.java       |  46 +-
 .../functions/StringLikeDescriptor.java         |  20 +-
 .../functions/StringLowerCaseDescriptor.java    |  45 +-
 .../functions/StringMatchesDescriptor.java      |  19 +-
 .../StringMatchesWithFlagDescriptor.java        |  19 +-
 .../functions/StringReplaceDescriptor.java      |  19 +-
 .../StringReplaceWithFlagsDescriptor.java       |  19 +-
 .../functions/StringStartsWithDescriptor.java   |  20 +-
 .../functions/StringToCodePointDescriptor.java  |  50 +-
 .../functions/StringUpperCaseDescriptor.java    |  45 +-
 .../functions/Substring2Descriptor.java         |  52 +-
 .../functions/SubstringAfterDescriptor.java     |  71 +--
 .../functions/SubstringBeforeDescriptor.java    |  68 ++-
 .../functions/SubstringDescriptor.java          |  94 ++--
 .../functions/SwitchCaseDescriptor.java         |  79 ++-
 .../UnorderedListConstructorDescriptor.java     |  46 +-
 .../functions/WordTokensDescriptor.java         |  16 +-
 .../binary/AbstractBinaryScalarEvaluator.java   | 110 ++++
 .../functions/binary/AbstractCopyEvaluator.java | 109 ----
 .../binary/BinaryConcatDescriptor.java          |  37 +-
 .../binary/BinaryLengthDescriptor.java          |  26 +-
 .../functions/binary/FindBinaryDescriptor.java  |  43 +-
 .../binary/FindBinaryFromDescriptor.java        |  19 +-
 .../functions/binary/ParseBinaryDescriptor.java |  27 +-
 .../functions/binary/PrintBinaryDescriptor.java |  27 +-
 .../binary/SubBinaryFromDescriptor.java         |  15 +-
 .../binary/SubBinaryFromToDescriptor.java       |  41 +-
 .../records/FieldAccessByIndexDescriptor.java   |   4 +-
 .../records/FieldAccessByIndexEvalFactory.java  |  69 +--
 .../records/FieldAccessByNameDescriptor.java    |   4 +-
 .../records/FieldAccessByNameEvalFactory.java   |  66 +--
 .../records/FieldAccessNestedDescriptor.java    |   4 +-
 .../records/FieldAccessNestedEvalFactory.java   | 213 +++++++-
 .../functions/records/FieldAccessUtil.java      | 203 --------
 .../records/GetRecordFieldValueDescriptor.java  |   4 +-
 .../records/GetRecordFieldValueEvalFactory.java | 123 +++--
 .../records/GetRecordFieldsDescriptor.java      |   4 +-
 .../records/GetRecordFieldsEvalFactory.java     |  49 +-
 .../records/RecordAddFieldsDescriptor.java      |  68 +--
 .../functions/records/RecordFieldsUtil.java     |  22 +-
 .../records/RecordMergeDescriptor.java          |  53 +-
 .../records/RecordRemoveFieldsDescriptor.java   |   5 +-
 .../records/RecordRemoveFieldsEvalFactory.java  |  80 +--
 .../AbstractIntervalLogicFuncDescriptor.java    |  79 +--
 .../AdjustDateTimeForTimeZoneDescriptor.java    |  70 +--
 .../AdjustTimeForTimeZoneDescriptor.java        |  72 +--
 .../CalendarDuartionFromDateDescriptor.java     |  72 +--
 .../CalendarDurationFromDateTimeDescriptor.java |  74 +--
 .../temporal/CurrentDateDescriptor.java         |  26 +-
 .../temporal/CurrentDateTimeDescriptor.java     |  23 +-
 .../temporal/CurrentTimeDescriptor.java         |  26 +-
 .../temporal/DateFromDatetimeDescriptor.java    |  44 +-
 .../DateFromUnixTimeInDaysDescriptor.java       |  36 +-
 .../DatetimeFromDateAndTimeDescriptor.java      |  67 +--
 .../DatetimeFromUnixTimeInMsDescriptor.java     |  59 +--
 .../DatetimeFromUnixTimeInSecsDescriptor.java   |  64 +--
 .../functions/temporal/DayOfWeekDescriptor.java |  54 +-
 .../DayTimeDurationComparatorDescriptor.java    |  72 +--
 .../temporal/DurationEqualDescriptor.java       |  73 +--
 .../DurationFromIntervalDescriptor.java         |  54 +-
 .../DurationFromMillisecondsDescriptor.java     |  60 +--
 .../temporal/DurationFromMonthsDescriptor.java  |  41 +-
 .../temporal/GetDayTimeDurationDescriptor.java  |  47 +-
 .../GetOverlappingIntervalDescriptor.java       |  78 +--
 .../GetYearMonthDurationDescriptor.java         |  45 +-
 .../temporal/IntervalBinDescriptor.java         |  87 ++--
 ...llisecondsFromDayTimeDurationDescriptor.java |  50 +-
 .../MonthsFromYearMonthDurationDescriptor.java  |  50 +-
 .../temporal/OverlapBinsDescriptor.java         |  83 ++--
 .../functions/temporal/ParseDateDescriptor.java |  77 +--
 .../temporal/ParseDateTimeDescriptor.java       |  78 +--
 .../functions/temporal/ParseTimeDescriptor.java |  77 +--
 .../functions/temporal/PrintDateDescriptor.java |  70 +--
 .../temporal/PrintDateTimeDescriptor.java       |  69 +--
 .../functions/temporal/PrintTimeDescriptor.java |  69 +--
 .../temporal/TimeFromDatetimeDescriptor.java    |  45 +-
 .../TimeFromUnixTimeInMsDescriptor.java         |  36 +-
 .../YearMonthDurationComparatorDecriptor.java   |  72 +--
 .../runtime/formats/NonTaggedDataFormat.java    | 131 ++++-
 .../std/TidRunningAggregateDescriptor.java      |  36 +-
 .../unnestingfunctions/std/RangeDescriptor.java |  47 +-
 .../std/ScanCollectionDescriptor.java           |  46 +-
 .../std/SubsetCollectionDescriptor.java         | 109 ++--
 316 files changed, 7967 insertions(+), 6883 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
----------------------------------------------------------------------
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java b/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
index 0d7955d..5ebabf3 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
@@ -46,11 +46,11 @@ import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFun
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.IOperatorSchema;
 import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
-import org.apache.hyracks.algebricks.runtime.base.ICopyAggregateFunctionFactory;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.base.ICopyRunningAggregateFunctionFactory;
-import org.apache.hyracks.algebricks.runtime.base.ICopySerializableAggregateFunctionFactory;
-import org.apache.hyracks.algebricks.runtime.base.ICopyUnnestingFunctionFactory;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.evaluators.ColumnAccessEvalFactory;
 
 public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
@@ -61,16 +61,16 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
     }
 
     @Override
-    public ICopyAggregateFunctionFactory createAggregateFunctionFactory(AggregateFunctionCallExpression expr,
+    public IAggregateEvaluatorFactory createAggregateFunctionFactory(AggregateFunctionCallExpression expr,
             IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
                     throws AlgebricksException {
-        ICopyEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
+        IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
         IFunctionDescriptor fd = getFunctionDescriptor(expr, env, context);
         switch (fd.getFunctionDescriptorTag()) {
             case SERIALAGGREGATE:
                 return null;
             case AGGREGATE:
-                return fd.createAggregateFunctionFactory(args);
+                return fd.createAggregateEvaluatorFactory(args);
             default:
                 throw new IllegalStateException(
                         "Invalid function descriptor " + fd.getFunctionDescriptorTag() + " expected "
@@ -79,25 +79,25 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
     }
 
     @Override
-    public ICopyRunningAggregateFunctionFactory createRunningAggregateFunctionFactory(
+    public IRunningAggregateEvaluatorFactory createRunningAggregateFunctionFactory(
             StatefulFunctionCallExpression expr, IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas,
             JobGenContext context) throws AlgebricksException {
-        ICopyEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
-        return getFunctionDescriptor(expr, env, context).createRunningAggregateFunctionFactory(args);
+        IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
+        return getFunctionDescriptor(expr, env, context).createRunningAggregateEvaluatorFactory(args);
     }
 
     @Override
-    public ICopyUnnestingFunctionFactory createUnnestingFunctionFactory(UnnestingFunctionCallExpression expr,
+    public IUnnestingEvaluatorFactory createUnnestingFunctionFactory(UnnestingFunctionCallExpression expr,
             IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
                     throws AlgebricksException {
-        ICopyEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
-        return getFunctionDescriptor(expr, env, context).createUnnestingFunctionFactory(args);
+        IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
+        return getFunctionDescriptor(expr, env, context).createUnnestingEvaluatorFactory(args);
     }
 
     @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(ILogicalExpression expr, IVariableTypeEnvironment env,
+    public IScalarEvaluatorFactory createEvaluatorFactory(ILogicalExpression expr, IVariableTypeEnvironment env,
             IOperatorSchema[] inputSchemas, JobGenContext context) throws AlgebricksException {
-        ICopyEvaluatorFactory copyEvaluatorFactory = null;
+        IScalarEvaluatorFactory copyEvaluatorFactory = null;
         switch (expr.getExpressionTag()) {
             case VARIABLE: {
                 VariableReferenceExpression v = (VariableReferenceExpression) expr;
@@ -120,7 +120,7 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
 
     }
 
-    private ICopyEvaluatorFactory createVariableEvaluatorFactory(VariableReferenceExpression expr,
+    private IScalarEvaluatorFactory createVariableEvaluatorFactory(VariableReferenceExpression expr,
             IOperatorSchema[] inputSchemas, JobGenContext context) throws AlgebricksException {
         LogicalVariable variable = expr.getVariableReference();
         for (IOperatorSchema scm : inputSchemas) {
@@ -132,10 +132,10 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
         throw new AlgebricksException("Variable " + variable + " could not be found in any input schema.");
     }
 
-    private ICopyEvaluatorFactory createScalarFunctionEvaluatorFactory(AbstractFunctionCallExpression expr,
+    private IScalarEvaluatorFactory createScalarFunctionEvaluatorFactory(AbstractFunctionCallExpression expr,
             IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
                     throws AlgebricksException {
-        ICopyEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
+        IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
         FunctionIdentifier fi = expr.getFunctionIdentifier();
         ComparisonKind ck = AlgebricksBuiltinFunctions.getComparisonType(fi);
         if (ck != null) {
@@ -157,17 +157,17 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
         return fd.createEvaluatorFactory(args);
     }
 
-    private ICopyEvaluatorFactory createConstantEvaluatorFactory(ConstantExpression expr,
+    private IScalarEvaluatorFactory createConstantEvaluatorFactory(ConstantExpression expr,
             IOperatorSchema[] inputSchemas, JobGenContext context) throws AlgebricksException {
         IDataFormat format = FormatUtils.getDefaultFormat();
         return format.getConstantEvalFactory(expr.getValue());
     }
 
-    private ICopyEvaluatorFactory[] codegenArguments(AbstractFunctionCallExpression expr, IVariableTypeEnvironment env,
+    private IScalarEvaluatorFactory[] codegenArguments(AbstractFunctionCallExpression expr, IVariableTypeEnvironment env,
             IOperatorSchema[] inputSchemas, JobGenContext context) throws AlgebricksException {
         List<Mutable<ILogicalExpression>> arguments = expr.getArguments();
         int n = arguments.size();
-        ICopyEvaluatorFactory[] args = new ICopyEvaluatorFactory[n];
+        IScalarEvaluatorFactory[] args = new IScalarEvaluatorFactory[n];
         int i = 0;
         for (Mutable<ILogicalExpression> a : arguments) {
             args[i++] = createEvaluatorFactory(a.getValue(), env, inputSchemas, context);
@@ -176,10 +176,10 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
     }
 
     @Override
-    public ICopySerializableAggregateFunctionFactory createSerializableAggregateFunctionFactory(
+    public ISerializedAggregateEvaluatorFactory createSerializableAggregateFunctionFactory(
             AggregateFunctionCallExpression expr, IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas,
             JobGenContext context) throws AlgebricksException {
-        ICopyEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
+        IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
         IFunctionDescriptor fd = getFunctionDescriptor(expr, env, context);
 
         switch (fd.getFunctionDescriptorTag()) {
@@ -188,7 +188,7 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
                     AggregateFunctionCallExpression serialAggExpr = AsterixBuiltinFunctions
                             .makeSerializableAggregateFunctionExpression(fd.getIdentifier(), expr.getArguments());
                     IFunctionDescriptor afdd = getFunctionDescriptor(serialAggExpr, env, context);
-                    return afdd.createSerializableAggregateFunctionFactory(args);
+                    return afdd.createSerializableAggregateEvaluatorFactory(args);
                 } else {
                     throw new AlgebricksException(
                             "Trying to create a serializable aggregate from a non-serializable aggregate function descriptor. (fi="
@@ -196,7 +196,7 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
                 }
             }
             case SERIALAGGREGATE: {
-                return fd.createSerializableAggregateFunctionFactory(args);
+                return fd.createSerializableAggregateEvaluatorFactory(args);
             }
 
             default:

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
----------------------------------------------------------------------
diff --git a/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java b/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
index 9425254..45933f4 100644
--- a/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
+++ b/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
@@ -159,7 +159,7 @@ import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnionAllOper
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.WriteOperator;
 import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 
 /**
  * Each visit returns a pair of an operator and a variable. The variable
@@ -276,7 +276,7 @@ public class AqlPlusExpressionToPlanTranslator extends AbstractLangTranslator
             ArrayList<Mutable<ILogicalExpression>> exprs = new ArrayList<Mutable<ILogicalExpression>>();
             List<Mutable<ILogicalExpression>> varRefsForLoading = new ArrayList<Mutable<ILogicalExpression>>();
             for (List<String> partitioningKey : partitioningKeys) {
-                Triple<ICopyEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioner = format
+                Triple<IScalarEvaluatorFactory, ScalarFunctionCallExpression, IAType> partitioner = format
                         .partitioningEvaluatorFactory(itemType, partitioningKey);
                 AbstractFunctionCallExpression f = partitioner.second.cloneExpression();
                 f.substituteVar(METADATA_DUMMY_VAR, resVar);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
index 6d23f3c..5512577 100644
--- a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
+++ b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryBTreeOperationsHelper.java
@@ -49,7 +49,7 @@ import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConf
 import org.apache.hyracks.algebricks.data.IBinaryComparatorFactoryProvider;
 import org.apache.hyracks.algebricks.data.ISerializerDeserializerProvider;
 import org.apache.hyracks.algebricks.data.ITypeTraitProvider;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
 import org.apache.hyracks.algebricks.runtime.operators.base.SinkRuntimeFactory;
 import org.apache.hyracks.algebricks.runtime.operators.meta.AlgebricksMetaOperatorDescriptor;
@@ -302,7 +302,7 @@ public class SecondaryBTreeOperationsHelper extends SecondaryIndexOperationsHelp
     protected void setSecondaryRecDescAndComparators(IndexType indexType, List<List<String>> secondaryKeyFields,
             List<IAType> secondaryKeyTypes, int gramLength, AqlMetadataProvider metadataProvider)
             throws AlgebricksException, AsterixException {
-        secondaryFieldAccessEvalFactories = new ICopyEvaluatorFactory[numSecondaryKeys + numFilterFields];
+        secondaryFieldAccessEvalFactories = new IScalarEvaluatorFactory[numSecondaryKeys + numFilterFields];
         secondaryComparatorFactories = new IBinaryComparatorFactory[numSecondaryKeys + numPrimaryKeys];
         secondaryBloomFilterKeyFields = new int[numSecondaryKeys];
         ISerializerDeserializer[] secondaryRecFields = new ISerializerDeserializer[numPrimaryKeys + numSecondaryKeys

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
index d67ca0d..54cac09 100644
--- a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
+++ b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryIndexOperationsHelper.java
@@ -64,10 +64,8 @@ import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConst
 import org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraintHelper;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.Pair;
-import org.apache.hyracks.algebricks.core.algebra.expressions.LogicalExpressionJobGenToExpressionRuntimeProviderAdapter;
 import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
 import org.apache.hyracks.algebricks.data.ISerializerDeserializerProvider;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.evaluators.ColumnAccessEvalFactory;
@@ -126,7 +124,7 @@ public abstract class SecondaryIndexOperationsHelper {
     protected ITypeTraits[] secondaryTypeTraits;
     protected int[] secondaryBloomFilterKeyFields;
     protected RecordDescriptor secondaryRecDesc;
-    protected ICopyEvaluatorFactory[] secondaryFieldAccessEvalFactories;
+    protected IScalarEvaluatorFactory[] secondaryFieldAccessEvalFactories;
 
     protected IAsterixPropertiesProvider propertiesProvider;
     protected ILSMMergePolicyFactory mergePolicyFactory;
@@ -152,10 +150,10 @@ public abstract class SecondaryIndexOperationsHelper {
     }
 
     public static SecondaryIndexOperationsHelper createIndexOperationsHelper(IndexType indexType, String dataverseName,
-            String datasetName, String indexName, List<List<String>> secondaryKeyFields,
-            List<IAType> secondaryKeyTypes, boolean isEnforced, int gramLength, AqlMetadataProvider metadataProvider,
+            String datasetName, String indexName, List<List<String>> secondaryKeyFields, List<IAType> secondaryKeyTypes,
+            boolean isEnforced, int gramLength, AqlMetadataProvider metadataProvider,
             PhysicalOptimizationConfig physOptConf, ARecordType recType, ARecordType enforcedType)
-            throws AsterixException, AlgebricksException {
+                    throws AsterixException, AlgebricksException {
         IAsterixPropertiesProvider asterixPropertiesProvider = AsterixAppContextInfo.getInstance();
         SecondaryIndexOperationsHelper indexOperationsHelper = null;
         switch (indexType) {
@@ -286,8 +284,8 @@ public abstract class SecondaryIndexOperationsHelper {
                 throw new AlgebricksException(e);
             }
             primaryRecFields[i] = serdeProvider.getSerializerDeserializer(keyType);
-            primaryComparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE.getBinaryComparatorFactory(
-                    keyType, true);
+            primaryComparatorFactories[i] = AqlBinaryComparatorFactoryProvider.INSTANCE
+                    .getBinaryComparatorFactory(keyType, true);
             primaryTypeTraits[i] = AqlTypeTraitProvider.INSTANCE.getTypeTrait(keyType);
             primaryBloomFilterKeyFields[i] = i;
         }
@@ -300,8 +298,8 @@ public abstract class SecondaryIndexOperationsHelper {
             List<List<String>> secondaryKeyFields, List<IAType> secondaryKeyTypes, int gramLength,
             AqlMetadataProvider metadataProvider) throws AlgebricksException, AsterixException;
 
-    protected AbstractOperatorDescriptor createDummyKeyProviderOp(JobSpecification spec) throws AsterixException,
-            AlgebricksException {
+    protected AbstractOperatorDescriptor createDummyKeyProviderOp(JobSpecification spec)
+            throws AsterixException, AlgebricksException {
         // Build dummy tuple containing one field with a dummy value inside.
         ArrayTupleBuilder tb = new ArrayTupleBuilder(1);
         DataOutput dos = tb.getDataOutput();
@@ -345,12 +343,12 @@ public abstract class SecondaryIndexOperationsHelper {
                 primaryFileSplitProvider, primaryRecDesc.getTypeTraits(), primaryComparatorFactories,
                 primaryBloomFilterKeyFields, lowKeyFields, highKeyFields, true, true,
                 new LSMBTreeDataflowHelperFactory(new AsterixVirtualBufferCacheProvider(dataset.getDatasetId()),
-                        mergePolicyFactory, mergePolicyFactoryProperties, new PrimaryIndexOperationTrackerProvider(
-                                dataset.getDatasetId()), AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER,
-                        LSMBTreeIOOperationCallbackFactory.INSTANCE, storageProperties
-                                .getBloomFilterFalsePositiveRate(), true, filterTypeTraits, filterCmpFactories,
-                        primaryBTreeFields, primaryFilterFields, !temp), false, false, null,
-                searchCallbackFactory, null, null);
+                        mergePolicyFactory, mergePolicyFactoryProperties,
+                        new PrimaryIndexOperationTrackerProvider(dataset.getDatasetId()),
+                        AsterixRuntimeComponentsProvider.RUNTIME_PROVIDER, LSMBTreeIOOperationCallbackFactory.INSTANCE,
+                        storageProperties.getBloomFilterFalsePositiveRate(), true, filterTypeTraits, filterCmpFactories,
+                        primaryBTreeFields, primaryFilterFields, !temp),
+                false, false, null, searchCallbackFactory, null, null);
 
         AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, primarySearchOp,
                 primaryPartitionConstraint);
@@ -377,8 +375,7 @@ public abstract class SecondaryIndexOperationsHelper {
 
         IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[secondaryFieldAccessEvalFactories.length];
         for (int i = 0; i < secondaryFieldAccessEvalFactories.length; ++i) {
-            sefs[i] = new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter.ScalarEvaluatorFactoryAdapter(
-                    secondaryFieldAccessEvalFactories[i]);
+            sefs[i] = secondaryFieldAccessEvalFactories[i];
         }
         AssignRuntimeFactory assign = new AssignRuntimeFactory(outColumns, sefs, projectionList);
         AlgebricksMetaOperatorDescriptor asterixAssignOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
@@ -408,10 +405,10 @@ public abstract class SecondaryIndexOperationsHelper {
         for (int i = 0; i <= numPrimaryKeys; i++) {
             projectionList[i] = i;
         }
-        ICopyEvaluatorFactory[] castEvalFact = new ICopyEvaluatorFactory[] { new ColumnAccessEvalFactory(recordIdx) };
+        IScalarEvaluatorFactory[] castEvalFact = new IScalarEvaluatorFactory[] {
+                new ColumnAccessEvalFactory(recordIdx) };
         IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[1];
-        sefs[0] = new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter.ScalarEvaluatorFactoryAdapter(
-                castFuncDesc.createEvaluatorFactory(castEvalFact));
+        sefs[0] = castFuncDesc.createEvaluatorFactory(castEvalFact);
         AssignRuntimeFactory castAssign = new AssignRuntimeFactory(outColumns, sefs, projectionList);
         AlgebricksMetaOperatorDescriptor castRecAssignOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
                 new IPushRuntimeFactory[] { castAssign }, new RecordDescriptor[] { enforcedRecDesc });
@@ -433,7 +430,7 @@ public abstract class SecondaryIndexOperationsHelper {
 
     protected TreeIndexBulkLoadOperatorDescriptor createTreeIndexBulkLoadOp(JobSpecification spec,
             int numSecondaryKeyFields, IIndexDataflowHelperFactory dataflowHelperFactory, float fillFactor)
-            throws MetadataException, AlgebricksException {
+                    throws MetadataException, AlgebricksException {
         int[] fieldPermutation = new int[numSecondaryKeyFields + numPrimaryKeys + numFilterFields];
         for (int i = 0; i < fieldPermutation.length; i++) {
             fieldPermutation[i] = i;
@@ -450,19 +447,19 @@ public abstract class SecondaryIndexOperationsHelper {
 
     public AlgebricksMetaOperatorDescriptor createFilterNullsSelectOp(JobSpecification spec, int numSecondaryKeyFields)
             throws AlgebricksException {
-        ICopyEvaluatorFactory[] andArgsEvalFactories = new ICopyEvaluatorFactory[numSecondaryKeyFields];
+        IScalarEvaluatorFactory[] andArgsEvalFactories = new IScalarEvaluatorFactory[numSecondaryKeyFields];
         NotDescriptor notDesc = new NotDescriptor();
         IsNullDescriptor isNullDesc = new IsNullDescriptor();
         for (int i = 0; i < numSecondaryKeyFields; i++) {
             // Access column i, and apply 'is not null'.
             ColumnAccessEvalFactory columnAccessEvalFactory = new ColumnAccessEvalFactory(i);
-            ICopyEvaluatorFactory isNullEvalFactory = isNullDesc
-                    .createEvaluatorFactory(new ICopyEvaluatorFactory[] { columnAccessEvalFactory });
-            ICopyEvaluatorFactory notEvalFactory = notDesc
-                    .createEvaluatorFactory(new ICopyEvaluatorFactory[] { isNullEvalFactory });
+            IScalarEvaluatorFactory isNullEvalFactory = isNullDesc
+                    .createEvaluatorFactory(new IScalarEvaluatorFactory[] { columnAccessEvalFactory });
+            IScalarEvaluatorFactory notEvalFactory = notDesc
+                    .createEvaluatorFactory(new IScalarEvaluatorFactory[] { isNullEvalFactory });
             andArgsEvalFactories[i] = notEvalFactory;
         }
-        ICopyEvaluatorFactory selectCond = null;
+        IScalarEvaluatorFactory selectCond = null;
         if (numSecondaryKeyFields > 1) {
             // Create conjunctive condition where all secondary index keys must
             // satisfy 'is not null'.
@@ -471,9 +468,8 @@ public abstract class SecondaryIndexOperationsHelper {
         } else {
             selectCond = andArgsEvalFactories[0];
         }
-        StreamSelectRuntimeFactory select = new StreamSelectRuntimeFactory(
-                new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter.ScalarEvaluatorFactoryAdapter(selectCond),
-                null, AqlBinaryBooleanInspectorImpl.FACTORY, false, -1, null);
+        StreamSelectRuntimeFactory select = new StreamSelectRuntimeFactory(selectCond, null,
+                AqlBinaryBooleanInspectorImpl.FACTORY, false, -1, null);
         AlgebricksMetaOperatorDescriptor asterixSelectOp = new AlgebricksMetaOperatorDescriptor(spec, 1, 1,
                 new IPushRuntimeFactory[] { select }, new RecordDescriptor[] { secondaryRecDesc });
         AlgebricksPartitionConstraintHelper.setPartitionConstraintInJobSpec(spec, asterixSelectOp,
@@ -525,8 +521,7 @@ public abstract class SecondaryIndexOperationsHelper {
 
         IScalarEvaluatorFactory[] sefs = new IScalarEvaluatorFactory[secondaryFieldAccessEvalFactories.length];
         for (int i = 0; i < secondaryFieldAccessEvalFactories.length; ++i) {
-            sefs[i] = new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter.ScalarEvaluatorFactoryAdapter(
-                    secondaryFieldAccessEvalFactories[i]);
+            sefs[i] = secondaryFieldAccessEvalFactories[i];
         }
         //add External RIDs to the projection list
         for (int i = 0; i < numPrimaryKeys; i++) {
@@ -541,7 +536,7 @@ public abstract class SecondaryIndexOperationsHelper {
 
     protected ExternalIndexBulkModifyOperatorDescriptor createExternalIndexBulkModifyOp(JobSpecification spec,
             int numSecondaryKeyFields, IIndexDataflowHelperFactory dataflowHelperFactory, float fillFactor)
-            throws MetadataException, AlgebricksException {
+                    throws MetadataException, AlgebricksException {
         int[] fieldPermutation = new int[numSecondaryKeyFields + numPrimaryKeys];
         for (int i = 0; i < numSecondaryKeyFields + numPrimaryKeys; i++) {
             fieldPermutation[i] = i;
@@ -549,8 +544,9 @@ public abstract class SecondaryIndexOperationsHelper {
         // create a list of file ids
         int numOfDeletedFiles = 0;
         for (ExternalFile file : externalFiles) {
-            if (file.getPendingOp() == ExternalFilePendingOp.PENDING_DROP_OP)
+            if (file.getPendingOp() == ExternalFilePendingOp.PENDING_DROP_OP) {
                 numOfDeletedFiles++;
+            }
         }
         int[] deletedFiles = new int[numOfDeletedFiles];
         int i = 0;

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-app/src/main/java/org/apache/asterix/file/SecondaryInvertedIndexOperationsHelper.java
----------------------------------------------------------------------
diff --git a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryInvertedIndexOperationsHelper.java b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryInvertedIndexOperationsHelper.java
index 3521752..4b9eff7 100644
--- a/asterix-app/src/main/java/org/apache/asterix/file/SecondaryInvertedIndexOperationsHelper.java
+++ b/asterix-app/src/main/java/org/apache/asterix/file/SecondaryInvertedIndexOperationsHelper.java
@@ -43,7 +43,7 @@ import org.apache.hyracks.algebricks.core.jobgen.impl.ConnectorPolicyAssignmentP
 import org.apache.hyracks.algebricks.core.rewriter.base.PhysicalOptimizationConfig;
 import org.apache.hyracks.algebricks.data.ISerializerDeserializerProvider;
 import org.apache.hyracks.algebricks.data.ITypeTraitProvider;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.algebricks.runtime.base.IPushRuntimeFactory;
 import org.apache.hyracks.algebricks.runtime.operators.base.SinkRuntimeFactory;
 import org.apache.hyracks.algebricks.runtime.operators.meta.AlgebricksMetaOperatorDescriptor;
@@ -112,7 +112,7 @@ public class SecondaryInvertedIndexOperationsHelper extends SecondaryIndexOperat
         }
         // Prepare record descriptor used in the assign op, and the optional
         // select op.
-        secondaryFieldAccessEvalFactories = new ICopyEvaluatorFactory[numSecondaryKeys + numFilterFields];
+        secondaryFieldAccessEvalFactories = new IScalarEvaluatorFactory[numSecondaryKeys + numFilterFields];
         ISerializerDeserializer[] secondaryRecFields = new ISerializerDeserializer[numPrimaryKeys + numSecondaryKeys
                 + numFilterFields];
         ISerializerDeserializer[] enforcedRecFields = new ISerializerDeserializer[1 + numPrimaryKeys + numFilterFields];

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
----------------------------------------------------------------------
diff --git a/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
index 9406ef5..455e3da 100644
--- a/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/string/substring-after-4/substring-after-4.1.adm
@@ -1 +1 @@
-{ "result1": "HEllow", "result2": "HEllow", "result3": "", "result4": "", "result5": "" }
+{ "result1": "HEllow", "result2": null, "result3": null, "result4": "", "result5": null }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
----------------------------------------------------------------------
diff --git a/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm b/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
index 9ce64e4..eba5495 100644
--- a/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
+++ b/asterix-app/src/test/resources/runtimets/results/string/substring-before-3/substring-before-3.1.adm
@@ -1 +1 @@
-{ "result1": "", "result2": "", "result3": "", "result4": "", "result5": "" }
+{ "result1": "", "result2": null, "result3": null, "result4": "", "result5": null }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunction.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunction.java b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunction.java
index fd3d9e3..7f416c7 100755
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunction.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunction.java
@@ -30,10 +30,12 @@ import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.dataflow.value.ISerializerDeserializer;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
 
@@ -42,23 +44,22 @@ public abstract class ExternalFunction implements IExternalFunction {
     protected final IExternalFunctionInfo finfo;
     protected final IFunctionFactory externalFunctionFactory;
     protected final IExternalFunction externalFunction;
-    protected final ICopyEvaluatorFactory[] evaluatorFactories;
-    protected final IDataOutputProvider out;
-    protected final ArrayBackedValueStorage inputVal = new ArrayBackedValueStorage();
+    protected final IScalarEvaluatorFactory[] evaluatorFactories;
+    protected final IPointable inputVal = new VoidPointable();
+    protected final ArrayBackedValueStorage resultBuffer = new ArrayBackedValueStorage();
     protected final ArrayBackedValueStorage castBuffer = new ArrayBackedValueStorage();
-    protected final ICopyEvaluator[] argumentEvaluators;
+    protected final IScalarEvaluator[] argumentEvaluators;
     protected final JavaFunctionHelper functionHelper;
 
-    public ExternalFunction(IExternalFunctionInfo finfo, ICopyEvaluatorFactory args[],
-            IDataOutputProvider outputProvider) throws AlgebricksException {
+    public ExternalFunction(IExternalFunctionInfo finfo, IScalarEvaluatorFactory args[], IHyracksTaskContext context)
+            throws AlgebricksException {
         this.finfo = finfo;
         this.evaluatorFactories = args;
-        this.out = outputProvider;
-        argumentEvaluators = new ICopyEvaluator[args.length];
+        argumentEvaluators = new IScalarEvaluator[args.length];
         for (int i = 0; i < args.length; i++) {
-            argumentEvaluators[i] = args[i].createEvaluator(inputVal);
+            argumentEvaluators[i] = args[i].createScalarEvaluator(context);
         }
-        functionHelper = new JavaFunctionHelper(finfo, outputProvider);
+        functionHelper = new JavaFunctionHelper(finfo, resultBuffer);
 
         String[] fnameComponents = finfo.getFunctionIdentifier().getName().split("#");
         String functionLibary = fnameComponents[0];
@@ -85,8 +86,7 @@ public abstract class ExternalFunction implements IExternalFunction {
 
     public void setArguments(IFrameTupleReference tuple) throws AlgebricksException, IOException, AsterixException {
         for (int i = 0; i < evaluatorFactories.length; i++) {
-            inputVal.reset();
-            argumentEvaluators[i].evaluate(tuple);
+            argumentEvaluators[i].evaluate(tuple, inputVal);
 
             // Type-cast the source array based on the input type that this function wants to receive.
             ATypeTag targetTypeTag = finfo.getParamList().get(i).getTypeTag();

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionDescriptorProvider.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionDescriptorProvider.java b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionDescriptorProvider.java
index be9f9c1..877ce77 100755
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionDescriptorProvider.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionDescriptorProvider.java
@@ -25,7 +25,7 @@ import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicD
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 
 public class ExternalFunctionDescriptorProvider {
 
@@ -48,10 +48,10 @@ public class ExternalFunctionDescriptorProvider {
 class ExternalScalarFunctionDescriptor extends AbstractScalarFunctionDynamicDescriptor implements IFunctionDescriptor {
     private static final long serialVersionUID = 1L;
     private final IFunctionInfo finfo;
-    private ICopyEvaluatorFactory evaluatorFactory;
+    private IScalarEvaluatorFactory evaluatorFactory;
 
     @Override
-    public ICopyEvaluatorFactory createEvaluatorFactory(ICopyEvaluatorFactory[] args) throws AlgebricksException {
+    public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) throws AlgebricksException {
         evaluatorFactory = new ExternalScalarFunctionEvaluatorFactory((IExternalFunctionInfo) finfo, args);
         return evaluatorFactory;
     }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionProvider.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionProvider.java b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionProvider.java
index e2cf013..3dea50c 100755
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionProvider.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalFunctionProvider.java
@@ -24,19 +24,19 @@ import org.apache.asterix.external.api.IFunctionHelper;
 import org.apache.asterix.om.functions.IExternalFunctionInfo;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
-import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
 
 public class ExternalFunctionProvider {
 
     public static IExternalFunction getExternalFunctionEvaluator(IExternalFunctionInfo finfo,
-            ICopyEvaluatorFactory args[], IDataOutputProvider outputProvider) throws AlgebricksException {
+            IScalarEvaluatorFactory args[], IHyracksTaskContext context) throws AlgebricksException {
         switch (finfo.getKind()) {
             case SCALAR:
-                return new ExternalScalarFunction(finfo, args, outputProvider);
+                return new ExternalScalarFunction(finfo, args, context);
             case AGGREGATE:
             case UNNEST:
                 throw new IllegalArgumentException(" UDF of kind" + finfo.getKind() + " not supported.");
@@ -46,10 +46,11 @@ public class ExternalFunctionProvider {
     }
 }
 
-class ExternalScalarFunction extends ExternalFunction implements IExternalScalarFunction, ICopyEvaluator {
-    public ExternalScalarFunction(IExternalFunctionInfo finfo, ICopyEvaluatorFactory args[],
-            IDataOutputProvider outputProvider) throws AlgebricksException {
-        super(finfo, args, outputProvider);
+class ExternalScalarFunction extends ExternalFunction implements IExternalScalarFunction, IScalarEvaluator {
+
+    public ExternalScalarFunction(IExternalFunctionInfo finfo, IScalarEvaluatorFactory args[],
+            IHyracksTaskContext context) throws AlgebricksException {
+        super(finfo, args, context);
         try {
             initialize(functionHelper);
         } catch (Exception e) {
@@ -58,11 +59,12 @@ class ExternalScalarFunction extends ExternalFunction implements IExternalScalar
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
         try {
             setArguments(tuple);
             evaluate(functionHelper);
             functionHelper.reset();
+            result.set(resultBuffer.getByteArray(), resultBuffer.getStartOffset(), resultBuffer.getLength());
         } catch (Exception e) {
             e.printStackTrace();
             throw new AlgebricksException(e);
@@ -77,9 +79,9 @@ class ExternalScalarFunction extends ExternalFunction implements IExternalScalar
          * or the result object is null we let Hyracks storage manager know
          * we want to discard a null object
          */
-        byte byteOutput = ((ArrayBackedValueStorage) out).getByteArray()[0];
+        byte byteOutput = resultBuffer.getByteArray()[0];
         if (!argumentProvider.isValidResult() || byteOutput == ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
-            out.getDataOutput().writeByte(ATypeTag.SERIALIZED_NULL_TYPE_TAG);
+            resultBuffer.getDataOutput().writeByte(ATypeTag.SERIALIZED_NULL_TYPE_TAG);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalScalarFunctionEvaluatorFactory.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalScalarFunctionEvaluatorFactory.java b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalScalarFunctionEvaluatorFactory.java
index c7f98a8..7c1ce4b 100755
--- a/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalScalarFunctionEvaluatorFactory.java
+++ b/asterix-external-data/src/main/java/org/apache/asterix/external/library/ExternalScalarFunctionEvaluatorFactory.java
@@ -20,25 +20,25 @@ package org.apache.asterix.external.library;
 
 import org.apache.asterix.om.functions.IExternalFunctionInfo;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluator;
-import org.apache.hyracks.algebricks.runtime.base.ICopyEvaluatorFactory;
-import org.apache.hyracks.data.std.api.IDataOutputProvider;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
 
-public class ExternalScalarFunctionEvaluatorFactory implements ICopyEvaluatorFactory {
+public class ExternalScalarFunctionEvaluatorFactory implements IScalarEvaluatorFactory {
 
     private static final long serialVersionUID = 1L;
     private final IExternalFunctionInfo finfo;
-    private final ICopyEvaluatorFactory[] args;
+    private final IScalarEvaluatorFactory[] args;
 
-    public ExternalScalarFunctionEvaluatorFactory(IExternalFunctionInfo finfo, ICopyEvaluatorFactory[] args)
+    public ExternalScalarFunctionEvaluatorFactory(IExternalFunctionInfo finfo, IScalarEvaluatorFactory[] args)
             throws AlgebricksException {
         this.finfo = finfo;
         this.args = args;
     }
 
     @Override
-    public ICopyEvaluator createEvaluator(IDataOutputProvider output) throws AlgebricksException {
-        return (ExternalScalarFunction) ExternalFunctionProvider.getExternalFunctionEvaluator(finfo, args, output);
+    public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+        return (ExternalScalarFunction) ExternalFunctionProvider.getExternalFunctionEvaluator(finfo, args, ctx);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityMetricEditDistance.java
----------------------------------------------------------------------
diff --git a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityMetricEditDistance.java b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityMetricEditDistance.java
index ea57fd2..9dce89e 100644
--- a/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityMetricEditDistance.java
+++ b/asterix-fuzzyjoin/src/main/java/org/apache/asterix/fuzzyjoin/similarity/SimilarityMetricEditDistance.java
@@ -155,13 +155,12 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
     }
 
     // faster implementation for common case of string edit distance
-    public int UTF8StringEditDistance(byte[] bytes, int fsStart, int ssStart) {
+    public int UTF8StringEditDistance(byte[] leftBytes, int fsStart, byte[] rightBytes, int ssStart) {
+        int fsLen = UTF8StringUtil.getStringLength(leftBytes, fsStart);
+        int ssLen = UTF8StringUtil.getStringLength(rightBytes, ssStart);
 
-        int fsLen = UTF8StringUtil.getStringLength(bytes, fsStart);
-        int ssLen = UTF8StringUtil.getStringLength(bytes, ssStart);
-
-        int fsUtfLen = UTF8StringUtil.getUTFLength(bytes, fsStart);
-        int ssUtfLen = UTF8StringUtil.getUTFLength(bytes, ssStart);
+        int fsUtfLen = UTF8StringUtil.getUTFLength(leftBytes, fsStart);
+        int ssUtfLen = UTF8StringUtil.getUTFLength(rightBytes, ssStart);
         int fsMetaLen = UTF8StringUtil.getNumBytesToStoreLength(fsUtfLen);
         int ssMetaLen = UTF8StringUtil.getNumBytesToStoreLength(ssUtfLen);
 
@@ -186,35 +185,30 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
         int fsPos = fsDataStart;
         for (int i = 1; i <= fsLen; i++) {
             matrix[currRow][0] = i;
-            char fsChar = Character.toLowerCase(UTF8StringUtil.charAt(bytes, fsPos));
-
+            char fsChar = Character.toLowerCase(UTF8StringUtil.charAt(leftBytes, fsPos));
             int ssPos = ssDataStart;
             for (int j = 1; j <= ssLen; j++) {
-                char ssChar = Character.toLowerCase(UTF8StringUtil.charAt(bytes, ssPos));
+                char ssChar = Character.toLowerCase(UTF8StringUtil.charAt(rightBytes, ssPos));
 
                 matrix[currRow][j] = Math.min(Math.min(matrix[prevRow][j] + 1, matrix[currRow][j - 1] + 1),
                         matrix[prevRow][j - 1] + (fsChar == ssChar ? 0 : 1));
 
-                ssPos += UTF8StringUtil.charSize(bytes, ssPos);
+                ssPos += UTF8StringUtil.charSize(rightBytes, ssPos);
             }
-
-            fsPos += UTF8StringUtil.charSize(bytes, fsPos);
-
+            fsPos += UTF8StringUtil.charSize(leftBytes, fsPos);
             int tmp = currRow;
             currRow = prevRow;
             prevRow = tmp;
         }
-
         return matrix[prevRow][ssLen];
     }
 
-    public int UTF8StringEditDistance(byte[] bytes, int fsStart, int ssStart, int edThresh) {
+    public int UTF8StringEditDistance(byte[] bytesLeft, int fsStart, byte[] bytesRight, int ssStart, int edThresh) {
+        int fsStrLen = UTF8StringUtil.getStringLength(bytesLeft, fsStart);
+        int ssStrLen = UTF8StringUtil.getStringLength(bytesRight, ssStart);
 
-        int fsStrLen = UTF8StringUtil.getStringLength(bytes, fsStart);
-        int ssStrLen = UTF8StringUtil.getStringLength(bytes, ssStart);
-
-        int fsUtfLen = UTF8StringUtil.getUTFLength(bytes, fsStart);
-        int ssUtfLen = UTF8StringUtil.getUTFLength(bytes, ssStart);
+        int fsUtfLen = UTF8StringUtil.getUTFLength(bytesLeft, fsStart);
+        int ssUtfLen = UTF8StringUtil.getUTFLength(bytesRight, ssStart);
         int fsMetaLen = UTF8StringUtil.getNumBytesToStoreLength(fsUtfLen);
         int ssMetaLen = UTF8StringUtil.getNumBytesToStoreLength(ssUtfLen);
 
@@ -231,22 +225,22 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
         int fsPos = fsStart + fsMetaLen;
         int fsEnd = fsPos + fsUtfLen;;
         while (fsPos < fsEnd) {
-            char c = Character.toLowerCase(UTF8StringUtil.charAt(bytes, fsPos));
+            char c = Character.toLowerCase(UTF8StringUtil.charAt(bytesLeft, fsPos));
             if (c < 128) {
                 fsLcCount[c]++;
             }
-            fsPos += UTF8StringUtil.charSize(bytes, fsPos);
+            fsPos += UTF8StringUtil.charSize(bytesLeft, fsPos);
         }
 
         // compute letter counts for second string
         int ssPos = ssStart + ssMetaLen;
         int ssEnd = ssPos + ssUtfLen;
         while (ssPos < ssEnd) {
-            char c = Character.toLowerCase(UTF8StringUtil.charAt(bytes, ssPos));
+            char c = Character.toLowerCase(UTF8StringUtil.charAt(bytesRight, ssPos));
             if (c < 128) {
                 ssLcCount[c]++;
             }
-            ssPos += UTF8StringUtil.charSize(bytes, ssPos);
+            ssPos += UTF8StringUtil.charSize(bytesRight, ssPos);
         }
 
         // apply filter
@@ -266,7 +260,7 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
             }
         }
 
-        int ed = UTF8StringEditDistance(bytes, fsStart, ssStart);
+        int ed = UTF8StringEditDistance(bytesLeft, fsStart, bytesRight, ssStart);
         if (ed > edThresh) {
             return -1;
         } else {
@@ -275,15 +269,16 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
     }
 
     // checks whether the first string contains a similar string to the second string
-    public int UTF8StringEditDistanceContains(byte[] bytes, int stringStart, int patternStart, int edThresh) {
+    public int UTF8StringEditDistanceContains(byte[] strBytes, int stringStart, byte[] pattenBytes, int patternStart,
+            int edThresh) {
 
-        int stringLen = UTF8StringUtil.getStringLength(bytes, stringStart);
-        int patternLen = UTF8StringUtil.getStringLength(bytes, patternStart);
+        int stringLen = UTF8StringUtil.getStringLength(strBytes, stringStart);
+        int patternLen = UTF8StringUtil.getStringLength(pattenBytes, patternStart);
 
-        int stringUTFLen = UTF8StringUtil.getUTFLength(bytes, stringStart);
+        int stringUTFLen = UTF8StringUtil.getUTFLength(strBytes, stringStart);
         int stringMetaLen = UTF8StringUtil.getNumBytesToStoreLength(stringUTFLen);
 
-        int patternUTFLen = UTF8StringUtil.getUTFLength(bytes, patternStart);
+        int patternUTFLen = UTF8StringUtil.getUTFLength(pattenBytes, patternStart);
         int patternMetaLen = UTF8StringUtil.getNumBytesToStoreLength(patternUTFLen);
 
         // reuse existing matrix if possible
@@ -292,7 +287,7 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
             matrix = new int[rows][cols];
         }
 
-        int stringDataStart = stringStart +  stringMetaLen;
+        int stringDataStart = stringStart + stringMetaLen;
         int patternDataStart = patternStart + patternMetaLen;
 
         // init matrix
@@ -307,24 +302,20 @@ public class SimilarityMetricEditDistance implements IGenericSimilarityMetric {
         int stringPos = stringDataStart;
         for (int i = 1; i <= stringLen; i++) {
             matrix[currRow][0] = 0;
-            char stringChar = Character.toLowerCase(UTF8StringUtil.charAt(bytes, stringPos));
+            char stringChar = Character.toLowerCase(UTF8StringUtil.charAt(strBytes, stringPos));
 
             int patternPos = patternDataStart;
             for (int j = 1; j <= patternLen; j++) {
-                char patternChar = Character.toLowerCase(UTF8StringUtil.charAt(bytes, patternPos));
-
+                char patternChar = Character.toLowerCase(UTF8StringUtil.charAt(pattenBytes, patternPos));
                 matrix[currRow][j] = Math.min(Math.min(matrix[prevRow][j] + 1, matrix[currRow][j - 1] + 1),
                         matrix[prevRow][j - 1] + (stringChar == patternChar ? 0 : 1));
-
-                patternPos += UTF8StringUtil.charSize(bytes, patternPos);
-
+                patternPos += UTF8StringUtil.charSize(pattenBytes, patternPos);
                 if (j == patternLen && matrix[currRow][patternLen] < minEd) {
                     minEd = matrix[currRow][patternLen];
                 }
             }
 
-            stringPos += UTF8StringUtil.charSize(bytes, stringPos);
-
+            stringPos += UTF8StringUtil.charSize(strBytes, stringPos);
             int tmp = currRow;
             currRow = prevRow;
             prevRow = tmp;

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java
----------------------------------------------------------------------
diff --git a/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java b/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java
index 2b05761..59e669a 100644
--- a/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java
+++ b/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java
@@ -77,13 +77,15 @@ public abstract class AbstractListBuilder implements IAsterixListBuilder {
     @Override
     public void addItem(IValueReference item) throws HyracksDataException {
         try {
-            if (!fixedSize && (item.getByteArray()[0] != ATypeTag.SERIALIZED_NULL_TYPE_TAG || itemTypeTag == ATypeTag.ANY))
+            if (!fixedSize && (item.getByteArray()[item.getStartOffset()] != ATypeTag.SERIALIZED_NULL_TYPE_TAG
+                    || itemTypeTag == ATypeTag.ANY)) {
                 this.offsets.add(outputStorage.getLength());
-            if (itemTypeTag == ATypeTag.ANY
-                    || (itemTypeTag == ATypeTag.NULL && item.getByteArray()[0] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)) {
+            }
+            if (itemTypeTag == ATypeTag.ANY || (itemTypeTag == ATypeTag.NULL
+                    && item.getByteArray()[item.getStartOffset()] == ATypeTag.SERIALIZED_NULL_TYPE_TAG)) {
                 this.numberOfItems++;
                 this.outputStream.write(item.getByteArray(), item.getStartOffset(), item.getLength());
-            } else if (item.getByteArray()[0] != ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
+            } else if (item.getByteArray()[item.getStartOffset()] != ATypeTag.SERIALIZED_NULL_TYPE_TAG) {
                 this.numberOfItems++;
                 this.outputStream.write(item.getByteArray(), item.getStartOffset() + 1, item.getLength() - 1);
             }
@@ -95,10 +97,12 @@ public abstract class AbstractListBuilder implements IAsterixListBuilder {
     @Override
     public void write(DataOutput out, boolean writeTypeTag) throws HyracksDataException {
         try {
-            if (!fixedSize)
+            if (!fixedSize) {
                 metadataInfoSize += offsets.size() * 4;
-            if (offsetArray == null || offsetArray.length < metadataInfoSize)
+            }
+            if (offsetArray == null || offsetArray.length < metadataInfoSize) {
                 offsetArray = new byte[metadataInfoSize];
+            }
 
             SerializerDeserializerUtil.writeIntToByteArray(offsetArray,
                     headerSize + metadataInfoSize + outputStorage.getLength(), offsetPosition);

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ABinaryComparator.java
----------------------------------------------------------------------
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ABinaryComparator.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ABinaryComparator.java
index c69d4cd..ec337eb 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ABinaryComparator.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/ABinaryComparator.java
@@ -32,7 +32,8 @@ public abstract class ABinaryComparator implements IBinaryComparator {
 
     public static ComparableResultCode isComparable(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
         // NULL Check. If one type is NULL, then we return NULL
-        if (b1[s1] == ATypeTag.NULL.serialize() || b2[s2] == ATypeTag.NULL.serialize() || b1[s1] == 0 || b1[s2] == 0) {
+        if (b1[s1] == ATypeTag.SERIALIZED_NULL_TYPE_TAG || b2[s2] == ATypeTag.SERIALIZED_NULL_TYPE_TAG || b1[s1] == 0
+                || b2[s2] == 0) {
             return ComparableResultCode.UNKNOWN;
         }
 
@@ -49,6 +50,7 @@ public abstract class ABinaryComparator implements IBinaryComparator {
 
     }
 
+    @Override
     public abstract int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) throws HyracksDataException;
 
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
----------------------------------------------------------------------
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
index fba898d..364b2d6 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/AOrderedListSerializerDeserializer.java
@@ -118,10 +118,6 @@ public class AOrderedListSerializerDeserializer implements ISerializerDeserializ
         return AInt32SerializerDeserializer.getInt(serOrderedList, offset + 1);
     }
 
-    public static int getNumberOfItems(byte[] serOrderedList) {
-        return getNumberOfItems(serOrderedList, 0);
-    }
-
     public static int getNumberOfItems(byte[] serOrderedList, int offset) {
         if (serOrderedList[offset] == ATypeTag.ORDEREDLIST.serialize())
             // 6 = tag (1) + itemTag (1) + list size (4)
@@ -144,8 +140,4 @@ public class AOrderedListSerializerDeserializer implements ISerializerDeserializ
             return -1;
     }
 
-    public static int getItemOffset(byte[] serOrderedList, int itemIndex) throws AsterixException {
-        return getItemOffset(serOrderedList, 0, itemIndex);
-    }
-
 }

http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/0ae30836/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
----------------------------------------------------------------------
diff --git a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
index 53943b8..b65a12d 100644
--- a/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
+++ b/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/serde/ARecordSerializerDeserializer.java
@@ -105,10 +105,12 @@ public class ARecordSerializerDeserializer implements ISerializerDeserializer<AR
             } else {
                 if (recordType.isOpen()) {
                     isExpanded = in.readBoolean();
-                    if (isExpanded)
+                    if (isExpanded) {
                         in.readInt(); // openPartOffset
-                } else
+                    }
+                } else {
                     isExpanded = false;
+                }
             }
             IAObject[] closedFields = null;
             if (numberOfSchemaFields > 0) {
@@ -232,57 +234,64 @@ public class ARecordSerializerDeserializer implements ISerializerDeserializer<AR
                     if (nullBitmapSize > 0) {
                         // 14 = tag (1) + record Size (4) + isExpanded (1) +
                         // offset of openPart (4) + number of closed fields (4)
-                        if ((serRecord[14 + offset + fieldId / 8] & (1 << (7 - (fieldId % 8)))) == 0)
+                        if ((serRecord[14 + offset + fieldId / 8] & (1 << (7 - (fieldId % 8)))) == 0) {
                             // the field value is null
                             return 0;
+                        }
                     }
-                    return AInt32SerializerDeserializer.getInt(serRecord, 14 + offset + nullBitmapSize + (4 * fieldId));
+                    return offset + AInt32SerializerDeserializer.getInt(serRecord,
+                            14 + offset + nullBitmapSize + (4 * fieldId));
                 } else {
                     if (nullBitmapSize > 0) {
                         // 9 = tag (1) + record Size (4) + isExpanded (1) +
                         // number of closed fields (4)
-                        if ((serRecord[10 + offset + fieldId / 8] & (1 << (7 - (fieldId % 8)))) == 0)
+                        if ((serRecord[10 + offset + fieldId / 8] & (1 << (7 - (fieldId % 8)))) == 0) {
                             // the field value is null
                             return 0;
+                        }
                     }
-                    return AInt32SerializerDeserializer.getInt(serRecord, 10 + offset + nullBitmapSize + (4 * fieldId));
+                    return offset + AInt32SerializerDeserializer.getInt(serRecord,
+                            10 + offset + nullBitmapSize + (4 * fieldId));
                 }
-            } else
+            } else {
                 return -1;
+            }
         } else {
-            if (serRecord[0 + offset] == ATypeTag.RECORD.serialize()) {
-                if (nullBitmapSize > 0)
+            if (serRecord[offset] == ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
+                if (nullBitmapSize > 0) {
                     // 9 = tag (1) + record Size (4) + number of closed fields
                     // (4)
-                    if ((serRecord[9 + offset + fieldId / 8] & (1 << (7 - (fieldId % 8)))) == 0)
+                    if ((serRecord[9 + offset + fieldId / 8] & (1 << (7 - (fieldId % 8)))) == 0) {
                         // the field value is null
                         return 0;
-                return AInt32SerializerDeserializer.getInt(serRecord, 9 + offset + nullBitmapSize + (4 * fieldId));
-            } else
+                    }
+                }
+                return offset
+                        + AInt32SerializerDeserializer.getInt(serRecord, 9 + offset + nullBitmapSize + (4 * fieldId));
+            } else {
                 return -1;
+            }
         }
     }
 
-    public static final int getFieldOffsetById(byte[] serRecord, int fieldId, int nullBitmapSize, boolean isOpen) {
-        return getFieldOffsetById(serRecord, 0, fieldId, nullBitmapSize, isOpen);
-    }
-
-    public static final int getFieldOffsetByName(byte[] serRecord, byte[] fieldName) throws HyracksDataException {
-
+    public static final int getFieldOffsetByName(byte[] serRecord, int start, int len, byte[] fieldName, int nstart)
+            throws HyracksDataException {
         int openPartOffset = 0;
-        if (serRecord[0] == ATypeTag.RECORD.serialize())
+        if (serRecord[start] == ATypeTag.SERIALIZED_RECORD_TYPE_TAG) {
             // 5 is the index of the byte that determines whether the record is
             // expanded or not, i.e. it has an open part.
-            if (serRecord[5] == 1) { // true
+            if (serRecord[start + 5] == 1) { // true
                 // 6 is the index of the first byte of the openPartOffset value.
-                openPartOffset = AInt32SerializerDeserializer.getInt(serRecord, 6);
-            } else
+                openPartOffset = start + AInt32SerializerDeserializer.getInt(serRecord, start + 6);
+            } else {
                 return -1; // this record does not have an open part
-        else
+            }
+        } else {
             return -1; // this record does not have an open part
+        }
 
         int numberOfOpenField = AInt32SerializerDeserializer.getInt(serRecord, openPartOffset);
-        int fieldUtflength = UTF8StringUtil.getUTFLength(fieldName, 1);
+        int fieldUtflength = UTF8StringUtil.getUTFLength(fieldName, nstart + 1);
         int fieldUtfMetaLen = UTF8StringUtil.getNumBytesToStoreLength(fieldUtflength);
 
         IBinaryHashFunction utf8HashFunction = AqlBinaryHashFunctionFactoryProvider.UTF8STRING_POINTABLE_INSTANCE
@@ -291,7 +300,7 @@ public class ARecordSerializerDeserializer implements ISerializerDeserializer<AR
         IBinaryComparator utf8BinaryComparator = AqlBinaryComparatorFactoryProvider.UTF8STRING_POINTABLE_INSTANCE
                 .createBinaryComparator();
 
-        int fieldNameHashCode = utf8HashFunction.hash(fieldName, 1, fieldUtflength + fieldUtfMetaLen);
+        int fieldNameHashCode = utf8HashFunction.hash(fieldName, nstart + 1, fieldUtflength + fieldUtfMetaLen);
 
         int offset = openPartOffset + 4;
         int fieldOffset = -1;
@@ -303,29 +312,32 @@ public class ARecordSerializerDeserializer implements ISerializerDeserializer<AR
             // 8 = hash code (4) + offset to the (name + tag + value ) of the field (4).
             int h = AInt32SerializerDeserializer.getInt(serRecord, offset + (8 * mid));
             if (h == fieldNameHashCode) {
-                fieldOffset = AInt32SerializerDeserializer.getInt(serRecord, offset + (8 * mid) + 4);
+                fieldOffset = start + AInt32SerializerDeserializer.getInt(serRecord, offset + (8 * mid) + 4);
                 // the utf8 comparator do not require to put the precise length, we can just pass a estimated limit.
-                if (utf8BinaryComparator.compare(serRecord, fieldOffset, serRecord.length, fieldName, 1,
-                        fieldUtflength + fieldUtfMetaLen) == 0)
+                if (utf8BinaryComparator.compare(serRecord, fieldOffset, len, fieldName, nstart + 1,
+                        fieldUtflength + fieldUtfMetaLen) == 0) {
                     // since they are equal, we can directly use the meta length and the utf length.
                     return fieldOffset + fieldUtfMetaLen + fieldUtflength;
-                else { // this else part has not been tested yet
+                } else { // this else part has not been tested yet
                     for (int j = mid + 1; j < numberOfOpenField; j++) {
                         h = AInt32SerializerDeserializer.getInt(serRecord, offset + (8 * j));
                         if (h == fieldNameHashCode) {
-                            fieldOffset = AInt32SerializerDeserializer.getInt(serRecord, offset + (8 * j) + 4);
-                            if (utf8BinaryComparator.compare(serRecord, fieldOffset, serRecord.length, fieldName, 1,
-                                    fieldUtflength) == 0)
+                            fieldOffset = start + AInt32SerializerDeserializer.getInt(serRecord, offset + (8 * j) + 4);
+                            if (utf8BinaryComparator.compare(serRecord, fieldOffset, len, fieldName, nstart + 1,
+                                    fieldUtflength) == 0) {
                                 return fieldOffset + fieldUtfMetaLen + fieldUtflength;
-                        } else
+                            }
+                        } else {
                             break;
+                        }
                     }
                 }
             }
-            if (fieldNameHashCode > h)
+            if (fieldNameHashCode > h) {
                 low = mid + 1;
-            else
+            } else {
                 high = mid - 1;
+            }
 
         }
         return -1; // no field with this name.