Revert autcommit to 1 if it is the first SELECT

If:
* client wants autocommit=0
* enforce_autocommit_on_reads=false
* there is no transaction
* this seems to be the first query, and a SELECT not FOR UPDATE
Action:
* switch back to autcommit=1
pull/1856/head
René Cannaò 8 years ago
parent bff2a3e8d9
commit ca48cb81c4

@ -1343,6 +1343,24 @@ bool MySQL_Session::handler_again___verify_backend_autocommit() {
}
NEXT_IMMEDIATE_NEW(CHANGING_AUTOCOMMIT);
}
} else {
if (autocommit == false) { // also IsAutoCommit==false
if (mysql_thread___enforce_autocommit_on_reads == false) {
if (mybe->server_myds->myconn->IsActiveTransaction() == false) {
if (CurrentQuery.is_select_NOT_for_update()==true) {
// client wants autocommit=0
// enforce_autocommit_on_reads=false
// there is no transaction
// this seems to be the first query, and a SELECT not FOR UPDATE
// we will switch back to autcommit=1
if (status == PROCESSING_QUERY) {
previous_status.push(PROCESSING_QUERY);
NEXT_IMMEDIATE_NEW(CHANGING_AUTOCOMMIT);
}
}
}
}
}
}
return false;
}
@ -2019,7 +2037,22 @@ bool MySQL_Session::handler_again___status_CHANGING_AUTOCOMMIT(int *_rc) {
if (myds->mypolls==NULL) {
thread->mypolls.add(POLLIN|POLLOUT, mybe->server_myds->fd, mybe->server_myds, thread->curtime);
}
int rc=myconn->async_set_autocommit(myds->revents, autocommit);
bool ac = autocommit;
if (autocommit == false) { // also IsAutoCommit==false
if (mysql_thread___enforce_autocommit_on_reads == false) {
if (mybe->server_myds->myconn->IsActiveTransaction() == false) {
if (CurrentQuery.is_select_NOT_for_update()==true) {
// client wants autocommit=0
// enforce_autocommit_on_reads=false
// there is no transaction
// this seems to be the first query, and a SELECT not FOR UPDATE
// we will switch back to autcommit=1
ac = true;
}
}
}
}
int rc=myconn->async_set_autocommit(myds->revents, ac);
if (rc==0) {
st=previous_status.top();
previous_status.pop();

Loading…
Cancel
Save