comparison Framework/SQLite/SQLiteDatabase.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 35598014f140
comparison
equal deleted inserted replaced
214:ab96698c73a3 215:b40b30075c51
46 46
47 namespace 47 namespace
48 { 48 {
49 class SQLiteImplicitTransaction : public ImplicitTransaction 49 class SQLiteImplicitTransaction : public ImplicitTransaction
50 { 50 {
51 private:
52 SQLiteDatabase& db_;
53
54 protected: 51 protected:
55 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement, 52 virtual IResult* ExecuteInternal(IPrecompiledStatement& statement,
56 const Dictionary& parameters) ORTHANC_OVERRIDE 53 const Dictionary& parameters) ORTHANC_OVERRIDE
57 { 54 {
58 return dynamic_cast<SQLiteStatement&>(statement).Execute(*this, parameters); 55 return dynamic_cast<SQLiteStatement&>(statement).Execute(*this, parameters);
61 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement, 58 virtual void ExecuteWithoutResultInternal(IPrecompiledStatement& statement,
62 const Dictionary& parameters) ORTHANC_OVERRIDE 59 const Dictionary& parameters) ORTHANC_OVERRIDE
63 { 60 {
64 dynamic_cast<SQLiteStatement&>(statement).ExecuteWithoutResult(*this, parameters); 61 dynamic_cast<SQLiteStatement&>(statement).ExecuteWithoutResult(*this, parameters);
65 } 62 }
66
67 public:
68 explicit SQLiteImplicitTransaction(SQLiteDatabase& db) :
69 db_(db)
70 {
71 }
72 }; 63 };
73 } 64 }
74 65
75 ITransaction* SQLiteDatabase::CreateTransaction(bool isImplicit) 66 ITransaction* SQLiteDatabase::CreateTransaction(TransactionType type)
76 { 67 {
77 if (isImplicit) 68 switch (type)
78 { 69 {
79 return new SQLiteImplicitTransaction(*this); 70 case TransactionType_Implicit:
80 } 71 return new SQLiteImplicitTransaction;
81 else 72
82 { 73 case TransactionType_ReadOnly:
83 return new SQLiteTransaction(*this); 74 case TransactionType_ReadWrite:
75 return new SQLiteTransaction(*this);
76
77 default:
78 throw Orthanc::OrthancException(Orthanc::ErrorCode_ParameterOutOfRange);
84 } 79 }
85 } 80 }
86 } 81 }