Mercurial > hg > orthanc-databases
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() |