Mercurial > hg > orthanc-databases
comparison Framework/MySQL/MySQLDatabase.cpp @ 237:35598014f140
refactoring to remove GlobalProperties.cpp
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 08 Apr 2021 19:09:04 +0200 |
parents | d1d2edbbe6fb |
children | c82c2cf84ae8 |
comparison
equal
deleted
inserted
replaced
236:d1d2edbbe6fb | 237:35598014f140 |
---|---|
222 { | 222 { |
223 LOG(ERROR) << "Inexistent database, please create it first: " << database; | 223 LOG(ERROR) << "Inexistent database, please create it first: " << database; |
224 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); | 224 throw Orthanc::OrthancException(Orthanc::ErrorCode_UnknownResource); |
225 } | 225 } |
226 | 226 |
227 db.Execute("DROP DATABASE " + database, false); | 227 db.ExecuteMultiLines("DROP DATABASE " + database, false); |
228 db.Execute("CREATE DATABASE " + database, false); | 228 db.ExecuteMultiLines("CREATE DATABASE " + database, false); |
229 t.Commit(); | 229 t.Commit(); |
230 } | 230 } |
231 } | 231 } |
232 | 232 |
233 | 233 |
476 result->GetField(0).GetType() == ValueType_Integer64 && | 476 result->GetField(0).GetType() == ValueType_Integer64 && |
477 dynamic_cast<const Integer64Value&>(result->GetField(0)).GetValue() != 0); | 477 dynamic_cast<const Integer64Value&>(result->GetField(0)).GetValue() != 0); |
478 } | 478 } |
479 | 479 |
480 | 480 |
481 void MySQLDatabase::Execute(const std::string& sql, | 481 void MySQLDatabase::ExecuteMultiLines(const std::string& sql, |
482 bool arobaseSeparator) | 482 bool arobaseSeparator) |
483 { | 483 { |
484 if (mysql_ == NULL) | 484 if (mysql_ == NULL) |
485 { | 485 { |
486 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); | 486 throw Orthanc::OrthancException(Orthanc::ErrorCode_BadSequenceOfCalls); |
487 } | 487 } |
525 | 525 |
526 namespace | 526 namespace |
527 { | 527 { |
528 class MySQLImplicitTransaction : public ImplicitTransaction | 528 class MySQLImplicitTransaction : public ImplicitTransaction |
529 { | 529 { |
530 private: | |
531 MySQLDatabase& db_; | |
532 | |
530 protected: | 533 protected: |
531 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, | 534 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, |
532 const Dictionary& parameters) | 535 const Dictionary& parameters) |
533 { | 536 { |
534 return dynamic_cast<MySQLStatement&>(statement).Execute(*this, parameters); | 537 return dynamic_cast<MySQLStatement&>(statement).Execute(*this, parameters); |
537 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, | 540 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, |
538 const Dictionary& parameters) | 541 const Dictionary& parameters) |
539 { | 542 { |
540 dynamic_cast<MySQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); | 543 dynamic_cast<MySQLStatement&>(statement).ExecuteWithoutResult(*this, parameters); |
541 } | 544 } |
545 | |
546 public: | |
547 MySQLImplicitTransaction(MySQLDatabase& db) : | |
548 db_(db) | |
549 { | |
550 } | |
551 | |
552 virtual bool DoesTableExist(const std::string& name) ORTHANC_OVERRIDE | |
553 { | |
554 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "An explicit transaction is needed"); | |
555 } | |
556 | |
557 virtual bool DoesTriggerExist(const std::string& name) ORTHANC_OVERRIDE | |
558 { | |
559 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, "An explicit transaction is needed"); | |
560 } | |
561 | |
562 virtual void ExecuteMultiLines(const std::string& query) ORTHANC_OVERRIDE | |
563 { | |
564 db_.ExecuteMultiLines(query, false /* don't deal with arobases */); | |
565 } | |
542 }; | 566 }; |
543 } | 567 } |
544 | 568 |
545 | 569 |
546 ITransaction* MySQLDatabase::CreateTransaction(TransactionType type) | 570 ITransaction* MySQLDatabase::CreateTransaction(TransactionType type) |
551 } | 575 } |
552 | 576 |
553 switch (type) | 577 switch (type) |
554 { | 578 { |
555 case TransactionType_Implicit: | 579 case TransactionType_Implicit: |
556 return new MySQLImplicitTransaction; | 580 return new MySQLImplicitTransaction(*this); |
557 | 581 |
558 case TransactionType_ReadOnly: | 582 case TransactionType_ReadOnly: |
559 case TransactionType_ReadWrite: | 583 case TransactionType_ReadWrite: |
560 return new MySQLTransaction(*this, type); | 584 return new MySQLTransaction(*this, type); |
561 | 585 |
633 protected: | 657 protected: |
634 virtual IDatabase* TryOpen() | 658 virtual IDatabase* TryOpen() |
635 { | 659 { |
636 std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_)); | 660 std::unique_ptr<MySQLDatabase> db(new MySQLDatabase(parameters_)); |
637 db->Open(); | 661 db->Open(); |
638 db->Execute("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false); | 662 db->ExecuteMultiLines("SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE", false); |
639 return db.release(); | 663 return db.release(); |
640 } | 664 } |
641 | 665 |
642 public: | 666 public: |
643 Factory(const MySQLParameters& parameters) : | 667 Factory(const MySQLParameters& parameters) : |