From ca95dc408d25efa783d104528860a9c13bdd0fcf Mon Sep 17 00:00:00 2001 From: "Crane.z" <1481445951@qq.com> Date: Thu, 6 Aug 2026 14:09:53 +0800 Subject: [PATCH] fix(oracle): restore Oracle parser and reject implicit SQL splits --- .../oracle/OracleActuator.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/backend/modules/src/main/java/org.jumpserver.chen.modules/oracle/OracleActuator.java b/backend/modules/src/main/java/org.jumpserver.chen.modules/oracle/OracleActuator.java index 7912445..8f18190 100644 --- a/backend/modules/src/main/java/org.jumpserver.chen.modules/oracle/OracleActuator.java +++ b/backend/modules/src/main/java/org.jumpserver.chen.modules/oracle/OracleActuator.java @@ -1,7 +1,7 @@ package org.jumpserver.chen.modules.oracle; -import com.alibaba.druid.DbType; import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.parser.ParserException; import org.jumpserver.chen.framework.datasource.ConnectionManager; import org.jumpserver.chen.framework.datasource.base.BaseSQLActuator; import org.jumpserver.chen.framework.datasource.sql.SQL; @@ -66,8 +66,15 @@ public SQLExecutePlan createPlan(SQL sql) throws SQLException { @Override public List parseSQL(SQL sql) { - return SQLUtils.parseStatements(sql.getSql(), DbType.ali_oracle).stream() - .map(stmt -> SQLUtils.toSQLString(stmt, DbType.ali_oracle)) + var dbType = this.getDbType(); + var statements = SQLUtils.parseStatements(sql.getSql(), dbType); + for (var i = 0; i < statements.size() - 1; i++) { + if (!statements.get(i).isAfterSemi()) { + throw new ParserException("Multiple SQL statements must be separated by semicolons"); + } + } + return statements.stream() + .map(stmt -> SQLUtils.toSQLString(stmt, dbType)) .toList(); } }