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

Reply via email to