fix(agent): execute transaction control SQL as statements
This commit is contained in:
1 parent
18710ce2ab
commit
0dc83f69b5
2 files changed
+42
-32
No files matched your search
@@ -67,24 +67,8 @@ public final class JdbcExecutor {
|
||||
) {
|
||||
return unchecked(() -> {
|
||||
String trimmedSql = trimSql(sql);
|
||||
String upperSql = trimmedSql.toUpperCase(Locale.ROOT).trim();
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
if ("BEGIN".equals(upperSql) || "BEGIN TRANSACTION".equals(upperSql)) {
|
||||
conn.setAutoCommit(false);
|
||||
return emptyQueryResult(start);
|
||||
}
|
||||
if ("COMMIT".equals(upperSql)) {
|
||||
conn.commit();
|
||||
conn.setAutoCommit(true);
|
||||
return emptyQueryResult(start);
|
||||
}
|
||||
if ("ROLLBACK".equals(upperSql)) {
|
||||
conn.rollback();
|
||||
conn.setAutoCommit(true);
|
||||
return emptyQueryResult(start);
|
||||
}
|
||||
|
||||
applySchema(conn, schema, setSchemaSql);
|
||||
|
||||
try (Statement stmt = conn.createStatement()) {
|
||||
@@ -94,6 +78,8 @@ public final class JdbcExecutor {
|
||||
if (fetchSize != null && fetchSize > 0) {
|
||||
stmt.setFetchSize(fetchSize);
|
||||
}
|
||||
// SQL dumps often contain BEGIN/COMMIT/ROLLBACK as executable statements.
|
||||
// Do not translate them to Connection.commit(), which requires autoCommit=false.
|
||||
boolean hasResultSet = stmt.execute(trimmedSql);
|
||||
long elapsed = System.currentTimeMillis() - start;
|
||||
if (hasResultSet) {
|
||||
@@ -204,24 +190,8 @@ public final class JdbcExecutor {
|
||||
return unchecked(() -> {
|
||||
expireIdleSessions(targetSessions, System.currentTimeMillis(), QUERY_SESSION_IDLE_TIMEOUT_MILLIS);
|
||||
String trimmedSql = trimSql(sql);
|
||||
String upperSql = trimmedSql.toUpperCase(Locale.ROOT).trim();
|
||||
long start = System.currentTimeMillis();
|
||||
|
||||
if ("BEGIN".equals(upperSql) || "BEGIN TRANSACTION".equals(upperSql)) {
|
||||
conn.setAutoCommit(false);
|
||||
return emptyQueryPageResult(start);
|
||||
}
|
||||
if ("COMMIT".equals(upperSql)) {
|
||||
conn.commit();
|
||||
conn.setAutoCommit(true);
|
||||
return emptyQueryPageResult(start);
|
||||
}
|
||||
if ("ROLLBACK".equals(upperSql)) {
|
||||
conn.rollback();
|
||||
conn.setAutoCommit(true);
|
||||
return emptyQueryPageResult(start);
|
||||
}
|
||||
|
||||
applySchema(conn, schema, setSchemaSql);
|
||||
|
||||
Statement stmt = conn.createStatement();
|
||||
@@ -230,6 +200,8 @@ public final class JdbcExecutor {
|
||||
if (options.getFetchSize() != null && options.getFetchSize() > 0) {
|
||||
stmt.setFetchSize(options.getFetchSize());
|
||||
}
|
||||
// Keep script transaction-control statements in the SQL stream.
|
||||
// JDBC transaction APIs are reserved for executeTransaction.
|
||||
boolean hasResultSet = stmt.execute(trimmedSql);
|
||||
long elapsed = System.currentTimeMillis() - start;
|
||||
if (!hasResultSet) {
|
||||
|
||||
Reference in new issue
Block a user