This is an automated email from the ASF dual-hosted git repository.

jianglongtao pushed a commit to branch fix-33341
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git

commit c20ebff163393e8d7bdc3c1aff9d9d8d5a79f255
Author: ZhangCheng <[email protected]>
AuthorDate: Thu Oct 17 14:00:07 2024 +0800

    Add query parameters and check for mysql kill processId (#33274)
    
    * Support mysql kill query processId
    
    * Support mysql kill query processId
    
    * Support mysql kill query processId
    
    * Support mysql kill query processId
    
    (cherry picked from commit b5d0294bb03b1b95d6c3f49382666487d15a7664)
---
 .../visitor/statement/type/MySQLDALStatementVisitor.java     |  6 ++++++
 .../sql/dialect/statement/mysql/dal/MySQLKillStatement.java  |  2 ++
 .../mysql/handler/admin/executor/KillProcessExecutor.java    | 12 ++++++++++--
 3 files changed, 18 insertions(+), 2 deletions(-)

diff --git 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
index 0c6e3365c13..f5b9c3ba49b 100644
--- 
a/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
+++ 
b/parser/sql/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/type/MySQLDALStatementVisitor.java
@@ -479,6 +479,12 @@ public final class MySQLDALStatementVisitor extends 
MySQLStatementVisitor implem
         } else {
             result.setProcessId(ctx.IDENTIFIER_().getText());
         }
+        if (null != ctx.QUERY()) {
+            result.setScope(ctx.QUERY().getText());
+        }
+        if (null != ctx.CONNECTION()) {
+            result.setScope(ctx.CONNECTION().getText());
+        }
         return result;
     }
     
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLKillStatement.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLKillStatement.java
index 404087b1acf..46028b5a3bf 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLKillStatement.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/dialect/statement/mysql/dal/MySQLKillStatement.java
@@ -31,4 +31,6 @@ import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.MySQLSta
 public final class MySQLKillStatement extends AbstractSQLStatement implements 
DALStatement, MySQLStatement {
     
     private String processId;
+
+    private String scope;
 }
diff --git 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/KillProcessExecutor.java
 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/KillProcessExecutor.java
index 4f1bc47e2ee..4e670f9ea2f 100644
--- 
a/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/KillProcessExecutor.java
+++ 
b/proxy/backend/type/mysql/src/main/java/org/apache/shardingsphere/proxy/backend/mysql/handler/admin/executor/KillProcessExecutor.java
@@ -18,18 +18,24 @@
 package org.apache.shardingsphere.proxy.backend.mysql.handler.admin.executor;
 
 import lombok.RequiredArgsConstructor;
+import 
org.apache.shardingsphere.infra.exception.core.ShardingSpherePreconditions;
+import 
org.apache.shardingsphere.infra.exception.generic.UnsupportedSQLOperationException;
 import org.apache.shardingsphere.mode.process.event.KillProcessRequestEvent;
 import org.apache.shardingsphere.proxy.backend.context.ProxyContext;
 import 
org.apache.shardingsphere.proxy.backend.handler.admin.executor.DatabaseAdminExecutor;
 import org.apache.shardingsphere.proxy.backend.session.ConnectionSession;
 import 
org.apache.shardingsphere.sql.parser.sql.dialect.statement.mysql.dal.MySQLKillStatement;
 
+import java.sql.SQLException;
+
 /**
  * Kill process executor.
  */
 @RequiredArgsConstructor
 public final class KillProcessExecutor implements DatabaseAdminExecutor {
-    
+
+    private static final String QUERY_SCOPE = "QUERY";
+
     private final MySQLKillStatement killStatement;
     
     /**
@@ -38,7 +44,9 @@ public final class KillProcessExecutor implements 
DatabaseAdminExecutor {
      * @param connectionSession connection session
      */
     @Override
-    public void execute(final ConnectionSession connectionSession) {
+    public void execute(final ConnectionSession connectionSession) throws 
SQLException {
+        
ShardingSpherePreconditions.checkState(QUERY_SCOPE.equalsIgnoreCase(killStatement.getScope()),
+                () -> new UnsupportedSQLOperationException("Only `KILL QUERY 
<processId>` SQL syntax is supported"));
         String processId = killStatement.getProcessId();
         
ProxyContext.getInstance().getContextManager().getInstanceContext().getEventBusContext().post(new
 KillProcessRequestEvent(processId));
     }

Reply via email to