comparison Framework/Plugins/StorageBackend.cpp @ 207:d9ef3f16e6a2

wrapping transactions in API v3
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 19 Mar 2021 15:11:45 +0100
parents 53bd9022c58b
children 696bc0c9fddb
comparison
equal deleted inserted replaced
206:6dcf57074dd4 207:d9ef3f16e6a2
159 int64_t size, 159 int64_t size,
160 OrthancPluginContentType type) 160 OrthancPluginContentType type)
161 { 161 {
162 try 162 try
163 { 163 {
164 DatabaseManager::Transaction transaction(backend_->GetManager()); 164 DatabaseManager::Transaction transaction(backend_->GetManager(), TransactionType_ReadWrite);
165 backend_->Create(transaction, uuid, content, static_cast<size_t>(size), type); 165 backend_->Create(transaction, uuid, content, static_cast<size_t>(size), type);
166 transaction.Commit(); 166 transaction.Commit();
167 return OrthancPluginErrorCode_Success; 167 return OrthancPluginErrorCode_Success;
168 } 168 }
169 ORTHANC_PLUGINS_DATABASE_CATCH; 169 ORTHANC_PLUGINS_DATABASE_CATCH;
172 172
173 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 0) 173 #if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 0)
174 static OrthancPluginErrorCode StorageReadWhole(OrthancPluginMemoryBuffer64 *target, 174 static OrthancPluginErrorCode StorageReadWhole(OrthancPluginMemoryBuffer64 *target,
175 const char* uuid, 175 const char* uuid,
176 OrthancPluginContentType type) 176 OrthancPluginContentType type)
177 {
178 try
179 {
180 StorageAreaBuffer buffer(context_);
181
182 {
183 DatabaseManager::Transaction transaction(backend_->GetManager(), TransactionType_ReadOnly);
184 backend_->Read(buffer, transaction, uuid, type);
185 transaction.Commit();
186 }
187
188 buffer.Move(target);
189
190 return OrthancPluginErrorCode_Success;
191 }
192 ORTHANC_PLUGINS_DATABASE_CATCH;
193 }
194 #else
195 static OrthancPluginErrorCode StorageRead(void** content,
196 int64_t* size,
197 const char* uuid,
198 OrthancPluginContentType type)
177 { 199 {
178 try 200 try
179 { 201 {
180 StorageAreaBuffer buffer(context_); 202 StorageAreaBuffer buffer(context_);
181 203
183 DatabaseManager::Transaction transaction(backend_->GetManager()); 205 DatabaseManager::Transaction transaction(backend_->GetManager());
184 backend_->Read(buffer, transaction, uuid, type); 206 backend_->Read(buffer, transaction, uuid, type);
185 transaction.Commit(); 207 transaction.Commit();
186 } 208 }
187 209
188 buffer.Move(target);
189
190 return OrthancPluginErrorCode_Success;
191 }
192 ORTHANC_PLUGINS_DATABASE_CATCH;
193 }
194 #else
195 static OrthancPluginErrorCode StorageRead(void** content,
196 int64_t* size,
197 const char* uuid,
198 OrthancPluginContentType type)
199 {
200 try
201 {
202 StorageAreaBuffer buffer(context_);
203
204 {
205 DatabaseManager::Transaction transaction(backend_->GetManager());
206 backend_->Read(buffer, transaction, uuid, type);
207 transaction.Commit();
208 }
209
210 *size = buffer.GetSize(); 210 *size = buffer.GetSize();
211 *content = buffer.ReleaseData(); 211 *content = buffer.ReleaseData();
212 212
213 return OrthancPluginErrorCode_Success; 213 return OrthancPluginErrorCode_Success;
214 } 214 }
220 static OrthancPluginErrorCode StorageRemove(const char* uuid, 220 static OrthancPluginErrorCode StorageRemove(const char* uuid,
221 OrthancPluginContentType type) 221 OrthancPluginContentType type)
222 { 222 {
223 try 223 try
224 { 224 {
225 DatabaseManager::Transaction transaction(backend_->GetManager()); 225 DatabaseManager::Transaction transaction(backend_->GetManager(), TransactionType_ReadWrite);
226 backend_->Remove(transaction, uuid, type); 226 backend_->Remove(transaction, uuid, type);
227 transaction.Commit(); 227 transaction.Commit();
228 return OrthancPluginErrorCode_Success; 228 return OrthancPluginErrorCode_Success;
229 } 229 }
230 ORTHANC_PLUGINS_DATABASE_CATCH; 230 ORTHANC_PLUGINS_DATABASE_CATCH;