From 7d70ace6eaf64292f0de0ea2c2ce4ee9ff489f75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E6=89=AC?= Date: Tue, 16 Aug 2022 11:03:39 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E4=BF=AE=E5=A4=8Dmycat=E5=B0=86=E9=83=A8?= =?UTF-8?q?=E5=88=86SET=E8=AF=AD=E5=8F=A5=E5=88=A4=E6=96=AD=E4=B8=BAUPDATE?= =?UTF-8?q?=E8=AF=AD=E5=8F=A5=E4=BB=8E=E8=80=8C=E9=80=A0=E6=88=90=E7=9A=84?= =?UTF-8?q?sql=E8=A7=A3=E6=9E=90=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/io/mycat/server/ServerConnection.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/mycat/server/ServerConnection.java b/src/main/java/io/mycat/server/ServerConnection.java index 4c3b39b..99c17fd 100644 --- a/src/main/java/io/mycat/server/ServerConnection.java +++ b/src/main/java/io/mycat/server/ServerConnection.java @@ -327,6 +327,13 @@ public class ServerConnection extends FrontendConnection { return ServerParse.SELECT == type || ServerParse.INSERT == type || ServerParse.UPDATE == type || ServerParse.DELETE == type || ServerParse.DDL == type; } + /** + * 判断sql是否为CRUD操作,mycat会将一部分SET操作转换为UPDATE操作(io.mycat.server.handler.SetHandler)如:set session sql_mode='HIGH_NOT_PRECEDENCE',从而导致解析错误,所以UPDATE特殊判断 + */ + private boolean isCRUDSql(int type, String sql) { + return ServerParse.SELECT == type || ServerParse.INSERT == type || ServerParse.UPDATE == ServerParse.parse(sql) || ServerParse.DELETE == type; + } + public RouteResultset routeSQL(String sql, int type) { // 检查当前使用的DB @@ -375,7 +382,7 @@ public class ServerConnection extends FrontendConnection { // 路由计算 RouteResultset rrs = null; try { - boolean sqlPass = !sql.contains("information_schema") && (type == ServerParse.DELETE || type == ServerParse.INSERT || type == ServerParse.UPDATE || type == ServerParse.SELECT); + boolean sqlPass = !sql.contains("information_schema") && isCRUDSql(type, sql); //zrx 如果是增删查改 if (sqlPass) { // zrx 路由之前修改sql -- Gitee