~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/transaction_services.cc

Merge in Joe's transaction id code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
69
69
#include "drizzled/plugin/monitored_in_transaction.h"
70
70
#include "drizzled/plugin/transactional_storage_engine.h"
71
71
#include "drizzled/plugin/xa_resource_manager.h"
 
72
#include "drizzled/plugin/xa_storage_engine.h"
72
73
#include "drizzled/internal/my_sys.h"
73
74
 
74
75
#include <vector>
299
300
 * transaction after all DDLs, just like the statement transaction
300
301
 * is always committed at the end of all statements.
301
302
 */
 
303
TransactionServices::TransactionServices()
 
304
{
 
305
  plugin::StorageEngine *engine= plugin::StorageEngine::findByName("InnoDB");
 
306
  if (engine)
 
307
  {
 
308
    xa_storage_engine= (plugin::XaStorageEngine*)engine; 
 
309
  }
 
310
  else 
 
311
  {
 
312
    xa_storage_engine= NULL;
 
313
  }
 
314
}
 
315
 
302
316
void TransactionServices::registerResourceForStatement(Session *session,
303
317
                                                       plugin::MonitoredInTransaction *monitored,
304
318
                                                       plugin::TransactionalStorageEngine *engine)
426
440
    registerResourceForStatement(session, monitored, engine, resource_manager);
427
441
}
428
442
 
 
443
void TransactionServices::allocateNewTransactionId()
 
444
{
 
445
  ReplicationServices &replication_services= ReplicationServices::singleton();
 
446
  if (! replication_services.isActive())
 
447
  {
 
448
    return;
 
449
  }
 
450
 
 
451
  Session *my_session= current_session;
 
452
  uint64_t xa_id= xa_storage_engine->getNewTransactionId(my_session);
 
453
  my_session->setXaId(xa_id);
 
454
}
 
455
 
 
456
uint64_t TransactionServices::getCurrentTransactionId(Session *session)
 
457
{
 
458
  if (session->getXaId() == 0)
 
459
  {
 
460
    session->setXaId(xa_storage_engine->getNewTransactionId(session)); 
 
461
  }
 
462
 
 
463
  return session->getXaId();
 
464
}
 
465
 
429
466
/**
430
467
  @retval
431
468
    0   ok
976
1013
  trx->set_server_id(in_session->getServerId());
977
1014
 
978
1015
  if (should_inc_trx_id)
979
 
    trx->set_transaction_id(getNextTransactionId());
 
1016
  {
 
1017
    trx->set_transaction_id(getCurrentTransactionId(in_session));
 
1018
    in_session->setXaId(0);
 
1019
  }  
 
1020
  else
 
1021
  { 
 
1022
    trx->set_transaction_id(0);
 
1023
  }
980
1024
 
981
1025
  trx->set_start_timestamp(in_session->getCurrentTimestamp());
982
1026
}
1029
1073
{
1030
1074
  statement.set_type(in_type);
1031
1075
  statement.set_start_timestamp(in_session->getCurrentTimestamp());
1032
 
  /** @TODO Set sql string optionally */
1033
1076
}
1034
1077
 
1035
1078
void TransactionServices::finalizeStatementMessage(message::Statement &statement,