1396
1396
static bool set_option_autocommit(Session *session, set_var *var)
1398
1399
/* The test is negative as the flag we use is NOT autocommit */
1400
1401
uint64_t org_options= session->options;
1402
uint64_t new_options= session->options;
1402
1404
if (var->save_result.uint32_t_value != 0)
1403
session->options&= ~((sys_var_session_bit*) var->var)->bit_flag;
1405
new_options&= ~((sys_var_session_bit*) var->var)->bit_flag;
1405
session->options|= ((sys_var_session_bit*) var->var)->bit_flag;
1407
new_options|= ((sys_var_session_bit*) var->var)->bit_flag;
1407
if ((org_options ^ session->options) & OPTION_NOT_AUTOCOMMIT)
1409
if ((org_options ^ new_options) & OPTION_NOT_AUTOCOMMIT)
1409
1411
if ((org_options & OPTION_NOT_AUTOCOMMIT))
1413
success= session->endActiveTransaction();
1411
1414
/* We changed to auto_commit mode */
1412
1415
session->options&= ~(uint64_t) (OPTION_BEGIN);
1413
1416
session->server_status|= SERVER_STATUS_AUTOCOMMIT;
1414
TransactionServices &transaction_services= TransactionServices::singleton();
1415
if (transaction_services.commitTransaction(session, true))
1420
1420
session->server_status&= ~SERVER_STATUS_AUTOCOMMIT;
1424
if (var->save_result.uint32_t_value != 0)
1425
session->options&= ~((sys_var_session_bit*) var->var)->bit_flag;
1427
session->options|= ((sys_var_session_bit*) var->var)->bit_flag;