This is an automated email from the ASF dual-hosted git repository.
michaelsmith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/impala.git
The following commit(s) were added to refs/heads/master by this push:
new 0d90b82a4 IMPALA-14482: Calcite planner: order by "random()" fixed
0d90b82a4 is described below
commit 0d90b82a425019057595d14fba81d695bf3da7aa
Author: Steve Carlin <[email protected]>
AuthorDate: Fri Mar 13 07:55:41 2026 -0700
IMPALA-14482: Calcite planner: order by "random()" fixed
The SortRemoveConstantKeysRule in Calcite was removing functions
that did not have any column expressions in it.
This commit ensure that the isDeterministic method for the operator
returns the correct value.
The test for this can be found in:
test_sort.py::TestRandomSort::test_order_by_random
Change-Id: I6ebf3aa11030d98b447d08d1364f5f65eb2ca661
Reviewed-on: http://gerrit.cloudera.org:8080/24074
Reviewed-by: Michael Smith <[email protected]>
Tested-by: Impala Public Jenkins <[email protected]>
Reviewed-by: Steve Carlin <[email protected]>
---
.../main/java/org/apache/impala/analysis/FunctionCallExpr.java | 4 +++-
.../org/apache/impala/calcite/operators/ImpalaOperator.java | 10 ++++++++++
2 files changed, 13 insertions(+), 1 deletion(-)
diff --git a/fe/src/main/java/org/apache/impala/analysis/FunctionCallExpr.java
b/fe/src/main/java/org/apache/impala/analysis/FunctionCallExpr.java
index a181e8617..6cb8fc7bf 100644
--- a/fe/src/main/java/org/apache/impala/analysis/FunctionCallExpr.java
+++ b/fe/src/main/java/org/apache/impala/analysis/FunctionCallExpr.java
@@ -60,6 +60,8 @@ public class FunctionCallExpr extends Expr {
private boolean isAnalyticFnCall_ = false;
private boolean isInternalFnCall_ = false;
+ public static final Set<String> NON_DETERMINISTIC_FNS =
+ ImmutableSet.of("rand", "random", "uuid");
// cache prior shouldConvertToCNF checks to avoid repeat tree walking
// omitted from clone in case cloner plans to mutate the expr
protected Optional<Boolean> shouldConvertToCNF_ = Optional.empty();
@@ -382,7 +384,7 @@ public class FunctionCallExpr extends Expr {
* about user defined functions.
*/
public boolean isNondeterministicBuiltinFn() {
- return functionNameInBuiltinSet(fnName_, ImmutableSet.of("rand", "random",
"uuid"));
+ return functionNameInBuiltinSet(fnName_, NON_DETERMINISTIC_FNS);
}
/**
diff --git
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/operators/ImpalaOperator.java
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/operators/ImpalaOperator.java
index 641e24b89..0f44f6e0e 100644
---
a/java/calcite-planner/src/main/java/org/apache/impala/calcite/operators/ImpalaOperator.java
+++
b/java/calcite-planner/src/main/java/org/apache/impala/calcite/operators/ImpalaOperator.java
@@ -26,6 +26,7 @@ import org.apache.calcite.sql.SqlKind;
import org.apache.calcite.sql.SqlOperandCountRange;
import org.apache.calcite.sql.SqlOperatorBinding;
import org.apache.calcite.sql.SqlSyntax;
+import org.apache.impala.analysis.FunctionCallExpr;
/**
* ImpalaOperator is a custom Calcite operator that handles all generic
functions
@@ -35,9 +36,13 @@ import org.apache.calcite.sql.SqlSyntax;
*/
public class ImpalaOperator extends SqlFunction {
+ public final boolean isDeterministic_;
+
public ImpalaOperator(String name) {
super(name.toUpperCase(), SqlKind.OTHER, null, null, null,
SqlFunctionCategory.USER_DEFINED_FUNCTION);
+ isDeterministic_ =
+ !FunctionCallExpr.NON_DETERMINISTIC_FNS.contains(name.toLowerCase());
}
@Override
@@ -69,4 +74,9 @@ public class ImpalaOperator extends SqlFunction {
public SqlSyntax getSyntax() {
return SqlSyntax.FUNCTION;
}
+
+ @Override
+ public boolean isDeterministic() {
+ return isDeterministic_;
+ }
}