Till Westmann has posted comments on this change. Change subject: ASTERIXDB-1228: Add MISSING into the data model. ......................................................................
Patch Set 7: (50 comments) Looks generally good. Only tiny comments (but I've learned some things). https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java File asterixdb/asterix-app/src/test/java/org/apache/asterix/runtime/NullMissingTest.java: Line 52: && !className.contains("SimilarityJaccardPrefix")) { Couldn't we just get the "right" list of functions from the FunctionCollection? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java File asterixdb/asterix-external-data/src/main/java/org/apache/asterix/external/parser/ADMDataParser.java: Line 467: if (aObjectType.getTypeTag() == ATypeTag.UNION) { One check too many ... https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/builders/AbstractListBuilder.java: Line 88: data[start] = ATypeTag.SERIALIZED_NULL_TYPE_TAG; Would it be better to do this when writing to the output stream instead of modifying the content of the reference here? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/comparators/AObjectAscBinaryComparatorFactory.java: Line 121: } Can we just put a conditional expression here? Line 136: } Can we just put a conditional expression here? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinter.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/adm/AObjectPrinter.java: Line 64: } Seems that we can combine the missing and null cases here ... https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinter.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/csv/AObjectPrinter.java: Line 59: case MISSING: { It seems that we should also get null when printing CSVs ... https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinter.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/clean/AObjectPrinter.java: Line 61: case MISSING: { It seems that we should also get null when printing JSON ... https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AObjectPrinter.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/dataflow/data/nontagged/printers/json/lossless/AObjectPrinter.java: Line 66: ANullPrinter.INSTANCE.print(b, s, l, ps); Seems that we can combine the missing and null cases here ... https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlADMPrinterFactoryProvider.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlADMPrinterFactoryProvider.java: Line 82: return ANullPrinterFactory.INSTANCE; Combine missing and null? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryBooleanInspectorImpl.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlBinaryBooleanInspectorImpl.java: Line 42: if (bytes[offset] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG Might want to pull bytes[offset] out in case the JIT doesn't do this automatically .. https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlCSVPrinterFactoryProvider.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlCSVPrinterFactoryProvider.java: Line 78: return ANullPrinterFactory.INSTANCE; Combine missing and null? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlCleanJSONPrinterFactoryProvider.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlCleanJSONPrinterFactoryProvider.java: Line 82: return ANullPrinterFactory.INSTANCE; Combine missing and null? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlLosslessJSONPrinterFactoryProvider.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/formats/nontagged/AqlLosslessJSONPrinterFactoryProvider.java: Line 82: return ANullPrinterFactory.INSTANCE; Combine missing and null? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/adm/APrintVisitor.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/adm/APrintVisitor.java: Line 127: ANullPrinter.INSTANCE.print(b, s, l, ps); combine cases? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/csv/APrintVisitor.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/csv/APrintVisitor.java: Line 124: break; combine cases? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/clean/APrintVisitor.java: Line 129: } combine cases? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/pointables/printer/json/lossless/APrintVisitor.java: Line 127: ANullPrinter.INSTANCE.print(b, s, l, ps); combine cases? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/AbstractResultTypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/AbstractResultTypeComputer.java: Line 59: * @param knownInputTypes, Comment not updated? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/IResultTypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/base/IResultTypeComputer.java: Line 28: Revert file? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/CollectionMemberResultType.java: Line 38: if (type.getTypeTag() != ATypeTag.UNORDEREDLIST && type.getTypeTag() != ATypeTag.ORDEREDLIST) { Couldn't the argument be ANY as well? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotMissingTypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NotMissingTypeComputer.java: Line 36: * This class is the type computer for not-null function. fix comment https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAddSubMulDivTypeComputer.java: Line 209: return BuiltinType.ANY; Why do we return in some cases and assign a value to "type" in other cases? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericAggTypeComputer.java: Line 66: case ANY: Is this correct? It seems that we might overflow easily. Are those the current semantics? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRoundHalfToEven2TypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/NumericRoundHalfToEven2TypeComputer.java: Line 68: } Do we need to throw if argIndex > 1? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/RecordAddFieldsTypeComputer.java: Line 66: ARecordType inputRecordType = TypeComputeUtils.extractRecordType(type0); What is the difference between TypeComputeUtils and TypeComputerUtils? Seems a little confusing https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/ScalarVersionOfAggregateResultType.java: Line 51: AbstractCollectionType act = (AbstractCollectionType) strippedInputTypes[0]; Pull this one to the top? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/TypeComputeUtils.java: Line 170: private static IAType getActualType(IAType inputType) { return inputType.getTypeTag() == ATypeTag.UNION ? ((AUnionType) inputType).getActualType() : inputType; ? Line 178: public static ARecordType extractRecordType(IAType t) { Should we just switch on the type tag in these methods? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryBinaryInt64TypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryBinaryInt64TypeComputer.java: Line 39: throw new AlgebricksException("The argument should be boolean Type."); s/boolean/binary/ https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryStringInt64TypeComputer.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/UnaryStringInt64TypeComputer.java: Line 39: throw new AlgebricksException("Second argument should be integer Type."); Message seems wrong. https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHelper.java File asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHelper.java: Line 29: AUnionType ut = (AUnionType) t; Can we inline this and remove all the curly braces in this method? Line 45: AUnionType ut = (AUnionType) t; Same as above ... Line 54: public static IAType getActualType(IAType t) { this is the same as TypeComputeUtils.getActualType Line 72: } Same as above https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/pom.xml File asterixdb/asterix-runtime/pom.xml: Line 86: </dependency> Do we have this in LICENSE/NOTICE? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SqlSumAggregateFunction.java: Line 65: } revert file? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/std/SumAggregateFunction.java: Line 70: } revert file? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java: Line 85: editDistance = computeResult(argPtr1, argPtr2, firstTypeTag); Maybe one big try-catch for "HyracksDataException|IOException"? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java: Line 96: } Pull serialization after the if? Line 130: byte tagByte2 = argRight.getTag(); inline these 2? Line 140: } "return ATypeHierarchy.isCompatible(typeTag1, typeTag2)"? Line 147: return result; inline? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterableDescriptor.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/EditDistanceStringIsFilterableDescriptor.java: Line 36: * are fed into a (non indexed) nested-loop join. line length? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/binary/AbstractSubBinaryEvaluator.java: Line 93: throw new AlgebricksException(e); Remove this first catch? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/CodeGenUtil.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/CodeGenUtil.java: Line 41: private final static String DESCRIPTER_SUPER_CLASS_NAME = "org/apache/asterix/runtime/evaluators/base/AbstractScalarFunctionDynamicDescriptor"; s/DESCRIPTER/DESCRIPTOR/ line too long https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/TypeChecker.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/staticcodegen/TypeChecker.java: Line 45: if (data[start] == ATypeTag.SERIALIZED_MISSING_TYPE_TAG) { Pull data[start] out to make life easier for the compiler? https://asterix-gerrit.ics.uci.edu/#/c/846/7/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java File asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/formats/NonTaggedDataFormat.java: Line 406: "reset(org.apache.asterix.om.types.IAType, org.apache.asterix.om.types.IAType, org.apache.asterix.om.types.IAType)", line too long Line 441: "reset(org.apache.asterix.om.types.IAType, org.apache.asterix.om.types.IAType, org.apache.asterix.om.types.IAType)", line too long Line 463: "reset(org.apache.asterix.om.types.IAType, org.apache.asterix.om.types.IAType, org.apache.asterix.om.types.IAType)", line too long -- To view, visit https://asterix-gerrit.ics.uci.edu/846 To unsubscribe, visit https://asterix-gerrit.ics.uci.edu/settings Gerrit-MessageType: comment Gerrit-Change-Id: Ia49ed8474bfc5d6604231819065117468c5b0897 Gerrit-PatchSet: 7 Gerrit-Project: asterixdb Gerrit-Branch: master Gerrit-Owner: Yingyi Bu <buyin...@gmail.com> Gerrit-Reviewer: Jenkins <jenk...@fulliautomatix.ics.uci.edu> Gerrit-Reviewer: Michael Blow <michael.b...@couchbase.com> Gerrit-Reviewer: Till Westmann <ti...@apache.org> Gerrit-Reviewer: abdullah alamoudi <bamou...@gmail.com> Gerrit-HasComments: Yes