You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by mb...@apache.org on 2025/06/01 15:01:58 UTC
(asterixdb) 12/19: Merge branch 'gerrit/trinity' into 'gerrit/ionic'
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 <mi...@couchbase.com>
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>