This is an automated email from the ASF dual-hosted git repository.
panxiaolei pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git
The following commit(s) were added to refs/heads/master by this push:
new cec94beb81f [Bug](java-udf) fix core dump when javaudf input 0 row
block (#30720)
cec94beb81f is described below
commit cec94beb81f06807568bc13ae16cfa1644c9f000
Author: Pxl <[email protected]>
AuthorDate: Fri Feb 2 20:03:38 2024 +0800
[Bug](java-udf) fix core dump when javaudf input 0 row block (#30720)
fix core dump when javaudf input 0 row block
---
be/src/olap/schema_change.cpp | 5 +++++
be/src/vec/exec/jni_connector.cpp | 11 +++++------
.../src/main/java/org/apache/doris/analysis/Analyzer.java | 10 ++++++++++
.../org/apache/doris/analysis/CreateMaterializedViewStmt.java | 6 ++++++
.../main/java/org/apache/doris/analysis/FunctionCallExpr.java | 4 ++--
.../java/org/apache/doris/catalog/MaterializedIndexMeta.java | 2 +-
regression-test/data/javaudf_p0/test_javaudf_float.out | 5 +++++
regression-test/suites/javaudf_p0/test_javaudf_float.groovy | 7 +++++++
8 files changed, 41 insertions(+), 9 deletions(-)
diff --git a/be/src/olap/schema_change.cpp b/be/src/olap/schema_change.cpp
index 1543a6dfd5d..6e432b24096 100644
--- a/be/src/olap/schema_change.cpp
+++ b/be/src/olap/schema_change.cpp
@@ -293,6 +293,11 @@ Status BlockChanger::change_block(vectorized::Block*
ref_block,
int result_column_id = -1;
RETURN_IF_ERROR(ctx->execute(ref_block, &result_column_id));
+ if (ref_block->get_by_position(result_column_id).column ==
nullptr) {
+ return Status::Error<ErrorCode::INTERNAL_ERROR>(
+ "{} result column is nullptr",
+ ref_block->get_by_position(result_column_id).name);
+ }
ref_block->replace_by_position_if_const(result_column_id);
if (ref_block->get_by_position(result_column_id).column->size() !=
row_size) {
diff --git a/be/src/vec/exec/jni_connector.cpp
b/be/src/vec/exec/jni_connector.cpp
index 26b66f48aca..fe3bcd50d41 100644
--- a/be/src/vec/exec/jni_connector.cpp
+++ b/be/src/vec/exec/jni_connector.cpp
@@ -215,8 +215,10 @@ Status JniConnector::close() {
Status JniConnector::_init_jni_scanner(JNIEnv* env, int batch_size) {
RETURN_IF_ERROR(
JniUtil::get_jni_scanner_class(env, _connector_class.c_str(),
&_jni_scanner_cls));
- if (_jni_scanner_cls == NULL) {
- if (env->ExceptionOccurred()) env->ExceptionDescribe();
+ if (_jni_scanner_cls == nullptr) {
+ if (env->ExceptionOccurred()) {
+ env->ExceptionDescribe();
+ }
return Status::InternalError("Fail to get JniScanner class.");
}
RETURN_ERROR_IF_EXC(env);
@@ -249,13 +251,10 @@ Status JniConnector::_init_jni_scanner(JNIEnv* env, int
batch_size) {
Status JniConnector::fill_block(Block* block, const ColumnNumbers& arguments,
long table_address) {
if (table_address == 0) {
- return Status::OK();
+ return Status::InternalError("table_address is 0");
}
TableMetaAddress table_meta(table_address);
long num_rows = table_meta.next_meta_as_long();
- if (num_rows == 0) {
- return Status::OK();
- }
for (size_t i : arguments) {
if (block->get_by_position(i).column == nullptr) {
auto return_type = block->get_data_type(i);
diff --git a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
index 115ca193622..38b7403960c 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/Analyzer.java
@@ -192,6 +192,8 @@ public class Analyzer {
private boolean isReAnalyze = false;
+ private boolean isReplay = false;
+
public void setIsSubquery() {
isSubquery = true;
isFirstScopeInSubquery = true;
@@ -266,6 +268,14 @@ public class Analyzer {
return globalState.autoBroadcastJoinThreshold;
}
+ public void setReplay() {
+ isReplay = true;
+ }
+
+ public boolean isReplay() {
+ return isReplay;
+ }
+
private static class InferPredicateState {
// map from two table tuple ids to JoinOperator between two tables.
// NOTE: first tupleId's position in front of the second tupleId.
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
index c6a3db45b96..9c120d70048 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/analysis/CreateMaterializedViewStmt.java
@@ -200,6 +200,9 @@ public class CreateMaterializedViewStmt extends DdlStmt {
rewriteToBitmapWithCheck();
// TODO(ml): The mv name in from clause should pass the analyze
without error.
selectStmt.forbiddenMVRewrite();
+ if (isReplay) {
+ analyzer.setReplay();
+ }
selectStmt.analyze(analyzer);
ExprRewriter rewriter = analyzer.getExprRewriter();
@@ -207,6 +210,9 @@ public class CreateMaterializedViewStmt extends DdlStmt {
selectStmt.rewriteExprs(rewriter);
selectStmt.reset();
analyzer = new Analyzer(analyzer.getEnv(), analyzer.getContext());
+ if (isReplay) {
+ analyzer.setReplay();
+ }
selectStmt.analyze(analyzer);
analyzeSelectClause(analyzer);
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
index 4273b4b56e9..9907b497bb9 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/analysis/FunctionCallExpr.java
@@ -2471,8 +2471,8 @@ public class FunctionCallExpr extends Expr {
String dbName = fnName.analyzeDb(analyzer);
if (!Strings.isNullOrEmpty(dbName)) {
// check operation privilege
- if (!Env.getCurrentEnv().getAccessManager()
- .checkDbPriv(ConnectContext.get(), dbName,
PrivPredicate.SELECT)) {
+ if (!analyzer.isReplay() &&
!Env.getCurrentEnv().getAccessManager().checkDbPriv(ConnectContext.get(),
+ dbName, PrivPredicate.SELECT)) {
ErrorReport.reportAnalysisException(ErrorCode.ERR_SPECIFIC_ACCESS_DENIED_ERROR,
"SELECT");
}
// TODO(gaoxin): ExternalDatabase not implement udf yet.
diff --git
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
index 57d428d481f..82a49b14907 100644
---
a/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
+++
b/fe/fe-core/src/main/java/org/apache/doris/catalog/MaterializedIndexMeta.java
@@ -303,6 +303,7 @@ public class MaterializedIndexMeta implements Writable,
GsonPostProcessable {
CreateMaterializedViewStmt stmt;
try {
stmt = (CreateMaterializedViewStmt) SqlParserUtils.getStmt(parser,
defineStmt.idx);
+ stmt.setIsReplay(true);
if (analyzer != null) {
try {
stmt.analyze(analyzer);
@@ -312,7 +313,6 @@ public class MaterializedIndexMeta implements Writable,
GsonPostProcessable {
}
}
- stmt.setIsReplay(true);
setWhereClause(stmt.getWhereClause());
stmt.rewriteToBitmapWithCheck();
try {
diff --git a/regression-test/data/javaudf_p0/test_javaudf_float.out
b/regression-test/data/javaudf_p0/test_javaudf_float.out
index d806cbd5461..91977ee43e7 100644
--- a/regression-test/data/javaudf_p0/test_javaudf_float.out
+++ b/regression-test/data/javaudf_p0/test_javaudf_float.out
@@ -21,6 +21,11 @@
112 1012333.8
113 \N
+-- !select --
+111 -211111.22
+112 1012333.8
+113 \N
+
-- !select --
113.9475611
diff --git a/regression-test/suites/javaudf_p0/test_javaudf_float.groovy
b/regression-test/suites/javaudf_p0/test_javaudf_float.groovy
index 06a7f6a4730..0672e1545d7 100644
--- a/regression-test/suites/javaudf_p0/test_javaudf_float.groovy
+++ b/regression-test/suites/javaudf_p0/test_javaudf_float.groovy
@@ -63,6 +63,13 @@ suite("test_javaudf_float") {
qt_select """ SELECT java_udf_float_test(2.83645,null) as result ; """
qt_select """ SELECT java_udf_float_test(cast(2.83645 as float),null)
as result ; """
qt_select """ SELECT user_id,java_udf_float_test(float_1, float_2) as
sum FROM ${tableName} order by user_id; """
+ createMV("create materialized view udf_mv as SELECT
user_id,java_udf_float_test(float_1, float_2) as sum FROM test_javaudf_float
order by user_id;")
+ qt_select """ SELECT user_id,java_udf_float_test(float_1, float_2) as
sum FROM ${tableName} order by user_id; """
+
+ explain {
+ sql("SELECT user_id,java_udf_float_test(float_1, float_2) as sum
FROM ${tableName} order by user_id; ")
+ contains "(udf_mv)"
+ }
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]