提交 1ae95cff authored 作者: Evgenij Ryazanov's avatar Evgenij Ryazanov

Add compatibility flag for generated keys

上级 d48c679b
...@@ -5651,6 +5651,10 @@ public class Parser { ...@@ -5651,6 +5651,10 @@ public class Parser {
readIfEqualOrTo(); readIfEqualOrTo();
read(); read();
return new NoOperation(session); return new NoOperation(session);
} else if (readIf("SCOPE_GENERATED_KEYS")) {
readIfEqualOrTo();
read();
return new NoOperation(session);
} else if (readIf("SCHEMA")) { } else if (readIf("SCHEMA")) {
readIfEqualOrTo(); readIfEqualOrTo();
Set command = new Set(session, SetTypes.SCHEMA); Set command = new Set(session, SetTypes.SCHEMA);
......
...@@ -96,7 +96,8 @@ public class ConnectionInfo implements Cloneable { ...@@ -96,7 +96,8 @@ public class ConnectionInfo implements Cloneable {
"CREATE", "CACHE_TYPE", "FILE_LOCK", "IGNORE_UNKNOWN_SETTINGS", "CREATE", "CACHE_TYPE", "FILE_LOCK", "IGNORE_UNKNOWN_SETTINGS",
"IFEXISTS", "INIT", "PASSWORD", "RECOVER", "RECOVER_TEST", "IFEXISTS", "INIT", "PASSWORD", "RECOVER", "RECOVER_TEST",
"USER", "AUTO_SERVER", "AUTO_SERVER_PORT", "NO_UPGRADE", "USER", "AUTO_SERVER", "AUTO_SERVER_PORT", "NO_UPGRADE",
"AUTO_RECONNECT", "OPEN_NEW", "PAGE_SIZE", "PASSWORD_HASH", "JMX" }; "AUTO_RECONNECT", "OPEN_NEW", "PAGE_SIZE", "PASSWORD_HASH", "JMX",
"SCOPE_GENERATED_KEYS" };
HashSet<String> set = new HashSet<>(list.size() + connectionTime.length); HashSet<String> set = new HashSet<>(list.size() + connectionTime.length);
set.addAll(list); set.addAll(list);
for (String key : connectionTime) { for (String key : connectionTime) {
......
...@@ -94,6 +94,7 @@ public class JdbcConnection extends TraceObject ...@@ -94,6 +94,7 @@ public class JdbcConnection extends TraceObject
private Map<String, String> clientInfo; private Map<String, String> clientInfo;
private String mode; private String mode;
private final boolean scopeGeneratedKeys;
/** /**
* INTERNAL * INTERNAL
...@@ -132,6 +133,7 @@ public class JdbcConnection extends TraceObject ...@@ -132,6 +133,7 @@ public class JdbcConnection extends TraceObject
+ ", \"\");"); + ", \"\");");
} }
this.url = ci.getURL(); this.url = ci.getURL();
scopeGeneratedKeys = ci.getProperty("SCOPE_GENERATED_KEYS", false);
closeOld(); closeOld();
watcher = CloseWatcher.register(this, session, keepOpenStackTrace); watcher = CloseWatcher.register(this, session, keepOpenStackTrace);
} catch (Exception e) { } catch (Exception e) {
...@@ -156,6 +158,7 @@ public class JdbcConnection extends TraceObject ...@@ -156,6 +158,7 @@ public class JdbcConnection extends TraceObject
this.getQueryTimeout = clone.getQueryTimeout; this.getQueryTimeout = clone.getQueryTimeout;
this.getReadOnly = clone.getReadOnly; this.getReadOnly = clone.getReadOnly;
this.rollback = clone.rollback; this.rollback = clone.rollback;
this.scopeGeneratedKeys = clone.scopeGeneratedKeys;
this.watcher = null; this.watcher = null;
if (clone.clientInfo != null) { if (clone.clientInfo != null) {
this.clientInfo = new HashMap<>(clone.clientInfo); this.clientInfo = new HashMap<>(clone.clientInfo);
...@@ -172,6 +175,7 @@ public class JdbcConnection extends TraceObject ...@@ -172,6 +175,7 @@ public class JdbcConnection extends TraceObject
setTrace(trace, TraceObject.CONNECTION, id); setTrace(trace, TraceObject.CONNECTION, id);
this.user = user; this.user = user;
this.url = url; this.url = url;
this.scopeGeneratedKeys = false;
this.watcher = null; this.watcher = null;
} }
...@@ -1578,6 +1582,13 @@ public class JdbcConnection extends TraceObject ...@@ -1578,6 +1582,13 @@ public class JdbcConnection extends TraceObject
executingStatement = stat; executingStatement = stat;
} }
/**
* INTERNAL
*/
boolean scopeGeneratedKeys() {
return scopeGeneratedKeys;
}
/** /**
* INTERNAL * INTERNAL
*/ */
......
...@@ -70,7 +70,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements ...@@ -70,7 +70,7 @@ public class JdbcPreparedStatement extends JdbcStatement implements
int resultSetType, int resultSetConcurrency, int resultSetType, int resultSetConcurrency,
boolean closeWithResultSet, Object generatedKeysRequest) { boolean closeWithResultSet, Object generatedKeysRequest) {
super(conn, id, resultSetType, resultSetConcurrency, closeWithResultSet); super(conn, id, resultSetType, resultSetConcurrency, closeWithResultSet);
this.generatedKeysRequest = generatedKeysRequest; this.generatedKeysRequest = conn.scopeGeneratedKeys() ? false : generatedKeysRequest;
setTrace(session.getTrace(), TraceObject.PREPARED_STATEMENT, id); setTrace(session.getTrace(), TraceObject.PREPARED_STATEMENT, id);
this.sqlStatement = sql; this.sqlStatement = sql;
command = conn.prepareCommand(sql, fetchSize); command = conn.prepareCommand(sql, fetchSize);
......
...@@ -166,7 +166,8 @@ public class JdbcStatement extends TraceObject implements Statement, JdbcStateme ...@@ -166,7 +166,8 @@ public class JdbcStatement extends TraceObject implements Statement, JdbcStateme
synchronized (session) { synchronized (session) {
setExecutingStatement(command); setExecutingStatement(command);
try { try {
ResultWithGeneratedKeys result = command.executeUpdate(generatedKeysRequest); ResultWithGeneratedKeys result = command.executeUpdate(
conn.scopeGeneratedKeys() ? false : generatedKeysRequest);
updateCount = result.getUpdateCount(); updateCount = result.getUpdateCount();
ResultInterface gk = result.getGeneratedKeys(); ResultInterface gk = result.getGeneratedKeys();
if (gk != null) { if (gk != null) {
...@@ -229,7 +230,8 @@ public class JdbcStatement extends TraceObject implements Statement, JdbcStateme ...@@ -229,7 +230,8 @@ public class JdbcStatement extends TraceObject implements Statement, JdbcStateme
closedByResultSet, scrollable, updatable); closedByResultSet, scrollable, updatable);
} else { } else {
returnsResultSet = false; returnsResultSet = false;
ResultWithGeneratedKeys result = command.executeUpdate(generatedKeysRequest); ResultWithGeneratedKeys result = command.executeUpdate(
conn.scopeGeneratedKeys() ? false : generatedKeysRequest);
updateCount = result.getUpdateCount(); updateCount = result.getUpdateCount();
ResultInterface gk = result.getGeneratedKeys(); ResultInterface gk = result.getGeneratedKeys();
if (gk != null) { if (gk != null) {
...@@ -832,13 +834,15 @@ public class JdbcStatement extends TraceObject implements Statement, JdbcStateme ...@@ -832,13 +834,15 @@ public class JdbcStatement extends TraceObject implements Statement, JdbcStateme
debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id, "getGeneratedKeys()"); debugCodeAssign("ResultSet", TraceObject.RESULT_SET, id, "getGeneratedKeys()");
} }
checkClosed(); checkClosed();
if (generatedKeys != null) { if (!conn.scopeGeneratedKeys()) {
return generatedKeys; if (generatedKeys != null) {
} return generatedKeys;
if (session.isSupportsGeneratedKeys()) { }
return new SimpleResultSet(); if (session.isSupportsGeneratedKeys()) {
return new SimpleResultSet();
}
} }
// Old server, so use SCOPE_IDENTITY() // Compatibility mode or an old server, so use SCOPE_IDENTITY()
return conn.getGeneratedKeys(this, id); return conn.getGeneratedKeys(this, id);
} catch (Exception e) { } catch (Exception e) {
throw logAndConvert(e); throw logAndConvert(e);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论