This is an automated email from the ASF dual-hosted git repository. mblow pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/asterixdb.git
commit 3fbcd5d04d6550bff820a4f240badadc0186a4d6 Merge: 2684395bed 32007cff27 Author: Michael Blow <[email protected]> AuthorDate: Fri May 23 17:07:04 2025 -0400 Merge branch 'gerrit/trinity' into 'gerrit/ionic' Change-Id: I8d48ac8209669e079be938b382b16de03f00dd85 .../InjectTypeCastForFunctionArgumentsRule.java | 1 + asterixdb/asterix-app/pom.xml | 2 +- .../hash_join_exchange.5.query.sqlpp | 47 +++++ .../hash_join_exchange.7.query.sqlpp | 30 +++ .../hash_join_exchange.9.query.sqlpp | 41 ++++ .../hash_join_exchange_1.11.query.sqlpp | 43 ++++ .../hash_join_exchange_1.13.query.sqlpp | 36 ++++ .../hash_join_exchange_1.5.query.sqlpp | 46 +++++ .../hash_join_exchange_1.7.query.sqlpp | 33 +++ .../hash_join_exchange_1.9.query.sqlpp | 32 +++ .../hash_join_exchange.5.query.plan | 42 ++++ .../hash_join_exchange.7.query.plan | 42 ++++ .../hash_join_exchange.9.query.plan | 60 ++++++ .../hash_join_exchange_1.11.query.plan | 44 ++++ .../hash_join_exchange_1.13.query.plan | 42 ++++ .../hash_join_exchange_1.5.query.plan | 42 ++++ .../hash_join_exchange_1.7.query.plan | 44 ++++ .../hash_join_exchange_1.9.query.plan | 44 ++++ .../hash_join_exchange.1.ddl.sqlpp | 28 +++ .../hash_join_exchange.2.update.sqlpp | 30 +++ .../hash_join_exchange.3.update.sqlpp | 37 ++++ .../hash_join_exchange.4.query.sqlpp | 33 +++ .../hash_join_exchange.6.query.sqlpp | 26 +++ .../hash_join_exchange.8.query.sqlpp | 33 +++ .../hash_join_exchange_1.1.ddl.sqlpp | 27 +++ .../hash_join_exchange_1.10.query.sqlpp | 33 +++ .../hash_join_exchange_1.12.query.sqlpp | 28 +++ .../hash_join_exchange_1.2.update.sqlpp | 24 +++ .../hash_join_exchange_1.3.update.sqlpp | 25 +++ .../hash_join_exchange_1.4.query.sqlpp | 31 +++ .../hash_join_exchange_1.6.query.sqlpp | 25 +++ .../hash_join_exchange_1.8.query.sqlpp | 24 +++ .../handle_error_fun.01.query.sqlpp | 25 +++ .../hash_join_exchange/hash_join_exchange.4.adm | 10 + .../hash_join_exchange/hash_join_exchange.6.adm | 10 + .../hash_join_exchange/hash_join_exchange.8.adm | 10 + .../hash_join_exchange_1.10.adm | 100 +++++++++ .../hash_join_exchange_1.12.adm | 100 +++++++++ .../hash_join_exchange_1.4.adm | 100 +++++++++ .../hash_join_exchange_1.6.adm | 100 +++++++++ .../hash_join_exchange_1.8.adm | 100 +++++++++ .../misc/handle_error_fun/handle_error_fun.01.adm | 1 + .../src/test/resources/runtimets/sqlpp_queries.xml | 15 ++ asterixdb/asterix-external-data/pom.xml | 5 - .../asterix/om/functions/BuiltinFunctions.java | 3 + .../evaluators/functions/IfErrorDescriptor.java | 70 +++++++ .../runtime/functions/FunctionCollection.java | 2 + asterixdb/pom.xml | 229 ++------------------- .../physical/AbstractHashJoinPOperator.java | 25 +-- hyracks-fullstack/hyracks/hyracks-hdfs/pom.xml | 4 +- hyracks-fullstack/pom.xml | 95 ++++++++- 51 files changed, 1829 insertions(+), 250 deletions(-) diff --cc asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml index 10e8302c06,50431e1309..d216c2d9e4 --- a/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml +++ b/asterixdb/asterix-app/src/test/resources/runtimets/sqlpp_queries.xml @@@ -7529,11 -7325,11 +7539,16 @@@ <output-dir compare="Text">serialized_size_fun</output-dir> </compilation-unit> </test-case> + <test-case FilePath="misc"> + <compilation-unit name="handle_error_fun"> + <output-dir compare="Text">handle_error_fun</output-dir> + </compilation-unit> + </test-case> + <test-case FilePath="misc"> + <compilation-unit name="query-ASTERIXDB-3299"> + <output-dir compare="Text">query-ASTERIXDB-3299</output-dir> + </compilation-unit> + </test-case> <test-case FilePath="misc"> <compilation-unit name="query-ASTERIXDB-3334"> <output-dir compare="Text">query-ASTERIXDB-3334</output-dir> diff --cc asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java index 2bf5adcf01,5f5fe73260..1250eb91f7 --- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java +++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/BuiltinFunctions.java @@@ -1222,89 -1614,121 +1222,91 @@@ public class BuiltinFunctions public static final FunctionIdentifier NUMERIC_ADD = AlgebricksBuiltinFunctions.NUMERIC_ADD; public static final FunctionIdentifier IS_MISSING = AlgebricksBuiltinFunctions.IS_MISSING; public static final FunctionIdentifier IS_NULL = AlgebricksBuiltinFunctions.IS_NULL; - public static final FunctionIdentifier IS_UNKNOWN = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-unknown", 1); - public static final FunctionIdentifier IS_ATOMIC = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-atomic", 1); - public static final FunctionIdentifier IS_BOOLEAN = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-boolean", 1); - public static final FunctionIdentifier IS_BINARY = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-binary", 1); - public static final FunctionIdentifier IS_POINT = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-point", 1); - public static final FunctionIdentifier IS_LINE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-line", 1); - public static final FunctionIdentifier IS_RECTANGLE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-rectangle", 1); - public static final FunctionIdentifier IS_CIRCLE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-circle", 1); - public static final FunctionIdentifier IS_POLYGON = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-polygon", 1); - public static final FunctionIdentifier IS_SPATIAL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-spatial", 1); - public static final FunctionIdentifier IS_DATE = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-date", 1); - public static final FunctionIdentifier IS_DATETIME = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-datetime", 1); - public static final FunctionIdentifier IS_TIME = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-time", 1); - public static final FunctionIdentifier IS_DURATION = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-duration", 1); - public static final FunctionIdentifier IS_INTERVAL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-interval", 1); - public static final FunctionIdentifier IS_TEMPORAL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-temporal", 1); - public static final FunctionIdentifier IS_UUID = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-uuid", 1); - public static final FunctionIdentifier IS_NUMBER = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-number", 1); - public static final FunctionIdentifier IS_STRING = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-string", 1); - public static final FunctionIdentifier IS_ARRAY = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-array", 1); - public static final FunctionIdentifier IS_OBJECT = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-object", 1); - public static final FunctionIdentifier IS_MULTISET = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-multiset", 1); - public static final FunctionIdentifier GET_TYPE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-type", 1); - - public static final FunctionIdentifier IS_SYSTEM_NULL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-system-null", 1); - public static final FunctionIdentifier CHECK_UNKNOWN = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "check-unknown", 1); + public static final FunctionIdentifier IS_UNKNOWN = FunctionConstants.newAsterix("is-unknown", 1); + public static final FunctionIdentifier IS_ATOMIC = FunctionConstants.newAsterix("is-atomic", 1); + public static final FunctionIdentifier IS_BOOLEAN = FunctionConstants.newAsterix("is-boolean", 1); + public static final FunctionIdentifier IS_BINARY = FunctionConstants.newAsterix("is-binary", 1); + public static final FunctionIdentifier IS_POINT = FunctionConstants.newAsterix("is-point", 1); + public static final FunctionIdentifier IS_LINE = FunctionConstants.newAsterix("is-line", 1); + public static final FunctionIdentifier IS_RECTANGLE = FunctionConstants.newAsterix("is-rectangle", 1); + public static final FunctionIdentifier IS_CIRCLE = FunctionConstants.newAsterix("is-circle", 1); + public static final FunctionIdentifier IS_POLYGON = FunctionConstants.newAsterix("is-polygon", 1); + public static final FunctionIdentifier IS_SPATIAL = FunctionConstants.newAsterix("is-spatial", 1); + public static final FunctionIdentifier IS_DATE = FunctionConstants.newAsterix("is-date", 1); + public static final FunctionIdentifier IS_DATETIME = FunctionConstants.newAsterix("is-datetime", 1); + public static final FunctionIdentifier IS_TIME = FunctionConstants.newAsterix("is-time", 1); + public static final FunctionIdentifier IS_DURATION = FunctionConstants.newAsterix("is-duration", 1); + public static final FunctionIdentifier IS_INTERVAL = FunctionConstants.newAsterix("is-interval", 1); + public static final FunctionIdentifier IS_TEMPORAL = FunctionConstants.newAsterix("is-temporal", 1); + public static final FunctionIdentifier IS_UUID = FunctionConstants.newAsterix("is-uuid", 1); + public static final FunctionIdentifier IS_NUMBER = FunctionConstants.newAsterix("is-number", 1); + public static final FunctionIdentifier IS_STRING = FunctionConstants.newAsterix("is-string", 1); + public static final FunctionIdentifier IS_ARRAY = FunctionConstants.newAsterix("is-array", 1); + public static final FunctionIdentifier IS_OBJECT = FunctionConstants.newAsterix("is-object", 1); + public static final FunctionIdentifier IS_MULTISET = FunctionConstants.newAsterix("is-multiset", 1); + public static final FunctionIdentifier GET_TYPE = FunctionConstants.newAsterix("get-type", 1); + + public static final FunctionIdentifier IS_SYSTEM_NULL = FunctionConstants.newAsterix("is-system-null", 1); + public static final FunctionIdentifier CHECK_UNKNOWN = FunctionConstants.newAsterix("check-unknown", 1); public static final FunctionIdentifier COLLECTION_TO_SEQUENCE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "collection-to-sequence", 1); + FunctionConstants.newAsterix("collection-to-sequence", 1); public static final FunctionIdentifier IF_MISSING = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-missing", FunctionIdentifier.VARARGS); + FunctionConstants.newAsterix("if-missing", FunctionIdentifier.VARARGS); public static final FunctionIdentifier IF_NULL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-null", FunctionIdentifier.VARARGS); + FunctionConstants.newAsterix("if-null", FunctionIdentifier.VARARGS); public static final FunctionIdentifier IF_MISSING_OR_NULL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-missing-or-null", FunctionIdentifier.VARARGS); + FunctionConstants.newAsterix("if-missing-or-null", FunctionIdentifier.VARARGS); public static final FunctionIdentifier IF_SYSTEM_NULL = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-system-null", FunctionIdentifier.VARARGS); - public static final FunctionIdentifier IF_INF = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-inf", FunctionIdentifier.VARARGS); - public static final FunctionIdentifier IF_NAN = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-nan", FunctionIdentifier.VARARGS); + FunctionConstants.newAsterix("if-system-null", FunctionIdentifier.VARARGS); + public static final FunctionIdentifier IF_INF = FunctionConstants.newAsterix("if-inf", FunctionIdentifier.VARARGS); + public static final FunctionIdentifier IF_NAN = FunctionConstants.newAsterix("if-nan", FunctionIdentifier.VARARGS); public static final FunctionIdentifier IF_NAN_OR_INF = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-nan-or-inf", FunctionIdentifier.VARARGS); - - public static final FunctionIdentifier MISSING_IF = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "missing-if", 2); - public static final FunctionIdentifier NULL_IF = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "null-if", 2); - public static final FunctionIdentifier NAN_IF = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "nan-if", 2); - public static final FunctionIdentifier POSINF_IF = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "posinf-if", 2); - public static final FunctionIdentifier NEGINF_IF = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "neginf-if", 2); - - public static final FunctionIdentifier TO_ATOMIC = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-atomic", 1); - public static final FunctionIdentifier TO_ARRAY = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-array", 1); - public static final FunctionIdentifier TO_BIGINT = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-bigint", 1); - public static final FunctionIdentifier TO_BOOLEAN = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-boolean", 1); - public static final FunctionIdentifier TO_DOUBLE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-double", 1); - public static final FunctionIdentifier TO_NUMBER = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-number", 1); - public static final FunctionIdentifier TO_OBJECT = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-object", 1); - public static final FunctionIdentifier TO_STRING = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "to-string", 1); - - public static final FunctionIdentifier TREAT_AS_INTEGER = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "treat-as-integer", 1); + FunctionConstants.newAsterix("if-nan-or-inf", FunctionIdentifier.VARARGS); + + public static final FunctionIdentifier MISSING_IF = FunctionConstants.newAsterix("missing-if", 2); + public static final FunctionIdentifier NULL_IF = FunctionConstants.newAsterix("null-if", 2); + public static final FunctionIdentifier NAN_IF = FunctionConstants.newAsterix("nan-if", 2); + public static final FunctionIdentifier POSINF_IF = FunctionConstants.newAsterix("posinf-if", 2); + public static final FunctionIdentifier NEGINF_IF = FunctionConstants.newAsterix("neginf-if", 2); + + public static final FunctionIdentifier TO_ATOMIC = FunctionConstants.newAsterix("to-atomic", 1); + public static final FunctionIdentifier TO_ARRAY = FunctionConstants.newAsterix("to-array", 1); + public static final FunctionIdentifier TO_BIGINT = FunctionConstants.newAsterix("to-bigint", 1); + public static final FunctionIdentifier TO_BOOLEAN = FunctionConstants.newAsterix("to-boolean", 1); + public static final FunctionIdentifier TO_DOUBLE = FunctionConstants.newAsterix("to-double", 1); + public static final FunctionIdentifier TO_NUMBER = FunctionConstants.newAsterix("to-number", 1); + public static final FunctionIdentifier TO_OBJECT = FunctionConstants.newAsterix("to-object", 1); + public static final FunctionIdentifier TO_OBJECT_VAR_STR = FunctionConstants.newAsterix("to-object-var-str", 1); + public static final FunctionIdentifier TO_STRING = FunctionConstants.newAsterix("to-string", 1); + + public static final FunctionIdentifier TREAT_AS_INTEGER = FunctionConstants.newAsterix("treat-as-integer", 1); public static final FunctionIdentifier IS_NUMERIC_ADD_COMPATIBLE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "is-numeric-add-compatible", 1); + FunctionConstants.newAsterix("is-numeric-add-compatible", 1); public static final FunctionIdentifier EXTERNAL_LOOKUP = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "external-lookup", FunctionIdentifier.VARARGS); + FunctionConstants.newAsterix("external-lookup", FunctionIdentifier.VARARGS); - public static final FunctionIdentifier GET_JOB_PARAMETER = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "get-job-param", 1); + public static final FunctionIdentifier GET_JOB_PARAMETER = FunctionConstants.newAsterix("get-job-param", 1); - public static final FunctionIdentifier META = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "meta", FunctionIdentifier.VARARGS); + public static final FunctionIdentifier META = FunctionConstants.newAsterix("meta", FunctionIdentifier.VARARGS); public static final FunctionIdentifier META_KEY = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "meta-key", FunctionIdentifier.VARARGS); + FunctionConstants.newAsterix("meta-key", FunctionIdentifier.VARARGS); public static final FunctionIdentifier DECODE_DATAVERSE_NAME = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "decode-dataverse-name", 1); + FunctionConstants.newAsterix("decode-dataverse-name", 1); + + public static final FunctionIdentifier SERIALIZED_SIZE = FunctionConstants.newAsterix("serialized-size", 1); + + public static final FunctionIdentifier PUT_AUTOGENERATED_KEY = + FunctionConstants.newAsterix("put-autogenerated-key", FunctionIdentifier.VARARGS); - public static final FunctionIdentifier SERIALIZED_SIZE = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "serialized-size", 1); - public static final FunctionIdentifier IF_ERROR = - new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "if-error", 2); + public static final FunctionIdentifier ACCESS_FIELD = FunctionConstants.newAsterix("access-field", 2); + + public static final FunctionIdentifier ACCESS_NESTED_FIELD = FunctionConstants.newAsterix("access-nested-field", 2); + ++ public static final FunctionIdentifier IF_ERROR = FunctionConstants.newAsterix("if-error", 2); + static { // first, take care of Algebricks builtin functions addFunction(IS_MISSING, BooleanOnlyTypeComputer.INSTANCE, true); @@@ -2159,8 -2570,8 +2161,9 @@@ addFunction(DECODE_DATAVERSE_NAME, OrderedListOfAStringTypeComputer.INSTANCE_NULLABLE, true); addPrivateFunction(COLLECTION_TO_SEQUENCE, CollectionToSequenceTypeComputer.INSTANCE, true); - addPrivateFunction(SERIALIZED_SIZE, AInt64TypeComputer.INSTANCE, true); + addFunction(SERIALIZED_SIZE, AInt64TypeComputer.INSTANCE, true); + // used by CBO's internal sampling queries for determining projection sizes + addPrivateFunction(IF_ERROR, AnyTypeComputer.INSTANCE, true); // external lookup addPrivateFunction(EXTERNAL_LOOKUP, AnyTypeComputer.INSTANCE, false); diff --cc asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IfErrorDescriptor.java index 0000000000,a4e830f824..d51d8d0025 mode 000000,100644..100644 --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IfErrorDescriptor.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/functions/IfErrorDescriptor.java @@@ -1,0 -1,70 +1,70 @@@ + /* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + + package org.apache.asterix.runtime.evaluators.functions; + + import org.apache.asterix.om.functions.BuiltinFunctions; + import org.apache.asterix.om.functions.IFunctionDescriptorFactory; + import org.apache.asterix.runtime.evaluators.base.AbstractScalarFunctionDynamicDescriptor; + import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier; -import org.apache.hyracks.algebricks.runtime.base.IEvaluatorContext; + import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; + import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; ++import org.apache.hyracks.api.context.IEvaluatorContext; + import org.apache.hyracks.api.exceptions.HyracksDataException; + import org.apache.hyracks.data.std.api.IPointable; + import org.apache.hyracks.data.std.primitive.VoidPointable; + import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference; + + public final class IfErrorDescriptor extends AbstractScalarFunctionDynamicDescriptor { + private static final long serialVersionUID = 1L; + + public static final IFunctionDescriptorFactory FACTORY = IfErrorDescriptor::new; + + @Override + public IScalarEvaluatorFactory createEvaluatorFactory(IScalarEvaluatorFactory[] args) { + return new IScalarEvaluatorFactory() { + private static final long serialVersionUID = 1L; + + @Override + public IScalarEvaluator createScalarEvaluator(IEvaluatorContext ctx) throws HyracksDataException { + return new AbstractScalarEval(sourceLoc, getIdentifier()) { + private final IScalarEvaluator eval0 = args[0].createScalarEvaluator(ctx); + private final IScalarEvaluator eval1 = args[1].createScalarEvaluator(ctx); + private final VoidPointable arg = VoidPointable.FACTORY.createPointable(); + + @Override + public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException { + try { + eval0.evaluate(tuple, arg); + result.set(arg); + } catch (Throwable th) { + eval1.evaluate(tuple, arg); + result.set(arg); + } + } + }; + } + }; + } + + @Override + public FunctionIdentifier getIdentifier() { + return BuiltinFunctions.IF_ERROR; + } + } diff --cc asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java index d682d7a58a,95f3135b9a..f6ef58f9fc --- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java +++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/functions/FunctionCollection.java @@@ -1360,7 -1336,7 +1361,8 @@@ public final class FunctionCollection i fc.add(DecodeDataverseNameDescriptor.FACTORY); fc.add(RandomWithSeedDescriptor.FACTORY); fc.add(SerializedSizeDescriptor.FACTORY); + fc.add(PutAutogeneratedKeyDescriptor.FACTORY); + fc.add(IfErrorDescriptor.FACTORY); ServiceLoader.load(IFunctionRegistrant.class).iterator().forEachRemaining(c -> c.register(fc)); return fc; diff --cc hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractHashJoinPOperator.java index 800c839725,443b21174c..920f567b42 --- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractHashJoinPOperator.java +++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/AbstractHashJoinPOperator.java @@@ -143,17 -142,15 +143,15 @@@ public abstract class AbstractHashJoinP Set<LogicalVariable> firstDeliveredVars = unorderedFirstDelivered.getColumnSet(); UnorderedPartitionedProperty unorderedRequired = (UnorderedPartitionedProperty) requirements; - Set<LogicalVariable> originalRequiredVars = unorderedRequired.getColumnSet(); - Set<LogicalVariable> modifiedRequiredVars = new ListSet<LogicalVariable>(); + Set<LogicalVariable> modifiedRequiredVars = new ListSet<>(); Map<LogicalVariable, EquivalenceClass> eqmap = context.getEquivalenceClassMap(op); - Set<LogicalVariable> coveredVars = new ListSet<LogicalVariable>(); + Set<LogicalVariable> coveredVars = new ListSet<>(); - List<LogicalVariable> keysFirst = - (keysRightBranch.containsAll(originalRequiredVars)) ? keysRightBranch - : keysLeftBranch; + List<LogicalVariable> keysFirst = (keysRightBranch.containsAll(firstDeliveredVars)) + ? keysRightBranch : keysLeftBranch; List<LogicalVariable> keysSecond = keysFirst == keysRightBranch ? keysLeftBranch : keysRightBranch; - for (LogicalVariable r : originalRequiredVars) { - EquivalenceClass ecSnd = eqmap.get(r); + for (LogicalVariable r : firstDeliveredVars) { + EquivalenceClass ecFirst = eqmap.get(r); boolean found = false; int j = 0; for (LogicalVariable rvar : keysFirst) { diff --cc hyracks-fullstack/pom.xml index 6793d24637,1e4f07022e..aa1f8a2bad --- a/hyracks-fullstack/pom.xml +++ b/hyracks-fullstack/pom.xml @@@ -75,10 -75,7 +75,10 @@@ <snappy.version>1.1.10.5</snappy.version> <jackson.version>2.14.3</jackson.version> <jackson-databind.version>${jackson.version}</jackson-databind.version> - <netty.version>4.1.118.Final</netty.version> + <netty.version>4.1.121.Final</netty.version> + <asm.version>9.3</asm.version> + <awsjavasdk.version>2.29.27</awsjavasdk.version> + <gcsjavasdk.version>2.45.0</gcsjavasdk.version> <implementation.title>Apache Hyracks and Algebricks - ${project.name}</implementation.title> <implementation.url>https://asterixdb.apache.org/</implementation.url>
