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/05/24 01:31:40 UTC
[22/22] incubator-asterixdb git commit: ASTERIXDB-1228: Add MISSING
into the data model.
ASTERIXDB-1228: Add MISSING into the data model.
1. MISSING repsents the value of a non-existing field in a record
or an out-of-bound index access of a collection;
2. NULL represents that the value of an optional field in a record
is unknown or the value of existing collection entry is unknown.
3. Unit tests for all missing/null-in-missing/null-out scalar functions.
Change-Id: Ia49ed8474bfc5d6604231819065117468c5b0897
Reviewed-on: https://asterix-gerrit.ics.uci.edu/846
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/535d86b5
Tree: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/tree/535d86b5
Diff: http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/diff/535d86b5
Branch: refs/heads/master
Commit: 535d86b56d3cd525b3f36a2b56143d8f7dd075c5
Parents: 09d4f9f
Author: Yingyi Bu <yi...@couchbase.com>
Authored: Mon May 23 16:44:25 2016 -0700
Committer: Yingyi Bu <bu...@gmail.com>
Committed: Mon May 23 18:31:06 2016 -0700
----------------------------------------------------------------------
.../jobgen/QueryLogicalExpressionJobGen.java | 29 +-
.../rules/ByNameToByIndexFieldAccessRule.java | 68 ++-
.../rules/CheckFilterExpressionTypeRule.java | 4 +-
.../optimizer/rules/ConstantFoldingRule.java | 12 +-
.../asterix/optimizer/rules/FuzzyJoinRule.java | 6 +-
.../rules/InlineUnnestFunctionRule.java | 24 +-
.../rules/IntroduceAutogenerateIDRule.java | 2 +-
...eDynamicTypeCastForExternalFunctionRule.java | 12 +-
.../rules/IntroduceDynamicTypeCastRule.java | 22 +-
.../rules/IntroduceEnforcedListTypeRule.java | 4 +-
...IntroduceSecondaryIndexInsertDeleteRule.java | 14 +-
.../IntroduceStaticTypeCastForInsertRule.java | 4 +-
.../rules/ReplaceSinkOpWithCommitOpRule.java | 18 +-
.../rules/SetClosedRecordConstructorsRule.java | 53 +-
.../am/AbstractIntroduceAccessMethodRule.java | 2 +-
.../optimizer/rules/am/AccessMethodUtils.java | 4 +-
.../rules/am/IntroduceJoinAccessMethodRule.java | 2 +-
.../rules/am/InvertedIndexAccessMethod.java | 8 +-
...ineSubplanInputForNestedTupleSourceRule.java | 6 +-
.../rules/typecast/StaticTypeCastUtil.java | 70 +--
.../asterix/translator/ConstantHelper.java | 34 +-
.../LangExpressionToPlanTranslator.java | 1 +
.../asterix/translator/TypeTranslator.java | 26 +-
.../translator/util/FunctionCollection.java | 495 ++++++++++---------
.../asterix/translator/util/ValidateUtil.java | 4 +-
.../apache/asterix/api/common/APIFramework.java | 12 +-
.../file/SecondaryIndexOperationsHelper.java | 6 +-
.../apache/asterix/runtime/NullMissingTest.java | 105 ++++
.../metadata_datatype/metadata_datatype.1.adm | 3 +-
.../has-param1/has-param1.3.query.aql | 4 +-
.../null-missing/array/array.1.query.sqlpp | 20 +
.../null-missing/boolean/boolean.1.query.sqlpp | 37 ++
.../null-missing/ceil/ceil.1.query.sqlpp | 23 +
.../field-access/field-access.1.query.sqlpp | 23 +
.../null-missing/length/length.1.query.sqlpp | 23 +
.../null-missing/lower/lower.1.query.sqlpp | 23 +
.../scan-collection.1.query.sqlpp | 24 +
.../null-missing/substr/substr.1.query.sqlpp | 43 ++
.../null-missing/upper/upper.1.query.sqlpp | 23 +
.../queries_sqlpp/null/ceil/ceil.1.query.sqlpp | 20 -
.../null/length/length.1.query.sqlpp | 20 -
.../null/lower/lower.1.query.sqlpp | 20 -
.../null/substr/substr.1.query.sqlpp | 31 --
.../null/upper/upper.1.query.sqlpp | 20 -
.../has-param1/has-param1.3.query.sqlpp | 2 +-
.../tinysocial-suite.12.query.sqlpp | 2 +-
.../tinysocial-suite.13.query.sqlpp | 2 +-
.../results/custord/order_q_04/order_q_04.1.adm | 8 +-
.../results/custord/order_q_05/order_q_05.1.adm | 8 +-
.../results/null-missing/array/array.1.adm | 1 +
.../results/null-missing/boolean/boolean.1.adm | 1 +
.../results/null-missing/ceil/ceil.1.adm | 1 +
.../field-access/field-access.1.adm | 1 +
.../results/null-missing/length/length.1.adm | 1 +
.../results/null-missing/lower/lower.1.adm | 1 +
.../scan-collection/scan-collection.1.adm | 1 +
.../results/null-missing/substr/substr.1.adm | 1 +
.../results/null-missing/upper/upper.1.adm | 1 +
.../runtimets/results/null/ceil/ceil.1.adm | 1 -
.../runtimets/results/null/length/length.1.adm | 1 -
.../runtimets/results/null/lower/lower.1.adm | 1 -
.../runtimets/results/null/substr/substr.1.adm | 1 -
.../runtimets/results/null/upper/upper.1.adm | 1 -
.../query-ASTERIXDB-1329.24.adm | 18 +-
.../opentype_orderby_01.1.adm | 20 +-
.../semistructured/has-param1/has-param1.3.ast | 2 +-
.../tinysocial-suite.12.ast | 2 +-
.../tinysocial-suite.13.ast | 2 +-
.../resources/runtimets/testsuite_sqlpp.xml | 32 +-
...ixLSMTreeInsertDeleteOperatorDescriptor.java | 5 +-
.../adapter/factory/LookupAdapterFactory.java | 16 +-
.../external/dataset/adapter/LookupAdapter.java | 22 +-
.../external/indexing/RecordIdReader.java | 4 +-
.../library/ExternalFunctionProvider.java | 8 +-
.../external/library/JTypeObjectFactory.java | 15 +-
.../external/library/java/JObjectUtil.java | 36 +-
.../asterix/external/library/java/JObjects.java | 2 +-
.../ExternalBTreeSearchOperatorDescriptor.java | 8 +-
...ExternalBTreeSearchOperatorNodePushable.java | 12 +-
.../ExternalLookupOperatorDescriptor.java | 10 +-
.../ExternalRTreeSearchOperatorDescriptor.java | 8 +-
...ExternalRTreeSearchOperatorNodePushable.java | 12 +-
.../operators/IndexInfoOperatorDescriptor.java | 6 +-
.../asterix/external/parser/ADMDataParser.java | 30 +-
.../external/parser/DelimitedDataParser.java | 4 +-
.../external/parser/HiveRecordParser.java | 2 +-
.../parser/RecordWithMetadataParser.java | 4 +-
.../provider/AdapterFactoryProvider.java | 8 +-
.../external/util/ExternalDataUtils.java | 8 +-
.../asterix/external/library/ClassAdParser.java | 21 +-
.../asterix-lang-aql/src/main/javacc/AQL.jj | 8 +-
.../asterix/lang/common/base/Literal.java | 1 +
.../lang/common/literal/MissingLiteral.java | 55 +++
.../lang/common/visitor/FormatPrintVisitor.java | 7 +-
.../lang/common/visitor/QueryPrintVisitor.java | 2 +-
.../asterix-lang-sqlpp/src/main/javacc/SQLPP.jj | 8 +-
.../plugin/EvaluatorGeneratorMojo.java | 1 +
.../metadata/bootstrap/MetadataRecordTypes.java | 18 +-
.../entities/AsterixBuiltinTypeMap.java | 4 +-
.../apache/asterix/metadata/entities/Index.java | 5 +-
.../DatatypeTupleTranslator.java | 7 +-
.../asterix/builders/AbstractListBuilder.java | 28 +-
.../apache/asterix/builders/RecordBuilder.java | 29 +-
.../data/common/AqlExpressionTypeComputer.java | 4 +-
.../data/common/AqlMissableTypeComputer.java | 52 ++
.../data/common/AqlNullableTypeComputer.java | 55 ---
.../AqlPartialAggregationTypeComputer.java | 18 +-
.../data/nontagged/AqlMissingWriterFactory.java | 50 ++
.../data/nontagged/AqlNullWriterFactory.java | 53 --
.../comparators/ABinaryComparator.java | 24 -
.../AObjectAscBinaryComparatorFactory.java | 23 +-
.../ListItemBinaryComparatorFactory.java | 12 +-
.../adm/ANullableFieldPrinterFactory.java | 4 +-
.../nontagged/printers/adm/AObjectPrinter.java | 1 +
.../csv/ANullableFieldPrinterFactory.java | 6 +-
.../nontagged/printers/csv/AObjectPrinter.java | 1 +
.../clean/ANullableFieldPrinterFactory.java | 6 +-
.../printers/json/clean/AObjectPrinter.java | 1 +
.../lossless/ANullableFieldPrinterFactory.java | 6 +-
.../printers/json/lossless/AObjectPrinter.java | 1 +
.../serde/AMissingSerializerDeserializer.java | 47 ++
.../serde/ANullSerializerDeserializer.java | 6 +-
.../serde/AObjectSerializerDeserializer.java | 9 +-
.../serde/ARecordSerializerDeserializer.java | 9 +-
.../asterix/formats/base/IDataFormat.java | 4 +-
.../nontagged/AqlADMPrinterFactoryProvider.java | 7 +-
.../AqlBinaryBooleanInspectorImpl.java | 7 +-
.../AqlBinaryComparatorFactoryProvider.java | 4 +-
.../nontagged/AqlCSVPrinterFactoryProvider.java | 7 +-
.../AqlCleanJSONPrinterFactoryProvider.java | 7 +-
.../AqlLosslessJSONPrinterFactoryProvider.java | 7 +-
.../AqlPredicateEvaluatorFactoryProvider.java | 15 +-
.../AqlSerializerDeserializerProvider.java | 10 +-
.../org/apache/asterix/om/base/AMissing.java | 69 +++
.../java/org/apache/asterix/om/base/ANull.java | 11 +-
.../om/constants/AsterixConstantValue.java | 6 +
.../om/functions/AsterixBuiltinFunctions.java | 483 +++++++++---------
.../pointables/ARecordVisitablePointable.java | 20 +-
.../om/pointables/cast/ARecordCaster.java | 62 ++-
.../pointables/nonvisitor/ARecordPointable.java | 2 +-
.../om/pointables/printer/adm/AListPrinter.java | 8 +-
.../pointables/printer/adm/APrintVisitor.java | 11 +-
.../pointables/printer/adm/ARecordPrinter.java | 16 +-
.../pointables/printer/csv/APrintVisitor.java | 11 +-
.../pointables/printer/csv/ARecordPrinter.java | 8 +-
.../printer/json/clean/AListPrinter.java | 8 +-
.../printer/json/clean/APrintVisitor.java | 11 +-
.../printer/json/clean/ARecordPrinter.java | 8 +-
.../printer/json/lossless/AListPrinter.java | 8 +-
.../printer/json/lossless/APrintVisitor.java | 11 +-
.../printer/json/lossless/ARecordPrinter.java | 8 +-
.../base/AbstractResultTypeComputer.java | 64 +++
.../om/typecomputer/base/TypeCastUtils.java | 57 +++
.../base/TypeComputerUtilities.java | 124 -----
.../typecomputer/impl/ABinaryTypeComputer.java | 12 +-
.../typecomputer/impl/ABooleanTypeComputer.java | 11 +-
.../typecomputer/impl/ACircleTypeComputer.java | 11 +-
.../impl/ADateTimeTypeComputer.java | 11 +-
.../om/typecomputer/impl/ADateTypeComputer.java | 11 +-
.../impl/ADayTimeDurationTypeComputer.java | 38 ++
.../typecomputer/impl/ADoubleTypeComputer.java | 11 +-
.../impl/ADurationTypeComputer.java | 37 ++
.../typecomputer/impl/AFloatTypeComputer.java | 10 +-
.../typecomputer/impl/AInt16TypeComputer.java | 37 ++
.../typecomputer/impl/AInt32TypeComputer.java | 11 +-
.../typecomputer/impl/AInt64TypeComputer.java | 11 +-
.../om/typecomputer/impl/AInt8TypeComputer.java | 37 ++
.../impl/AIntervalTypeComputer.java | 14 +-
.../om/typecomputer/impl/ALineTypeComputer.java | 11 +-
.../typecomputer/impl/AMissingTypeComputer.java | 42 ++
.../om/typecomputer/impl/ANullTypeComputer.java | 42 --
.../typecomputer/impl/APoint3DTypeComputer.java | 11 +-
.../typecomputer/impl/APointTypeComputer.java | 11 +-
.../typecomputer/impl/APolygonTypeComputer.java | 11 +-
.../impl/ARectangleTypeComputer.java | 11 +-
.../typecomputer/impl/AStringTypeComputer.java | 11 +-
.../impl/ATemporalInstanceTypeComputer.java | 52 ++
.../om/typecomputer/impl/ATimeTypeComputer.java | 11 +-
.../om/typecomputer/impl/AUUIDTypeComputer.java | 11 +-
.../impl/AYearMonthDurationTypeComputer.java | 38 ++
.../impl/AbstractBinaryStringTypeComputer.java | 90 ----
.../impl/AbstractQuadStringTypeComputer.java | 66 ---
.../impl/AbstractStringTypeComputer.java | 38 ++
.../impl/AbstractTripleStringTypeComputer.java | 62 ---
...BinaryBooleanOrNullFunctionTypeComputer.java | 61 ---
.../BinaryStringBoolOrNullTypeComputer.java | 41 --
.../BinaryStringStringOrNullTypeComputer.java | 43 --
.../impl/BooleanFunctionTypeComputer.java | 48 ++
.../impl/BooleanOnlyTypeComputer.java | 42 ++
.../impl/CastListResultTypeComputer.java | 4 +-
.../impl/CastRecordResultTypeComputer.java | 4 +-
.../impl/ClosedRecordConstructorResultType.java | 22 +-
.../impl/CollectionMemberResultType.java | 54 ++
.../impl/CollectionToSequenceTypeComputer.java | 27 +-
.../impl/ConcatNonNullTypeComputer.java | 37 +-
.../impl/FieldAccessByIndexResultType.java | 2 +-
.../impl/FieldAccessByNameResultType.java | 100 ++++
.../impl/FieldAccessNestedResultType.java | 2 +-
.../impl/FlowRecordResultTypeComputer.java | 4 +-
.../om/typecomputer/impl/GetItemResultType.java | 54 --
.../GetOverlappingInvervalTypeComputer.java | 12 +-
.../impl/InjectFailureTypeComputer.java | 2 +-
.../typecomputer/impl/LocalAvgTypeComputer.java | 44 ++
.../impl/MinMaxAggTypeComputer.java | 63 +++
.../NonTaggedCollectionMemberResultType.java | 55 ---
.../NonTaggedFieldAccessByNameResultType.java | 104 ----
.../impl/NonTaggedGetItemResultType.java | 47 +-
.../impl/NonTaggedLocalAvgTypeComputer.java | 44 --
.../impl/NonTaggedMinMaxAggTypeComputer.java | 106 ----
...onTaggedNumericAddSubMulDivTypeComputer.java | 343 -------------
.../impl/NonTaggedNumericAggTypeComputer.java | 88 ----
...ggedNumericRoundHalfToEven2TypeComputer.java | 115 -----
...nTaggedNumericUnaryFunctionTypeComputer.java | 92 ----
.../impl/NonTaggedSwitchCaseComputer.java | 67 ---
.../impl/NonTaggedUnaryMinusTypeComputer.java | 48 --
.../impl/NotMissingTypeComputer.java | 77 +++
.../typecomputer/impl/NotNullTypeComputer.java | 76 ---
.../impl/NullableDoubleTypeComputer.java | 42 ++
.../impl/NumericAddSubMulDivTypeComputer.java | 305 ++++++++++++
.../impl/NumericAddSubMulTypeDescriptor.java | 83 ----
.../impl/NumericAggTypeComputer.java | 73 +++
.../NumericRoundHalfToEven2TypeComputer.java | 86 ++++
.../impl/NumericUnaryFunctionTypeComputer.java | 72 +++
.../impl/OpenARecordTypeComputer.java | 43 ++
.../impl/OpenRecordConstructorResultType.java | 4 +-
.../impl/OptionalABinaryTypeComputer.java | 48 --
.../impl/OptionalABooleanTypeComputer.java | 48 --
.../impl/OptionalACircleTypeComputer.java | 48 --
.../impl/OptionalADateTimeTypeComputer.java | 48 --
.../impl/OptionalADateTypeComputer.java | 48 --
.../OptionalADayTimeDurationTypeComputer.java | 52 --
.../impl/OptionalADoubleTypeComputer.java | 47 --
.../impl/OptionalADurationTypeComputer.java | 48 --
.../impl/OptionalAFloatTypeComputer.java | 48 --
.../impl/OptionalAInt16TypeComputer.java | 48 --
.../impl/OptionalAInt32TypeComputer.java | 48 --
.../impl/OptionalAInt64TypeComputer.java | 48 --
.../impl/OptionalAInt8TypeComputer.java | 48 --
.../impl/OptionalAIntervalTypeComputer.java | 48 --
.../impl/OptionalALineTypeComputer.java | 48 --
.../impl/OptionalAPoint3DTypeComputer.java | 48 --
.../impl/OptionalAPointTypeComputer.java | 48 --
.../impl/OptionalAPolygonTypeComputer.java | 48 --
.../impl/OptionalARectangleTypeComputer.java | 48 --
.../impl/OptionalAStringTypeComputer.java | 48 --
.../OptionalATemporalInstanceTypeComputer.java | 54 --
.../impl/OptionalATimeTypeComputer.java | 48 --
.../OptionalAYearMonthDurationTypeComputer.java | 52 --
.../impl/OptionalOpenARecordTypeComputer.java | 43 --
.../impl/OrderedListConstructorResultType.java | 31 +-
.../impl/OrderedListOfAInt32TypeComputer.java | 11 +-
.../impl/OrderedListOfAInt64TypeComputer.java | 11 +-
.../OrderedListOfAIntervalTypeComputer.java | 11 +-
.../impl/OrderedListOfAPointTypeComputer.java | 11 +-
.../impl/OrderedListOfAStringTypeComputer.java | 11 +-
.../impl/OrderedListOfAnyTypeComputer.java | 11 +-
.../QuadStringStringOrNullTypeComputer.java | 44 --
.../impl/RecordAddFieldsTypeComputer.java | 8 +-
.../impl/RecordConstructorResultType.java | 4 +-
.../impl/RecordMergeTypeComputer.java | 6 +-
.../impl/RecordRemoveFieldsTypeComputer.java | 14 +-
.../ScalarVersionOfAggregateResultType.java | 42 +-
.../impl/StringBooleanTypeComputer.java | 34 ++
.../impl/StringStringTypeComputer.java | 35 ++
.../impl/SubsetCollectionTypeComputer.java | 4 +-
.../impl/Substring2TypeComputer.java | 67 +--
.../impl/SubstringTypeComputer.java | 74 +--
.../typecomputer/impl/SwitchCaseComputer.java | 66 +++
.../TripleStringBoolOrNullTypeComputer.java | 43 --
.../TripleStringStringOrNullTypeComputer.java | 42 --
.../impl/TypeCompatibilityChecker.java | 81 ---
.../om/typecomputer/impl/TypeComputeUtils.java | 222 +++++++++
.../om/typecomputer/impl/TypeComputerUtils.java | 75 ---
.../UnaryBinaryInt64OrNullTypeComputer.java | 67 ---
.../impl/UnaryBinaryInt64TypeComputer.java | 50 ++
.../UnaryBooleanOrNullFunctionTypeComputer.java | 60 ---
.../impl/UnaryMinusTypeComputer.java | 66 +++
.../UnaryStringInt64OrNullTypeComputer.java | 81 ---
.../impl/UnaryStringInt64TypeComputer.java | 50 ++
.../impl/UnaryStringOrNullTypeComputer.java | 69 ---
.../UnorderedListConstructorResultType.java | 32 +-
.../apache/asterix/om/types/ARecordType.java | 2 +-
.../org/apache/asterix/om/types/ATypeTag.java | 6 +-
.../org/apache/asterix/om/types/AUnionType.java | 106 +++-
.../apache/asterix/om/types/BuiltinType.java | 27 +
.../org/apache/asterix/om/types/TypeHelper.java | 63 +--
.../apache/asterix/om/types/TypeTagUtil.java | 2 +
.../asterix/om/util/NonTaggedFormatUtil.java | 58 ++-
.../apache/asterix/om/visitors/IOMVisitor.java | 3 +
.../om/visitors/OMPrintToStringVisitor.java | 10 +-
asterixdb/asterix-runtime/pom.xml | 5 +
...bstractSerializableAvgAggregateFunction.java | 4 +-
...tractSerializableCountAggregateFunction.java | 4 +-
...bstractSerializableSumAggregateFunction.java | 4 +-
.../std/SerializableAvgAggregateFunction.java | 2 +-
.../SerializableGlobalAvgAggregateFunction.java | 2 +-
...lizableIntermediateAvgAggregateFunction.java | 2 +-
.../SerializableLocalAvgAggregateFunction.java | 2 +-
.../std/SerializableSumAggregateFunction.java | 2 +-
.../std/AbstractAvgAggregateFunction.java | 2 +-
.../std/AbstractCountAggregateFunction.java | 2 +-
.../std/AbstractMinMaxAggregateFunction.java | 8 +-
.../std/AbstractSumAggregateFunction.java | 5 +-
.../aggregates/std/AvgAggregateFunction.java | 2 +-
.../std/GlobalAvgAggregateFunction.java | 2 +-
.../std/IntermediateAvgAggregateFunction.java | 2 +-
.../std/LocalAvgAggregateFunction.java | 2 +-
.../aggregates/std/MinMaxAggregateFunction.java | 2 +-
.../accessors/CircleCenterAccessor.java | 7 -
.../accessors/CircleRadiusAccessor.java | 7 -
.../accessors/LineRectanglePolygonAccessor.java | 7 -
.../accessors/PointXCoordinateAccessor.java | 7 -
.../accessors/PointYCoordinateAccessor.java | 7 -
.../accessors/TemporalDayAccessor.java | 8 -
.../accessors/TemporalHourAccessor.java | 8 -
.../accessors/TemporalIntervalEndAccessor.java | 10 +-
.../TemporalIntervalEndDateAccessor.java | 11 +-
.../TemporalIntervalEndDatetimeAccessor.java | 10 +-
.../TemporalIntervalEndTimeAccessor.java | 10 +-
.../TemporalIntervalStartAccessor.java | 10 +-
.../TemporalIntervalStartDateAccessor.java | 10 +-
.../TemporalIntervalStartDatetimeAccessor.java | 10 +-
.../TemporalIntervalStartTimeAccessor.java | 10 +-
.../accessors/TemporalMillisecondAccessor.java | 8 -
.../accessors/TemporalMinuteAccessor.java | 8 -
.../accessors/TemporalMonthAccessor.java | 8 -
.../accessors/TemporalSecondAccessor.java | 8 -
.../accessors/TemporalYearAccessor.java | 8 -
.../common/AbstractTypeCheckEvaluator.java | 62 +++
.../ClosedRecordConstructorEvalFactory.java | 9 +-
.../evaluators/common/CreateMBREvalFactory.java | 118 ++---
.../common/EditDistanceCheckEvaluator.java | 22 +-
.../common/EditDistanceEvaluator.java | 32 +-
.../common/SimilarityJaccardCheckEvaluator.java | 37 +-
.../common/SimilarityJaccardEvaluator.java | 46 +-
.../AbstractComparisonEvaluator.java | 125 ++---
.../comparisons/ComparisonEvalFactory.java | 171 -------
.../comparisons/EqualsDescriptor.java | 70 +++
.../comparisons/GreaterThanDescriptor.java | 70 +++
.../GreaterThanOrEqualsDescriptor.java | 70 +++
.../comparisons/LessThanDescriptor.java | 68 +++
.../comparisons/LessThanOrEqualsDescriptor.java | 70 +++
.../comparisons/NotEqualsDescriptor.java | 70 +++
.../ABinaryHexStringConstructorDescriptor.java | 14 +-
.../ABooleanConstructorDescriptor.java | 7 -
.../ACircleConstructorDescriptor.java | 6 -
.../ADateConstructorDescriptor.java | 13 +-
.../ADateTimeConstructorDescriptor.java | 6 -
.../ADayTimeDurationConstructorDescriptor.java | 6 -
.../ADoubleConstructorDescriptor.java | 6 -
.../ADurationConstructorDescriptor.java | 6 -
.../AFloatConstructorDescriptor.java | 6 -
.../AInt16ConstructorDescriptor.java | 6 -
.../AInt32ConstructorDescriptor.java | 6 -
.../AInt64ConstructorDescriptor.java | 6 -
.../AInt8ConstructorDescriptor.java | 6 -
.../AIntervalConstructorDescriptor.java | 11 -
...ervalStartFromDateConstructorDescriptor.java | 11 -
...lStartFromDateTimeConstructorDescriptor.java | 11 -
...ervalStartFromTimeConstructorDescriptor.java | 11 -
.../ALineConstructorDescriptor.java | 6 -
.../ANullConstructorDescriptor.java | 8 +-
.../APoint3DConstructorDescriptor.java | 6 -
.../APointConstructorDescriptor.java | 6 -
.../APolygonConstructorDescriptor.java | 9 -
.../ARectangleConstructorDescriptor.java | 6 -
.../AStringConstructorDescriptor.java | 14 +-
.../ATimeConstructorDescriptor.java | 7 -
.../AUUIDFromStringConstructorDescriptor.java | 6 -
...AYearMonthDurationConstructorDescriptor.java | 6 -
.../OpenRecordConstructorDescriptor.java | 18 +-
.../functions/AbstractBinaryStringBoolEval.java | 23 +-
.../AbstractNumericArithmeticEval.java | 34 +-
.../functions/AbstractQuadStringStringEval.java | 46 +-
.../functions/AbstractTripleStringBoolEval.java | 43 +-
.../AbstractTripleStringStringEval.java | 40 +-
.../evaluators/functions/AndDescriptor.java | 37 +-
.../AnyCollectionMemberDescriptor.java | 17 +-
.../functions/CheckUnknownDescriptor.java | 86 ++++
.../functions/CreatePointDescriptor.java | 19 +-
.../functions/DeepEqualityDescriptor.java | 2 +-
.../functions/EditDistanceListIsFilterable.java | 158 ------
.../EditDistanceListIsFilterableDescriptor.java | 156 ++++++
.../EditDistanceStringIsFilterable.java | 171 -------
...ditDistanceStringIsFilterableDescriptor.java | 66 +++
...EditDistanceStringIsFilterableEvaluator.java | 132 +++++
.../functions/EmbedTypeDescriptor.java | 77 ---
.../functions/FlowRecordDescriptor.java | 91 ----
.../evaluators/functions/FuzzyEqDescriptor.java | 49 --
.../evaluators/functions/GetItemDescriptor.java | 17 +-
.../functions/IsMissingDescriptor.java | 67 +++
.../evaluators/functions/IsNullDescriptor.java | 34 +-
.../functions/IsUnknownDescriptor.java | 68 +++
.../evaluators/functions/LenDescriptor.java | 15 -
.../evaluators/functions/NotDescriptor.java | 6 -
.../evaluators/functions/NotNullDescriptor.java | 85 ----
.../functions/NumericAbsDescriptor.java | 7 +-
.../functions/NumericFloorDescriptor.java | 7 +-
.../functions/NumericModuloDescriptor.java | 20 +-
.../functions/NumericRoundDescriptor.java | 7 +-
.../NumericRoundHalfToEven2Descriptor.java | 29 +-
.../NumericRoundHalfToEvenDescriptor.java | 9 +-
.../functions/NumericSubtractDescriptor.java | 8 -
.../functions/NumericUnaryMinusDescriptor.java | 7 +-
.../evaluators/functions/OrDescriptor.java | 30 +-
.../functions/PrefixLenJaccardDescriptor.java | 14 +-
.../evaluators/functions/RegExpDescriptor.java | 18 +-
.../functions/SpatialAreaDescriptor.java | 11 -
.../functions/SpatialCellDescriptor.java | 7 -
.../functions/SpatialDistanceDescriptor.java | 12 +-
.../functions/SpatialIntersectDescriptor.java | 20 +-
.../functions/Substring2Descriptor.java | 20 +-
.../functions/SubstringAfterDescriptor.java | 12 +-
.../functions/SubstringBeforeDescriptor.java | 12 +-
.../functions/SubstringDescriptor.java | 99 +---
.../binary/AbstractBinaryScalarEvaluator.java | 32 +-
.../binary/AbstractFindBinaryEvaluator.java | 122 +++++
.../binary/AbstractSubBinaryEvaluator.java | 98 ++++
.../binary/BinaryConcatDescriptor.java | 22 +-
.../binary/BinaryLengthDescriptor.java | 8 +-
.../functions/binary/FindBinaryDescriptor.java | 102 +---
.../binary/FindBinaryFromDescriptor.java | 4 +-
.../functions/binary/ParseBinaryDescriptor.java | 17 +-
.../functions/binary/PrintBinaryDescriptor.java | 17 +-
.../binary/SubBinaryFromDescriptor.java | 3 +-
.../binary/SubBinaryFromToDescriptor.java | 76 +--
.../records/FieldAccessByIndexEvalFactory.java | 17 +-
.../records/FieldAccessByNameEvalFactory.java | 17 +-
.../records/FieldAccessNestedEvalFactory.java | 76 ++-
.../records/GetRecordFieldValueEvalFactory.java | 21 +-
.../records/GetRecordFieldsEvalFactory.java | 19 -
.../records/RecordAddFieldsDescriptor.java | 28 +-
.../records/RecordMergeDescriptor.java | 30 +-
.../records/RecordRemoveFieldsEvalFactory.java | 21 +-
.../AbstractIntervalLogicFuncDescriptor.java | 16 +-
.../AdjustDateTimeForTimeZoneDescriptor.java | 15 -
.../AdjustTimeForTimeZoneDescriptor.java | 16 -
.../CalendarDuartionFromDateDescriptor.java | 12 -
.../CalendarDurationFromDateTimeDescriptor.java | 12 -
.../temporal/DateFromDatetimeDescriptor.java | 34 +-
.../DateFromUnixTimeInDaysDescriptor.java | 15 +-
.../DatetimeFromDateAndTimeDescriptor.java | 39 +-
.../DatetimeFromUnixTimeInMsDescriptor.java | 43 +-
.../DatetimeFromUnixTimeInSecsDescriptor.java | 48 +-
.../functions/temporal/DayOfWeekDescriptor.java | 77 ++-
.../DayTimeDurationComparatorDescriptor.java | 32 +-
...DurationGreaterThanComparatorDescriptor.java | 39 ++
...imeDurationLessThanComparatorDescriptor.java | 39 ++
.../temporal/DurationEqualDescriptor.java | 12 -
.../DurationFromIntervalDescriptor.java | 11 +-
.../DurationFromMillisecondsDescriptor.java | 44 +-
.../temporal/DurationFromMonthsDescriptor.java | 11 -
.../temporal/GetDayTimeDurationDescriptor.java | 11 -
.../GetOverlappingIntervalDescriptor.java | 5 +-
.../GetYearMonthDurationDescriptor.java | 11 -
.../temporal/IntervalBinDescriptor.java | 51 +-
.../temporal/IntervalEndsDecriptor.java | 51 --
.../temporal/IntervalEndsDescriptor.java | 50 ++
...llisecondsFromDayTimeDurationDescriptor.java | 11 -
.../MonthsFromYearMonthDurationDescriptor.java | 11 -
.../temporal/OverlapBinsDescriptor.java | 50 +-
.../functions/temporal/ParseDateDescriptor.java | 11 -
.../temporal/ParseDateTimeDescriptor.java | 11 -
.../functions/temporal/ParseTimeDescriptor.java | 11 -
.../functions/temporal/PrintDateDescriptor.java | 15 -
.../temporal/PrintDateTimeDescriptor.java | 16 -
.../functions/temporal/PrintTimeDescriptor.java | 15 -
.../temporal/TimeFromDatetimeDescriptor.java | 31 +-
.../TimeFromUnixTimeInMsDescriptor.java | 15 +-
.../YearMonthDurationComparatorDecriptor.java | 155 ------
.../YearMonthDurationComparatorDescriptor.java | 125 +++++
...DurationGreaterThanComparatorDescriptor.java | 39 ++
...nthDurationLessThanComparatorDescriptor.java | 39 ++
.../evaluators/staticcodegen/CodeGenUtil.java | 91 +++-
.../EvaluatorMissingCheckVisitor.java | 228 +++++++++
.../EvaluatorNullCheckVisitor.java | 105 ++++
.../staticcodegen/EvaluatorVisitor.java | 125 -----
.../staticcodegen/GatherInnerClassVisitor.java | 3 +-
.../staticcodegen/RenameClassVisitor.java | 4 +-
.../evaluators/staticcodegen/TypeCheckUtil.java | 41 --
.../evaluators/staticcodegen/TypeChecker.java | 77 +++
.../runtime/formats/NonTaggedDataFormat.java | 100 ++--
...rixLSMPrimaryUpsertOperatorNodePushable.java | 22 +-
.../AsterixLSMTreeUpsertOperatorDescriptor.java | 6 +-
.../std/ScanCollectionDescriptor.java | 8 +-
.../std/SubsetCollectionDescriptor.java | 11 +-
.../asterix-server/src/main/licenses/NOTICE | 48 ++
.../asterix/tools/datagen/AdmDataGen.java | 2 +-
.../api/AbstractCompilerFactoryBuilder.java | 24 +-
.../api/HeuristicCompilerFactoryBuilder.java | 12 +-
.../algebra/expressions/ConstantExpression.java | 22 +-
.../expressions/IAlgebricksConstantValue.java | 2 +
.../expressions/IMissableTypeComputer.java | 29 ++
.../expressions/INullableTypeComputer.java | 29 --
.../functions/AlgebricksBuiltinFunctions.java | 3 +
.../logical/AbstractLogicalOperator.java | 2 +-
.../operators/logical/GroupByOperator.java | 2 +-
.../logical/LeftOuterJoinOperator.java | 4 +-
.../logical/LeftOuterUnnestMapOperator.java | 2 +-
.../logical/NestedTupleSourceOperator.java | 2 +-
.../operators/logical/SelectOperator.java | 34 +-
.../algebra/operators/logical/SinkOperator.java | 2 +-
.../operators/logical/SubplanOperator.java | 2 +-
.../physical/HybridHashJoinPOperator.java | 185 +++----
.../physical/InMemoryHashJoinPOperator.java | 4 +-
.../operators/physical/NLJoinPOperator.java | 4 +-
.../operators/physical/SubplanPOperator.java | 4 +-
.../properties/TypePropagationPolicy.java | 55 ++-
.../core/algebra/typing/ITypingContext.java | 4 +-
.../typing/PropagatingTypeEnvironment.java | 6 +-
.../algebra/util/OperatorPropertiesUtil.java | 4 +-
.../core/jobgen/impl/JobGenContext.java | 16 +-
.../base/AlgebricksOptimizationContext.java | 10 +-
.../base/IOptimizationContextFactory.java | 4 +-
.../data/impl/NoopMissingWriterFactory.java | 42 ++
.../data/impl/NoopNullWriterFactory.java | 47 --
.../examples/piglet/compiler/ConstantValue.java | 5 +
.../rewriter/rules/PushSelectIntoJoinRule.java | 54 +-
.../subplan/IntroduceGroupByForSubplanRule.java | 2 +-
.../IntroduceLeftOuterJoinForSubplanRule.java | 2 +-
.../rules/subplan/SubplanOutOfGroupRule.java | 2 +-
.../operators/meta/SubplanRuntimeFactory.java | 18 +-
.../std/StreamSelectRuntimeFactory.java | 48 +-
.../tests/pushruntime/PushRuntimeTest.java | 6 +-
.../value/BinaryComparatorConstant.java | 34 --
.../api/dataflow/value/IMissingWriter.java | 28 ++
.../dataflow/value/IMissingWriterFactory.java | 26 +
.../hyracks/api/dataflow/value/INullWriter.java | 27 -
.../api/dataflow/value/INullWriterFactory.java | 25 -
.../join/GraceHashJoinOperatorDescriptor.java | 31 +-
.../join/GraceHashJoinOperatorNodePushable.java | 16 +-
.../join/HybridHashJoinOperatorDescriptor.java | 36 +-
.../dataflow/std/join/InMemoryHashJoin.java | 24 +-
.../InMemoryHashJoinOperatorDescriptor.java | 23 +-
.../dataflow/std/join/NestedLoopJoin.java | 22 +-
.../join/NestedLoopJoinOperatorDescriptor.java | 14 +-
.../std/join/OptimizedHybridHashJoin.java | 14 +-
...timizedHybridHashJoinOperatorDescriptor.java | 118 ++---
.../TPCHCustomerOrderHashJoinTest.java | 28 +-
.../TPCHCustomerOrderNestedLoopJoinTest.java | 12 +-
.../tests/util/NoopMissingWriterFactory.java | 49 ++
.../tests/util/NoopNullWriterFactory.java | 49 --
.../dataflow/BTreeSearchOperatorDescriptor.java | 10 +-
.../storage/am/btree/test/FramewriterTest.java | 2 +-
.../AbstractIndexOperatorDescriptor.java | 10 +-
.../AbstractTreeIndexOperatorDescriptor.java | 4 +-
.../dataflow/IIndexOperatorDescriptor.java | 6 +-
.../IndexSearchOperatorNodePushable.java | 33 +-
...dexInsertUpdateDeleteOperatorDescriptor.java | 6 +-
...tractLSMInvertedIndexOperatorDescriptor.java | 4 +-
...SMInvertedIndexSearchOperatorDescriptor.java | 4 +-
.../dataflow/RTreeSearchOperatorDescriptor.java | 4 +-
552 files changed, 7817 insertions(+), 9447 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
index f4a926c..37f59dd 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/jobgen/QueryLogicalExpressionJobGen.java
@@ -26,7 +26,6 @@ import org.apache.asterix.formats.base.IDataFormat;
import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
import org.apache.asterix.om.functions.IExternalFunctionInfo;
import org.apache.asterix.om.functions.IFunctionDescriptor;
-import org.apache.asterix.runtime.evaluators.comparisons.ComparisonEvalFactory;
import org.apache.asterix.runtime.formats.FormatUtils;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -40,14 +39,11 @@ import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvir
import org.apache.hyracks.algebricks.core.algebra.expressions.StatefulFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
-import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
-import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions.ComparisonKind;
-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.IAggregateEvaluatorFactory;
-import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IRunningAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.ISerializedAggregateEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.base.IUnnestingEvaluatorFactory;
import org.apache.hyracks.algebricks.runtime.evaluators.ColumnAccessEvalFactory;
@@ -62,7 +58,7 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
@Override
public IAggregateEvaluatorFactory createAggregateFunctionFactory(AggregateFunctionCallExpression expr,
IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
- throws AlgebricksException {
+ throws AlgebricksException {
IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
IFunctionDescriptor fd = getFunctionDescriptor(expr, env, context);
switch (fd.getFunctionDescriptorTag()) {
@@ -78,9 +74,9 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
}
@Override
- public IRunningAggregateEvaluatorFactory createRunningAggregateFunctionFactory(
- StatefulFunctionCallExpression expr, IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas,
- JobGenContext context) throws AlgebricksException {
+ public IRunningAggregateEvaluatorFactory createRunningAggregateFunctionFactory(StatefulFunctionCallExpression expr,
+ IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
+ throws AlgebricksException {
IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
return getFunctionDescriptor(expr, env, context).createRunningAggregateEvaluatorFactory(args);
}
@@ -88,7 +84,7 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
@Override
public IUnnestingEvaluatorFactory createUnnestingFunctionFactory(UnnestingFunctionCallExpression expr,
IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
- throws AlgebricksException {
+ throws AlgebricksException {
IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
return getFunctionDescriptor(expr, env, context).createUnnestingEvaluatorFactory(args);
}
@@ -133,14 +129,8 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
private IScalarEvaluatorFactory createScalarFunctionEvaluatorFactory(AbstractFunctionCallExpression expr,
IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
- throws AlgebricksException {
+ throws AlgebricksException {
IScalarEvaluatorFactory[] args = codegenArguments(expr, env, inputSchemas, context);
- FunctionIdentifier fi = expr.getFunctionIdentifier();
- ComparisonKind ck = AlgebricksBuiltinFunctions.getComparisonType(fi);
- if (ck != null) {
- return new ComparisonEvalFactory(args[0], args[1], ck);
- }
-
IFunctionDescriptor fd = null;
if (!(expr.getFunctionInfo() instanceof IExternalFunctionInfo)) {
IDataFormat format = FormatUtils.getDefaultFormat();
@@ -158,8 +148,9 @@ public class QueryLogicalExpressionJobGen implements ILogicalExpressionJobGen {
return format.getConstantEvalFactory(expr.getValue());
}
- private IScalarEvaluatorFactory[] codegenArguments(AbstractFunctionCallExpression expr, IVariableTypeEnvironment env,
- IOperatorSchema[] inputSchemas, JobGenContext context) throws AlgebricksException {
+ private IScalarEvaluatorFactory[] codegenArguments(AbstractFunctionCallExpression expr,
+ IVariableTypeEnvironment env, IOperatorSchema[] inputSchemas, JobGenContext context)
+ throws AlgebricksException {
List<Mutable<ILogicalExpression>> arguments = expr.getArguments();
int n = arguments.size();
IScalarEvaluatorFactory[] args = new IScalarEvaluatorFactory[n];
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
index 20bfea5..b4f8ac3 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ByNameToByIndexFieldAccessRule.java
@@ -19,7 +19,6 @@
package org.apache.asterix.optimizer.rules;
-import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -85,9 +84,9 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule {
ILogicalExpression a0 = fce.getArguments().get(0).getValue();
if (a0.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
LogicalVariable var1 = context.newVar();
- ArrayList<LogicalVariable> varArray = new ArrayList<LogicalVariable>(1);
+ ArrayList<LogicalVariable> varArray = new ArrayList<>(1);
varArray.add(var1);
- ArrayList<Mutable<ILogicalExpression>> exprArray = new ArrayList<Mutable<ILogicalExpression>>(1);
+ ArrayList<Mutable<ILogicalExpression>> exprArray = new ArrayList<>(1);
exprArray.add(new MutableObject<ILogicalExpression>(a0));
AssignOperator assignVar = new AssignOperator(varArray, exprArray);
fce.getArguments().get(0).setValue(new VariableReferenceExpression(var1));
@@ -100,44 +99,37 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule {
}
IAType t = (IAType) env.getType(fce.getArguments().get(0).getValue());
- try {
- switch (t.getTypeTag()) {
- case ANY: {
- return false || changed;
+ switch (t.getTypeTag()) {
+ case ANY:
+ return changed;
+ case RECORD:
+ ARecordType recType = (ARecordType) t;
+ ILogicalExpression fai = createFieldAccessByIndex(recType, fce);
+ if (fai == null) {
+ return changed;
}
- case RECORD: {
- ARecordType recType = (ARecordType) t;
- ILogicalExpression fai = createFieldAccessByIndex(recType, fce);
- if (fai == null) {
- return false || changed;
- }
- expressions.get(i).setValue(fai);
- changed = true;
- break;
- }
- case UNION: {
- AUnionType unionT = (AUnionType) t;
- if (unionT.isNullableType()) {
- IAType t2 = unionT.getNullableType();
- if (t2.getTypeTag() == ATypeTag.RECORD) {
- ARecordType recType = (ARecordType) t2;
- ILogicalExpression fai = createFieldAccessByIndex(recType, fce);
- if (fai == null) {
- return false || changed;
- }
- expressions.get(i).setValue(fai);
- changed = true;
- break;
- }
- }
+ expressions.get(i).setValue(fai);
+ changed = true;
+ break;
+ case UNION:
+ AUnionType unionT = (AUnionType) t;
+ if (!unionT.isUnknownableType()) {
throw new NotImplementedException("Union " + unionT);
}
- default: {
+ IAType t2 = unionT.getActualType();
+ if (t2.getTypeTag() != ATypeTag.RECORD) {
throw new AlgebricksException("Cannot call field-access on data of type " + t);
}
- }
- } catch (IOException e) {
- throw new AlgebricksException(e);
+ recType = (ARecordType) t2;
+ fai = createFieldAccessByIndex(recType, fce);
+ if (fai == null) {
+ return changed;
+ }
+ expressions.get(i).setValue(fai);
+ changed = true;
+ break;
+ default:
+ throw new AlgebricksException("Cannot call field-access on data of type " + t);
}
}
assign.removeAnnotation(AsterixOperatorAnnotations.PUSHED_FIELD_ACCESS);
@@ -145,8 +137,8 @@ public class ByNameToByIndexFieldAccessRule implements IAlgebraicRewriteRule {
}
@SuppressWarnings("unchecked")
- private static ILogicalExpression createFieldAccessByIndex(ARecordType recType, AbstractFunctionCallExpression fce)
- throws IOException {
+ private static ILogicalExpression createFieldAccessByIndex(ARecordType recType,
+ AbstractFunctionCallExpression fce) {
String s = getStringSecondArgument(fce);
if (s == null) {
return null;
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
index cda7619..1400950 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/CheckFilterExpressionTypeRule.java
@@ -76,8 +76,8 @@ public class CheckFilterExpressionTypeRule implements IAlgebraicRewriteRule {
*/
private boolean isPossibleBoolean(IAType type) {
while (NonTaggedFormatUtil.isOptional(type)) {
- type = ((AUnionType) type).getNullableType();
- if (type.getTypeTag() == ATypeTag.BOOLEAN || type.getTypeTag() == ATypeTag.ANY) {
+ IAType actualType = ((AUnionType) type).getActualType();
+ if (actualType.getTypeTag() == ATypeTag.BOOLEAN || actualType.getTypeTag() == ATypeTag.ANY) {
return true;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
index fb48395..b29f110 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ConstantFoldingRule.java
@@ -25,8 +25,7 @@ import java.util.List;
import org.apache.asterix.common.config.GlobalConfig;
import org.apache.asterix.dataflow.data.common.AqlExpressionTypeComputer;
-import org.apache.asterix.dataflow.data.common.AqlNullableTypeComputer;
-import org.apache.asterix.dataflow.data.nontagged.AqlNullWriterFactory;
+import org.apache.asterix.dataflow.data.nontagged.AqlMissingWriterFactory;
import org.apache.asterix.formats.nontagged.AqlADMPrinterFactoryProvider;
import org.apache.asterix.formats.nontagged.AqlBinaryBooleanInspectorImpl;
import org.apache.asterix.formats.nontagged.AqlBinaryComparatorFactoryProvider;
@@ -40,7 +39,7 @@ import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.base.IAObject;
import org.apache.asterix.om.constants.AsterixConstantValue;
import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities;
+import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
import org.apache.asterix.om.types.ARecordType;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.AbstractCollectionType;
@@ -126,10 +125,9 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule {
AqlSerializerDeserializerProvider.INSTANCE, AqlBinaryHashFunctionFactoryProvider.INSTANCE,
AqlBinaryHashFunctionFamilyProvider.INSTANCE, AqlBinaryComparatorFactoryProvider.INSTANCE,
AqlTypeTraitProvider.INSTANCE, AqlBinaryBooleanInspectorImpl.FACTORY, AqlBinaryIntegerInspector.FACTORY,
- AqlADMPrinterFactoryProvider.INSTANCE, AqlNullWriterFactory.INSTANCE, null,
+ AqlADMPrinterFactoryProvider.INSTANCE, AqlMissingWriterFactory.INSTANCE, null,
new LogicalExpressionJobGenToExpressionRuntimeProviderAdapter(QueryLogicalExpressionJobGen.INSTANCE),
- AqlExpressionTypeComputer.INSTANCE, AqlNullableTypeComputer.INSTANCE, null, null, null, null,
- GlobalConfig.DEFAULT_FRAME_SIZE, null);
+ AqlExpressionTypeComputer.INSTANCE, null, null, null, null, GlobalConfig.DEFAULT_FRAME_SIZE, null);
private static final IOperatorSchema[] _emptySchemas = new IOperatorSchema[] {};
@@ -195,7 +193,7 @@ public class ConstantFoldingRule implements IAlgebraicRewriteRule {
//Current List SerDe assumes a strongly typed list, so we do not constant fold the list constructors if they are not strongly typed
if (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR)
|| expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR)) {
- AbstractCollectionType listType = (AbstractCollectionType) TypeComputerUtilities.getRequiredType(expr);
+ AbstractCollectionType listType = (AbstractCollectionType) TypeCastUtils.getRequiredType(expr);
if (listType != null && (listType.getItemType().getTypeTag() == ATypeTag.ANY
|| listType.getItemType() instanceof AbstractCollectionType)) {
//case1: listType == null, could be a nested list inside a list<ANY>
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
index 427eda7..406d4ee 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/FuzzyJoinRule.java
@@ -31,8 +31,8 @@ import org.apache.asterix.lang.common.base.Clause;
import org.apache.asterix.lang.common.struct.Identifier;
import org.apache.asterix.metadata.declared.AqlMetadataProvider;
import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
+import org.apache.asterix.om.typecomputer.impl.TypeComputeUtils;
import org.apache.asterix.om.types.IAType;
-import org.apache.asterix.om.types.TypeHelper;
import org.apache.asterix.optimizer.base.FuzzyUtils;
import org.apache.asterix.translator.AqlPlusExpressionToPlanTranslator;
import org.apache.commons.lang3.mutable.Mutable;
@@ -197,8 +197,8 @@ public class FuzzyJoinRule implements IAlgebraicRewriteRule {
IAType leftType = (IAType) context.getOutputTypeEnvironment(leftInputOp).getVarType(leftInputVar);
IAType rightType = (IAType) context.getOutputTypeEnvironment(rightInputOp).getVarType(rightInputVar);
// left-hand side and right-hand side of "~=" has the same type
- IAType left2 = TypeHelper.getNonOptionalType(leftType);
- IAType right2 = TypeHelper.getNonOptionalType(rightType);
+ IAType left2 = TypeComputeUtils.getActualType(leftType);
+ IAType right2 = TypeComputeUtils.getActualType(rightType);
if (!left2.deepEqual(right2)) {
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
index 1c27a6e..092c561 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/InlineUnnestFunctionRule.java
@@ -22,10 +22,9 @@ package org.apache.asterix.optimizer.rules;
import java.util.ArrayList;
import java.util.List;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
import org.apache.commons.lang3.mutable.Mutable;
import org.apache.commons.lang3.mutable.MutableObject;
-
-import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
import org.apache.hyracks.algebricks.common.utils.Pair;
import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
@@ -49,7 +48,8 @@ import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
public class InlineUnnestFunctionRule implements IAlgebraicRewriteRule {
@Override
- public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+ public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+ throws AlgebricksException {
return false;
}
@@ -57,20 +57,23 @@ public class InlineUnnestFunctionRule implements IAlgebraicRewriteRule {
public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
throws AlgebricksException {
AbstractLogicalOperator op1 = (AbstractLogicalOperator) opRef.getValue();
- if (context.checkIfInDontApplySet(this, op1))
+ if (context.checkIfInDontApplySet(this, op1)) {
return false;
+ }
context.addToDontApplySet(this, op1);
- if (op1.getOperatorTag() != LogicalOperatorTag.UNNEST)
+ if (op1.getOperatorTag() != LogicalOperatorTag.UNNEST) {
return false;
+ }
UnnestOperator unnestOperator = (UnnestOperator) op1;
AbstractFunctionCallExpression expr = (AbstractFunctionCallExpression) unnestOperator.getExpressionRef()
.getValue();
//we only inline for the scan-collection function
- if (expr.getFunctionIdentifier() != AsterixBuiltinFunctions.SCAN_COLLECTION)
+ if (expr.getFunctionIdentifier() != AsterixBuiltinFunctions.SCAN_COLLECTION) {
return false;
+ }
// inline all variables from an unnesting function call
- AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
+ AbstractFunctionCallExpression funcExpr = expr;
List<Mutable<ILogicalExpression>> args = funcExpr.getArguments();
for (int i = 0; i < args.size(); i++) {
ILogicalExpression argExpr = args.get(i).getValue();
@@ -95,8 +98,8 @@ public class InlineUnnestFunctionRule implements IAlgebraicRewriteRule {
AbstractFunctionCallExpression expr = (AbstractFunctionCallExpression) unnestOp.getExpressionRef().getValue();
List<Pair<AbstractFunctionCallExpression, Integer>> parentAndIndexList = new ArrayList<Pair<AbstractFunctionCallExpression, Integer>>();
getParentFunctionExpression(usedVar, expr, parentAndIndexList);
- ILogicalExpression usedVarOrginExpr = findUsedVarOrigin(usedVar, unnestOp, (AbstractLogicalOperator) unnestOp
- .getInputs().get(0).getValue());
+ ILogicalExpression usedVarOrginExpr = findUsedVarOrigin(usedVar, unnestOp,
+ (AbstractLogicalOperator) unnestOp.getInputs().get(0).getValue());
if (usedVarOrginExpr != null) {
for (Pair<AbstractFunctionCallExpression, Integer> parentAndIndex : parentAndIndexList) {
//we only rewrite the top scan-collection function
@@ -116,8 +119,9 @@ public class InlineUnnestFunctionRule implements IAlgebraicRewriteRule {
ILogicalExpression argExpr = args.get(i).getValue();
if (argExpr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
VariableReferenceExpression varExpr = (VariableReferenceExpression) argExpr;
- if (varExpr.getVariableReference().equals(usedVar))
+ if (varExpr.getVariableReference().equals(usedVar)) {
parentAndIndexList.add(new Pair<AbstractFunctionCallExpression, Integer>(funcExpr, i));
+ }
}
if (argExpr.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
getParentFunctionExpression(usedVar, argExpr, parentAndIndexList);
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
index a7327ff..fee1c96 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceAutogenerateIDRule.java
@@ -130,7 +130,7 @@ public class IntroduceAutogenerateIDRule implements IAlgebraicRewriteRule {
List<Mutable<ILogicalExpression>> args = new ArrayList<>();
args.add(new MutableObject<ILogicalExpression>(mergedRec));
AbstractFunctionCallExpression notNullFn = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.NOT_NULL), args);
+ FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.CHECK_UNKNOWN), args);
return notNullFn;
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
index d3370a5..0fb5b0b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastForExternalFunctionRule.java
@@ -121,25 +121,25 @@ public class IntroduceDynamicTypeCastForExternalFunctionRule implements IAlgebra
IAType inputRecordType = (IAType) env.getVarType(recordVar.get(0));
/** the input record type can be an union type -- for the case when it comes from a subplan or left-outer join */
- boolean checkNull = false;
+ boolean checkUnknown = false;
while (NonTaggedFormatUtil.isOptional(inputRecordType)) {
/** while-loop for the case there is a nested multi-level union */
- inputRecordType = ((AUnionType) inputRecordType).getNullableType();
- checkNull = true;
+ inputRecordType = ((AUnionType) inputRecordType).getActualType();
+ checkUnknown = true;
}
/** see whether the input record type needs to be casted */
boolean cast = !IntroduceDynamicTypeCastRule.compatible(requiredRecordType, inputRecordType);
- if (checkNull) {
+ if (checkUnknown) {
recordVar.set(0, IntroduceDynamicTypeCastRule.addWrapperFunction(requiredRecordType, recordVar.get(0),
- assignOp1, context, AsterixBuiltinFunctions.NOT_NULL));
+ assignOp1, context, AsterixBuiltinFunctions.CHECK_UNKNOWN));
}
if (cast) {
IntroduceDynamicTypeCastRule.addWrapperFunction(requiredRecordType, recordVar.get(0), assignOp1, context,
AsterixBuiltinFunctions.CAST_RECORD);
}
- return cast || checkNull;
+ return cast || checkUnknown;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
index f8bbba8..a58da0d 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceDynamicTypeCastRule.java
@@ -25,7 +25,7 @@ import java.util.List;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.metadata.declared.AqlDataSource;
import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities;
+import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
import org.apache.asterix.om.types.ARecordType;
import org.apache.asterix.om.types.ATypeTag;
import org.apache.asterix.om.types.AUnionType;
@@ -160,24 +160,24 @@ public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
IAType inputRecordType = (IAType) env.getVarType(recordVar);
/** the input record type can be an union type -- for the case when it comes from a subplan or left-outer join */
- boolean checkNull = false;
+ boolean checkUnknown = false;
while (NonTaggedFormatUtil.isOptional(inputRecordType)) {
/** while-loop for the case there is a nested multi-level union */
- inputRecordType = ((AUnionType) inputRecordType).getNullableType();
- checkNull = true;
+ inputRecordType = ((AUnionType) inputRecordType).getActualType();
+ checkUnknown = true;
}
/** see whether the input record type needs to be casted */
boolean cast = !compatible(requiredRecordType, inputRecordType);
- if (checkNull) {
+ if (checkUnknown) {
recordVar = addWrapperFunction(requiredRecordType, recordVar, op, context,
- AsterixBuiltinFunctions.NOT_NULL);
+ AsterixBuiltinFunctions.CHECK_UNKNOWN);
}
if (cast) {
addWrapperFunction(requiredRecordType, recordVar, op, context, AsterixBuiltinFunctions.CAST_RECORD);
}
- return cast || checkNull;
+ return cast || checkUnknown;
}
/**
@@ -217,7 +217,7 @@ public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
cast.getArguments()
.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(var)));
/** enforce the required record type */
- TypeComputerUtilities.setRequiredAndInputTypes(cast, requiredRecordType, actualType);
+ TypeCastUtils.setRequiredAndInputTypes(cast, requiredRecordType, actualType);
LogicalVariable newAssignVar = context.newVar();
AssignOperator newAssignOperator = new AssignOperator(newAssignVar,
new MutableObject<ILogicalExpression>(cast));
@@ -274,7 +274,7 @@ public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
}
IAType reqTypeInside = reqTypes[i];
if (NonTaggedFormatUtil.isOptional(reqTypes[i])) {
- reqTypeInside = ((AUnionType) reqTypes[i]).getNullableType();
+ reqTypeInside = ((AUnionType) reqTypes[i]).getActualType();
}
IAType inputTypeInside = inputTypes[i];
if (NonTaggedFormatUtil.isOptional(inputTypes[i])) {
@@ -282,9 +282,9 @@ public class IntroduceDynamicTypeCastRule implements IAlgebraicRewriteRule {
/** if the required type is not optional, the two types are incompatible */
return false;
}
- inputTypeInside = ((AUnionType) inputTypes[i]).getNullableType();
+ inputTypeInside = ((AUnionType) inputTypes[i]).getActualType();
}
- if (inputTypeInside.getTypeTag() != ATypeTag.NULL && !reqTypeInside.equals(inputTypeInside)) {
+ if (inputTypeInside.getTypeTag() != ATypeTag.MISSING && !reqTypeInside.equals(inputTypeInside)) {
return false;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
index 8b2e003..3ff2a1b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceEnforcedListTypeRule.java
@@ -24,7 +24,7 @@ import java.util.List;
import org.apache.commons.lang3.mutable.Mutable;
-import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities;
+import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
import org.apache.asterix.om.types.IAType;
import org.apache.asterix.optimizer.rules.typecast.StaticTypeCastUtil;
import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
@@ -89,7 +89,7 @@ public class IntroduceEnforcedListTypeRule implements IAlgebraicRewriteRule {
AbstractFunctionCallExpression argFuncExpr = (AbstractFunctionCallExpression) expr;
IAType exprType = (IAType) env.getType(argFuncExpr);
if (StaticTypeCastUtil.rewriteListExpr(argFuncExpr, exprType, exprType, env)) {
- TypeComputerUtilities.resetRequiredAndInputTypes(argFuncExpr);
+ TypeCastUtils.resetRequiredAndInputTypes(argFuncExpr);
changed = true;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
index e3cca9b..0a7d196 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceSecondaryIndexInsertDeleteRule.java
@@ -41,7 +41,7 @@ import org.apache.asterix.om.base.AOrderedList;
import org.apache.asterix.om.base.AString;
import org.apache.asterix.om.constants.AsterixConstantValue;
import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities;
+import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
import org.apache.asterix.om.types.AOrderedListType;
import org.apache.asterix.om.types.ARecordType;
import org.apache.asterix.om.types.ATypeTag;
@@ -240,7 +240,7 @@ public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewrit
// The first argument is the record
castFunc.getArguments()
.add(new MutableObject<ILogicalExpression>(insertOp.getPayloadExpression().getValue()));
- TypeComputerUtilities.setRequiredAndInputTypes(castFunc, enforcedType, insertRecType);
+ TypeCastUtils.setRequiredAndInputTypes(castFunc, enforcedType, insertRecType);
// AssignOperator puts in the cast var the casted record
AssignOperator castedRecordAssignOperator = new AssignOperator(castedRecVar,
new MutableObject<ILogicalExpression>(castFunc));
@@ -467,7 +467,7 @@ public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewrit
new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVar)));
}
if (isPointMBR && isBulkload) {
- //for PointMBR optimization: see SecondaryRTreeOperationsHelper.buildLoadingJobSpec() and
+ //for PointMBR optimization: see SecondaryRTreeOperationsHelper.buildLoadingJobSpec() and
//createFieldPermutationForBulkLoadOp(int) for more details.
for (LogicalVariable secondaryKeyVar : keyVarList) {
secondaryExpressions.add(new MutableObject<ILogicalExpression>(
@@ -502,7 +502,7 @@ public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewrit
new VariableReferenceExpression(secondaryKeyVar)));
}
if (isPointMBR && isBulkload) {
- //for PointMBR optimization: see SecondaryRTreeOperationsHelper.buildLoadingJobSpec() and
+ //for PointMBR optimization: see SecondaryRTreeOperationsHelper.buildLoadingJobSpec() and
//createFieldPermutationForBulkLoadOp(int) for more details.
for (LogicalVariable secondaryKeyVar : originalKeyVarList) {
prevSecondaryExpressions.add(new MutableObject<ILogicalExpression>(
@@ -620,8 +620,8 @@ public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewrit
// if a an enforced field already exists and the type is correct
IAType enforcedFieldType = recordNameTypesMap.get(splits.get(splits.size() - 1));
if (enforcedFieldType != null && enforcedFieldType.getTypeTag() == ATypeTag.UNION
- && ((AUnionType) enforcedFieldType).isNullableType()) {
- enforcedFieldType = ((AUnionType) enforcedFieldType).getNullableType();
+ && ((AUnionType) enforcedFieldType).isUnknownableType()) {
+ enforcedFieldType = ((AUnionType) enforcedFieldType).getActualType();
}
if (enforcedFieldType != null && !ATypeHierarchy.canPromote(enforcedFieldType.getTypeTag(),
index.getKeyFieldTypes().get(i).getTypeTag())) {
@@ -731,7 +731,7 @@ public class IntroduceSecondaryIndexInsertDeleteRule implements IAlgebraicRewrit
continue;
}
ScalarFunctionCallExpression isNullFuncExpr = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.IS_NULL),
+ FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.IS_UNKOWN),
new MutableObject<ILogicalExpression>(new VariableReferenceExpression(secondaryKeyVar)));
ScalarFunctionCallExpression notFuncExpr = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.NOT),
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceStaticTypeCastForInsertRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceStaticTypeCastForInsertRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceStaticTypeCastForInsertRule.java
index 223fab3..89280be 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceStaticTypeCastForInsertRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/IntroduceStaticTypeCastForInsertRule.java
@@ -23,7 +23,7 @@ import java.util.ArrayList;
import java.util.List;
import org.apache.asterix.metadata.declared.AqlDataSource;
-import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities;
+import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
import org.apache.asterix.om.types.IAType;
import org.apache.asterix.optimizer.rules.typecast.StaticTypeCastUtil;
import org.apache.commons.lang3.mutable.Mutable;
@@ -144,7 +144,7 @@ public class IntroduceStaticTypeCastForInsertRule implements IAlgebraicRewriteRu
AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
// that expression has been rewritten, and it will not
// fail but just return false
- if (TypeComputerUtilities.getRequiredType(funcExpr) != null) {
+ if (TypeCastUtils.getRequiredType(funcExpr) != null) {
context.computeAndSetTypeEnvironmentForOperator(assignOp);
return false;
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
index 0628681..8aefd1a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ReplaceSinkOpWithCommitOpRule.java
@@ -102,17 +102,17 @@ public class ReplaceSinkOpWithCommitOpRule implements IAlgebraicRewriteRule {
upsertVar = context.newVar();
AbstractFunctionCallExpression orFunc = new ScalarFunctionCallExpression(
FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.OR));
- // is new value null? -> this means that the expected operation is delete
- AbstractFunctionCallExpression isNewNullFunc = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.IS_NULL));
- isNewNullFunc.getArguments().add(insertDeleteUpsertOperator.getPayloadExpression());
- AbstractFunctionCallExpression isPrevNullFunc = new ScalarFunctionCallExpression(
- FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.IS_NULL));
+ // is new value missing? -> this means that the expected operation is delete
+ AbstractFunctionCallExpression isNewMissingFunc = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.IS_MISSING));
+ isNewMissingFunc.getArguments().add(insertDeleteUpsertOperator.getPayloadExpression());
+ AbstractFunctionCallExpression isPrevMissingFunc = new ScalarFunctionCallExpression(
+ FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.IS_MISSING));
// argument is the previous record
- isPrevNullFunc.getArguments().add(new MutableObject<ILogicalExpression>(
+ isPrevMissingFunc.getArguments().add(new MutableObject<ILogicalExpression>(
new VariableReferenceExpression(insertDeleteUpsertOperator.getPrevRecordVar())));
- orFunc.getArguments().add(new MutableObject<ILogicalExpression>(isPrevNullFunc));
- orFunc.getArguments().add(new MutableObject<ILogicalExpression>(isNewNullFunc));
+ orFunc.getArguments().add(new MutableObject<ILogicalExpression>(isPrevMissingFunc));
+ orFunc.getArguments().add(new MutableObject<ILogicalExpression>(isNewMissingFunc));
// AssignOperator puts in the cast var the casted record
upsertFlagAssign = new AssignOperator(upsertVar, new MutableObject<ILogicalExpression>(orFunc));
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
index 1af312d..ee55aa1 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/SetClosedRecordConstructorsRule.java
@@ -21,7 +21,7 @@ package org.apache.asterix.optimizer.rules;
import org.apache.asterix.common.config.GlobalConfig;
import org.apache.asterix.lang.common.util.FunctionUtil;
import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
-import org.apache.asterix.om.typecomputer.base.TypeComputerUtilities;
+import org.apache.asterix.om.typecomputer.base.TypeCastUtils;
import org.apache.asterix.om.types.AOrderedListType;
import org.apache.asterix.om.types.ARecordType;
import org.apache.asterix.om.types.AUnionType;
@@ -108,7 +108,7 @@ public class SetClosedRecordConstructorsRule implements IAlgebraicRewriteRule {
boolean allClosed = true;
boolean changed = false;
if (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.OPEN_RECORD_CONSTRUCTOR)) {
- ARecordType reqType = (ARecordType) TypeComputerUtilities.getRequiredType(expr);
+ ARecordType reqType = (ARecordType) TypeCastUtils.getRequiredType(expr);
if (reqType == null || !reqType.isOpen()) {
int n = expr.getArguments().size();
if (n % 2 > 0) {
@@ -142,7 +142,7 @@ public class SetClosedRecordConstructorsRule implements IAlgebraicRewriteRule {
boolean rewrite = true;
if (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.ORDERED_LIST_CONSTRUCTOR)
|| (expr.getFunctionIdentifier().equals(AsterixBuiltinFunctions.UNORDERED_LIST_CONSTRUCTOR))) {
- IAType reqType = TypeComputerUtilities.getRequiredType(expr);
+ IAType reqType = TypeCastUtils.getRequiredType(expr);
if (reqType == null) {
rewrite = false;
}
@@ -172,45 +172,21 @@ public class SetClosedRecordConstructorsRule implements IAlgebraicRewriteRule {
throw new AlgebricksException(
"Could not infer type for variable '" + expr.getVariableReference() + "'.");
}
- boolean dataIsClosed = isClosedRec((IAType) varType);
+ boolean dataIsClosed = isClosed((IAType) varType);
return new ClosedDataInfo(false, dataIsClosed, expr);
}
private boolean hasClosedType(ILogicalExpression expr) throws AlgebricksException {
IAType t = (IAType) context.getExpressionTypeComputer().getType(expr, context.getMetadataProvider(), env);
- return isClosedRec(t);
+ return isClosed(t);
}
- private static boolean isClosedRec(IAType t) throws AlgebricksException {
+ private static boolean isClosed(IAType t) throws AlgebricksException {
switch (t.getTypeTag()) {
+ case MISSING:
case ANY: {
return false;
}
- case CIRCLE:
- case INT8:
- case INT16:
- case INT32:
- case INT64:
- case BINARY:
- case BITARRAY:
- case FLOAT:
- case DOUBLE:
- case STRING:
- case LINE:
- case NULL:
- case BOOLEAN:
- case DATETIME:
- case DATE:
- case TIME:
- case UUID:
- case DURATION:
- case YEARMONTHDURATION:
- case DAYTIMEDURATION:
- case INTERVAL:
- case POINT:
- case POINT3D:
- case POLYGON:
- case RECTANGLE:
case SHORTWITHOUTTYPEINFO: {
return true;
}
@@ -219,24 +195,21 @@ public class SetClosedRecordConstructorsRule implements IAlgebraicRewriteRule {
}
case UNION: {
AUnionType ut = (AUnionType) t;
- for (IAType t2 : ut.getUnionList()) {
- if (!isClosedRec(t2)) {
- return false;
- }
+ if (!isClosed(ut.getActualType())) {
+ return false;
}
return true;
}
case ORDEREDLIST: {
AOrderedListType ol = (AOrderedListType) t;
- return isClosedRec(ol.getItemType());
+ return isClosed(ol.getItemType());
}
case UNORDEREDLIST: {
AUnorderedListType ul = (AUnorderedListType) t;
- return isClosedRec(ul.getItemType());
- }
- default: {
- throw new IllegalStateException("Closed type analysis not implemented for type " + t);
+ return isClosed(ul.getItemType());
}
+ default:
+ return true;
}
}
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
index 0152c12..d17b663 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AbstractIntroduceAccessMethodRule.java
@@ -443,7 +443,7 @@ public abstract class AbstractIntroduceAccessMethodRule implements IAlgebraicRew
// Need to also verify the index is pending no op
if (index.getKeyFieldNames().contains(fieldName) && index.getPendingOp() == IMetadataEntity.PENDING_NO_OP) {
indexCandidates.add(index);
- if (optFuncExpr.getFieldType(varIdx) == BuiltinType.ANULL
+ if (optFuncExpr.getFieldType(varIdx) == BuiltinType.AMISSING
|| optFuncExpr.getFieldType(varIdx) == BuiltinType.ANY) {
optFuncExpr.setFieldType(varIdx,
index.getKeyFieldTypes().get(index.getKeyFieldNames().indexOf(fieldName)));
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
index 2ce43c2..db2c627 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/AccessMethodUtils.java
@@ -516,7 +516,7 @@ public class AccessMethodUtils {
return primaryIndexUnnestOp;
}
- public static ScalarFunctionCallExpression findLOJIsNullFuncInGroupBy(GroupByOperator lojGroupbyOp)
+ public static ScalarFunctionCallExpression findLOJIsMissingFuncInGroupBy(GroupByOperator lojGroupbyOp)
throws AlgebricksException {
//find IS_NULL function of which argument has the nullPlaceholder variable in the nested plan of groupby.
ALogicalPlanImpl subPlan = (ALogicalPlanImpl) lojGroupbyOp.getNestedPlans().get(0);
@@ -536,7 +536,7 @@ public class AccessMethodUtils {
if (notFuncExpr.getArguments().get(0).getValue()
.getExpressionTag() == LogicalExpressionTag.FUNCTION_CALL) {
if (((AbstractFunctionCallExpression) notFuncExpr.getArguments().get(0).getValue())
- .getFunctionIdentifier().equals(AlgebricksBuiltinFunctions.IS_NULL)) {
+ .getFunctionIdentifier().equals(AlgebricksBuiltinFunctions.IS_MISSING)) {
isNullFuncExpr = (ScalarFunctionCallExpression) notFuncExpr.getArguments().get(0)
.getValue();
if (isNullFuncExpr.getArguments().get(0).getValue()
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/535d86b5/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
index 8a9bb3f..e1cda09 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/am/IntroduceJoinAccessMethodRule.java
@@ -158,7 +158,7 @@ public class IntroduceJoinAccessMethodRule extends AbstractIntroduceAccessMethod
if (isLeftOuterJoin && hasGroupBy) {
analysisCtx.setLOJGroupbyOpRef(opRef);
ScalarFunctionCallExpression isNullFuncExpr = AccessMethodUtils
- .findLOJIsNullFuncInGroupBy((GroupByOperator) opRef.getValue());
+ .findLOJIsMissingFuncInGroupBy((GroupByOperator) opRef.getValue());
analysisCtx.setLOJIsNullFuncInGroupBy(isNullFuncExpr);
}