提交 9d8af563 编写于 作者: S Serge Rider

#7445 Transaction queries detect: check updated rows

上级 e0da6d46
......@@ -56,7 +56,7 @@ public class BasicSQLDialect implements SQLDialect {
}
};
protected static final String[] NON_TRANSACTIONAL_KEYWORDS = new String[]{
SQLConstants.KEYWORD_SELECT, "WITH",
SQLConstants.KEYWORD_SELECT,
"EXPLAIN", "DESCRIBE", "DESC", "USE", "SET", "COMMIT", "ROLLBACK"};
private static final String[] CORE_NON_TRANSACTIONAL_KEYWORDS = new String[]{
SQLConstants.KEYWORD_SELECT,
......@@ -451,13 +451,13 @@ public class BasicSQLDialect implements SQLDialect {
// anyhow it shouldn't be transactional
return false;
}
String[] ntk = getNonTransactionKeywords();
for (int i = 0; i < ntk.length; i++) {
if (queryString.startsWith(ntk[i])) {
return false;
String[] ntk = getDDLKeywords();
for (String keyword : ntk) {
if (queryString.startsWith(keyword)) {
return true;
}
}
return true;
return false;
}
@NotNull
......
......@@ -56,9 +56,8 @@ public class QMMStatementExecuteInfo extends QMMObject {
if (sqlDialect != null && queryString != null) {
this.transactional = sqlDialect.isTransactionModifyingQuery(queryString);
} else {
this.transactional = true;
this.transactional = false;
}
}
public QMMStatementExecuteInfo(long openTime, long closeTime, QMMStatementInfo stmt, String queryString, long rowCount, int errorCode, String errorMessage, long fetchBeginTime, long fetchEndTime, boolean transactional) {
......@@ -84,6 +83,9 @@ public class QMMStatementExecuteInfo extends QMMObject {
this.transactional = true;
}
this.updateRowCount = rowCount;
if (!transactional) {
this.transactional = this.updateRowCount >= 0;
}
super.close();
}
......
......@@ -321,6 +321,10 @@ public interface SQLDialect {
@Nullable
String getDualTableName();
/**
* Returns true if query is definitely transactional. Otherwise returns false, however it still may be transactional.
* You need to check query results to ensure that it is not transactional.
*/
boolean isTransactionModifyingQuery(String queryString);
@Nullable
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册