~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/sys_var.cc

Merge Stewart - Fix bug 664222: DDL operations have an implicit commit
Merge Stewart - Fix bug #695201: autocommit=1 not resetting session->server_status properly when committing ongoing txn

Show diffs side-by-side

added added

removed removed

Lines of Context:
1327
1327
 
1328
1328
static bool set_option_autocommit(Session *session, set_var *var)
1329
1329
{
 
1330
  bool success= true;
1330
1331
  /* The test is negative as the flag we use is NOT autocommit */
1331
1332
 
1332
1333
  uint64_t org_options= session->options;
 
1334
  uint64_t new_options= session->options;
1333
1335
 
1334
1336
  if (var->getInteger() != 0)
1335
 
    session->options&= ~((sys_var_session_bit*) var->var)->bit_flag;
 
1337
    new_options&= ~((sys_var_session_bit*) var->var)->bit_flag;
1336
1338
  else
1337
 
    session->options|= ((sys_var_session_bit*) var->var)->bit_flag;
 
1339
    new_options|= ((sys_var_session_bit*) var->var)->bit_flag;
1338
1340
 
1339
 
  if ((org_options ^ session->options) & OPTION_NOT_AUTOCOMMIT)
 
1341
  if ((org_options ^ new_options) & OPTION_NOT_AUTOCOMMIT)
1340
1342
  {
1341
1343
    if ((org_options & OPTION_NOT_AUTOCOMMIT))
1342
1344
    {
 
1345
      success= session->endActiveTransaction();
1343
1346
      /* We changed to auto_commit mode */
1344
1347
      session->options&= ~(uint64_t) (OPTION_BEGIN);
1345
1348
      session->server_status|= SERVER_STATUS_AUTOCOMMIT;
1346
 
      TransactionServices &transaction_services= TransactionServices::singleton();
1347
 
      if (transaction_services.commitTransaction(session, true))
1348
 
        return 1;
1349
1349
    }
1350
1350
    else
1351
1351
    {
1352
1352
      session->server_status&= ~SERVER_STATUS_AUTOCOMMIT;
1353
1353
    }
1354
1354
  }
 
1355
 
 
1356
  if (var->getInteger() != 0)
 
1357
    session->options&= ~((sys_var_session_bit*) var->var)->bit_flag;
 
1358
  else
 
1359
    session->options|= ((sys_var_session_bit*) var->var)->bit_flag;
 
1360
 
 
1361
  if (not success)
 
1362
    return true;
 
1363
 
1355
1364
  return 0;
1356
1365
}
1357
1366