comparison Framework/MySQL/MySQLDatabase.cpp @ 215:b40b30075c51

added TransactionType_Implicit
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 26 Mar 2021 17:32:29 +0100
parents 3236894320d6
children ee5858d438dc
comparison
equal deleted inserted replaced
214:ab96698c73a3 215:b40b30075c51
516 516
517 namespace 517 namespace
518 { 518 {
519 class MySQLImplicitTransaction : public ImplicitTransaction 519 class MySQLImplicitTransaction : public ImplicitTransaction
520 { 520 {
521 private:
522 MySQLDatabase& db_;
523
524 protected: 521 protected:
525 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, 522 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement,
526 const Dictionary& parameters) 523 const Dictionary& parameters)
527 { 524 {
528 return dynamic_cast<MySQLStatement&>(statement).Execute(*this, parameters); 525 return dynamic_cast<MySQLStatement&>(statement).Execute(*this, parameters);
531 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, 528 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement,
532 const Dictionary& parameters) 529 const Dictionary& parameters)
533 { 530 {
534 dynamic_cast<MySQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); 531 dynamic_cast<MySQLStatement&>(statement).ExecuteWithoutResult(*this, parameters);
535 } 532 }
536
537 public:
538 explicit MySQLImplicitTransaction(MySQLDatabase& db) :
539 db_(db)
540 {
541 }
542 }; 533 };
543 } 534 }
544 535
545 536
546 ITransaction* MySQLDatabase::CreateTransaction(bool isImplicit) 537 ITransaction* MySQLDatabase::CreateTransaction(TransactionType type)
547 { 538 {
548 if (mysql_ == NULL) 539 if (mysql_ == NULL)
549 { 540 {
550 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); 541 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls);
551 } 542 }
552 543
553 if (isImplicit) 544 switch (type)
554 { 545 {
555 return new MySQLImplicitTransaction(*this); 546 case TransactionType_Implicit:
556 } 547 return new MySQLImplicitTransaction;
557 else 548
558 { 549 case TransactionType_ReadOnly:
559 return new MySQLTransaction(*this); 550 // TODO => READ-ONLY
551 return new MySQLTransaction(*this);
552
553 case TransactionType_ReadWrite:
554 return new MySQLTransaction(*this);
555
556 default:
557 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
560 } 558 }
561 } 559 }
562 560
563 561
564 void MySQLDatabase::GlobalFinalization() 562 void MySQLDatabase::GlobalFinalization()