This is an automated email from the ASF dual-hosted git repository. zouxinyi 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 50aadf6960f [fix](plsql) Fix handle select that fe can do without be (#33363) 50aadf6960f is described below commit 50aadf6960f974d25dc28b8b846aa74a6522b6a5 Author: Xinyi Zou <zouxiny...@gmail.com> AuthorDate: Wed Apr 10 10:53:35 2024 +0800 [fix](plsql) Fix handle select that fe can do without be (#33363) CREATE OR REPLACE PROCEDURE procedure_test1() BEGIN select 1; END; call procedure_test1() fix `ERROR 2027 (HY000): Malformed packet` --- .../src/main/java/org/apache/doris/plsql/Stmt.java | 2 +- .../doris/plsql/executor/PlsqlQueryExecutor.java | 1 + .../apache/doris/plsql/executor/PlsqlResult.java | 3 ++- .../apache/doris/plsql/executor/QueryResult.java | 4 ++++ .../java/org/apache/doris/qe/ConnectProcessor.java | 4 ++++ .../java/org/apache/doris/qe/StmtExecutor.java | 7 ++++++ .../data/plsql_p0/test_plsql_variable.out | 6 +++++ .../suites/plsql_p0/test_plsql_variable.groovy | 27 ++++++++++++++++++++++ 8 files changed, 52 insertions(+), 2 deletions(-) diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/Stmt.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/Stmt.java index d86a648b99a..2166b5a8378 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/plsql/Stmt.java +++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/Stmt.java @@ -142,7 +142,7 @@ public class Stmt { } } else if (ctx instanceof Doris_statementContext) { // only from visitStatement // Print all results for standalone Statement. - if (query.metadata() != null) { + if (query.metadata() != null && !query.isHandleQueryInFe()) { resultListener.onMetadata(query.metadata()); int cols = query.columnCount(); if (trace) { diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlQueryExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlQueryExecutor.java index 7978b4fc598..f9c7ca767fc 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlQueryExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlQueryExecutor.java @@ -53,6 +53,7 @@ public class PlsqlQueryExecutor implements QueryExecutor { return new QueryResult(new DorisRowResult(executor.getCoord(), executor.getColumns(), executor.getReturnTypes()), () -> metadata(executor), processor, null); } else { + // If ResultExpr is empty, not need to return result in plsql.Stmt.statement() return new QueryResult(new DorisRowResult(executor.getCoord(), executor.getColumns(), null), null, processor, null); } diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlResult.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlResult.java index 76e600e7fcc..3191872b270 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlResult.java +++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/PlsqlResult.java @@ -121,7 +121,8 @@ public class PlsqlResult implements ResultListener, Console { @Override public void onFinalize() { // If metadata not null, it means that mysql channel sent query results. - if (metadata == null) { + // If selectByFe, send result in handleQueryStmt. + if (metadata == null && !processor.isHandleQueryInFe()) { return; } finalizeCommand(); diff --git a/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/QueryResult.java b/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/QueryResult.java index af1d32155f5..53d85474771 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/QueryResult.java +++ b/fe/fe-core/src/main/java/org/apache/doris/plsql/executor/QueryResult.java @@ -58,6 +58,10 @@ public class QueryResult { return metadata != null ? metadata().columnCount() : 0; } + public boolean isHandleQueryInFe() { + return processor.isHandleQueryInFe(); + } + /** * Get the nth column from the row result. * The index is 0 based unlike in JDBC. diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java index a85beef3088..16c6b6afb82 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ConnectProcessor.java @@ -106,6 +106,10 @@ public abstract class ConnectProcessor { return ctx; } + public boolean isHandleQueryInFe() { + return executor.isHandleQueryInFe(); + } + // change current database of this session. protected void handleInitDb(String fullDbName) { String catalogName = null; diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java index 5bbe01ef793..15d8c22af5e 100644 --- a/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java +++ b/fe/fe-core/src/main/java/org/apache/doris/qe/StmtExecutor.java @@ -274,6 +274,8 @@ public class StmtExecutor { private String mysqlLoadId; // Distinguish from prepare and execute command private boolean isExecuteStmt = false; + // Handle selects that fe can do without be + private boolean isHandleQueryInFe = false; // The profile of this execution private final Profile profile; @@ -505,6 +507,10 @@ public class StmtExecutor { return parsedStmt; } + public boolean isHandleQueryInFe() { + return isHandleQueryInFe; + } + // query with a random sql public void execute() throws Exception { UUID uuid = UUID.randomUUID(); @@ -1711,6 +1717,7 @@ public class StmtExecutor { Optional<ResultSet> resultSet = planner.handleQueryInFe(parsedStmt); if (resultSet.isPresent()) { sendResultSet(resultSet.get()); + isHandleQueryInFe = true; LOG.info("Query {} finished", DebugUtil.printId(context.queryId)); return; } diff --git a/regression-test/data/plsql_p0/test_plsql_variable.out b/regression-test/data/plsql_p0/test_plsql_variable.out index 2fc878d6fcf..d486d47bae2 100644 --- a/regression-test/data/plsql_p0/test_plsql_variable.out +++ b/regression-test/data/plsql_p0/test_plsql_variable.out @@ -11,3 +11,9 @@ -- !select -- 0 +-- !select -- +0 + +-- !select -- +1 2024-04-07 9989012.0 + diff --git a/regression-test/suites/plsql_p0/test_plsql_variable.groovy b/regression-test/suites/plsql_p0/test_plsql_variable.groovy index eace315c40c..566bd78c86e 100644 --- a/regression-test/suites/plsql_p0/test_plsql_variable.groovy +++ b/regression-test/suites/plsql_p0/test_plsql_variable.groovy @@ -108,8 +108,35 @@ suite("test_plsql_variable") { """ qt_select """call plsql_variable3()""" + sql """ + CREATE OR REPLACE PROCEDURE plsql_variable4() + BEGIN + select 1; + select now(); + select to_date("2024-04-07 00:00:00"); + select 9999 * 999 + 99 / 9; + END; + """ + // qt_select """call plsql_variable4()""" // Groovy jdbc not support procedure return select results. + + sql "DROP TABLE IF EXISTS plsql_variable2" + sql """ + create table plsql_variable2 (k1 int, k2 varchar(20), k3 double) DUPLICATE key(`k1`) distributed by hash (`k1`) buckets 1 + properties ("replication_num"="1"); + """ + sql """ + CREATE OR REPLACE PROCEDURE plsql_variable5() + BEGIN + INSERT INTO plsql_variable2 select 1, to_date("2024-04-07 00:00:00"), 9999 * 999 + 99 / 9; + END; + """ + qt_select """call plsql_variable5()""" + qt_select "select * from plsql_variable2" + sql """DROP PROCEDURE plsql_variable1""" sql """DROP PROCEDURE plsql_variable2""" sql """DROP PROCEDURE plsql_variable3""" + sql """DROP PROCEDURE plsql_variable4""" + sql """DROP PROCEDURE plsql_variable5""" sql """DROP PROC plsql_variable_insert""" } --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org For additional commands, e-mail: commits-h...@doris.apache.org