Mercurial > hg > orthanc-databases
comparison Framework/Plugins/IndexBackend.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 | d1b124d116c1 |
children | f033cc039264 |
comparison
equal
deleted
inserted
replaced
236:d1d2edbbe6fb | 237:35598014f140 |
---|---|
1066 bool IndexBackend::LookupGlobalProperty(std::string& target /*out*/, | 1066 bool IndexBackend::LookupGlobalProperty(std::string& target /*out*/, |
1067 DatabaseManager& manager, | 1067 DatabaseManager& manager, |
1068 const char* serverIdentifier, | 1068 const char* serverIdentifier, |
1069 int32_t property) | 1069 int32_t property) |
1070 { | 1070 { |
1071 return ::OrthancDatabases::LookupGlobalProperty(target, manager, serverIdentifier, | 1071 DatabaseManager::CachedStatement statement( |
1072 static_cast<Orthanc::GlobalProperty>(property)); | 1072 STATEMENT_FROM_HERE, manager, |
1073 "SELECT value FROM GlobalProperties WHERE property=${property}"); | |
1074 | |
1075 statement.SetReadOnly(true); | |
1076 statement.SetParameterType("property", ValueType_Integer64); | |
1077 | |
1078 Dictionary args; | |
1079 args.SetIntegerValue("property", property); | |
1080 | |
1081 statement.Execute(args); | |
1082 statement.SetResultFieldType(0, ValueType_Utf8String); | |
1083 | |
1084 if (statement.IsDone()) | |
1085 { | |
1086 return false; | |
1087 } | |
1088 else | |
1089 { | |
1090 ValueType type = statement.GetResultField(0).GetType(); | |
1091 | |
1092 if (type == ValueType_Null) | |
1093 { | |
1094 return false; | |
1095 } | |
1096 else if (type != ValueType_Utf8String) | |
1097 { | |
1098 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | |
1099 } | |
1100 else | |
1101 { | |
1102 target = dynamic_cast<const Utf8StringValue&>(statement.GetResultField(0)).GetContent(); | |
1103 return true; | |
1104 } | |
1105 } | |
1073 } | 1106 } |
1074 | 1107 |
1075 | 1108 |
1076 void IndexBackend::LookupIdentifier(std::list<int64_t>& target /*out*/, | 1109 void IndexBackend::LookupIdentifier(std::list<int64_t>& target /*out*/, |
1077 DatabaseManager& manager, | 1110 DatabaseManager& manager, |
1330 | 1363 |
1331 | 1364 |
1332 void IndexBackend::SetGlobalProperty(DatabaseManager& manager, | 1365 void IndexBackend::SetGlobalProperty(DatabaseManager& manager, |
1333 const char* serverIdentifier, | 1366 const char* serverIdentifier, |
1334 int32_t property, | 1367 int32_t property, |
1335 const char* value) | 1368 const char* utf8) |
1336 { | 1369 { |
1337 return ::OrthancDatabases::SetGlobalProperty( | 1370 if (manager.GetDialect() == Dialect_SQLite) |
1338 manager, serverIdentifier, static_cast<Orthanc::GlobalProperty>(property), value); | 1371 { |
1372 DatabaseManager::CachedStatement statement( | |
1373 STATEMENT_FROM_HERE, manager, | |
1374 "INSERT OR REPLACE INTO GlobalProperties VALUES (${property}, ${value})"); | |
1375 | |
1376 statement.SetParameterType("property", ValueType_Integer64); | |
1377 statement.SetParameterType("value", ValueType_Utf8String); | |
1378 | |
1379 Dictionary args; | |
1380 args.SetIntegerValue("property", static_cast<int>(property)); | |
1381 args.SetUtf8Value("value", utf8); | |
1382 | |
1383 statement.Execute(args); | |
1384 } | |
1385 else | |
1386 { | |
1387 { | |
1388 DatabaseManager::CachedStatement statement( | |
1389 STATEMENT_FROM_HERE, manager, | |
1390 "DELETE FROM GlobalProperties WHERE property=${property}"); | |
1391 | |
1392 statement.SetParameterType("property", ValueType_Integer64); | |
1393 | |
1394 Dictionary args; | |
1395 args.SetIntegerValue("property", property); | |
1396 | |
1397 statement.Execute(args); | |
1398 } | |
1399 | |
1400 { | |
1401 DatabaseManager::CachedStatement statement( | |
1402 STATEMENT_FROM_HERE, manager, | |
1403 "INSERT INTO GlobalProperties VALUES (${property}, ${value})"); | |
1404 | |
1405 statement.SetParameterType("property", ValueType_Integer64); | |
1406 statement.SetParameterType("value", ValueType_Utf8String); | |
1407 | |
1408 Dictionary args; | |
1409 args.SetIntegerValue("property", static_cast<int>(property)); | |
1410 args.SetUtf8Value("value", utf8); | |
1411 | |
1412 statement.Execute(args); | |
1413 } | |
1414 } | |
1339 } | 1415 } |
1340 | 1416 |
1341 | 1417 |
1342 static void ExecuteSetTag(DatabaseManager::CachedStatement& statement, | 1418 static void ExecuteSetTag(DatabaseManager::CachedStatement& statement, |
1343 int64_t id, | 1419 int64_t id, |
2302 OrthancDatabases::DatabaseBackendAdapterV2::Register(backend); | 2378 OrthancDatabases::DatabaseBackendAdapterV2::Register(backend); |
2303 } | 2379 } |
2304 } | 2380 } |
2305 | 2381 |
2306 | 2382 |
2383 bool IndexBackend::LookupGlobalIntegerProperty(int& target, | |
2384 DatabaseManager& manager, | |
2385 const char* serverIdentifier, | |
2386 int32_t property) | |
2387 { | |
2388 std::string value; | |
2389 | |
2390 if (LookupGlobalProperty(value, manager, serverIdentifier, property)) | |
2391 { | |
2392 try | |
2393 { | |
2394 target = boost::lexical_cast<int>(value); | |
2395 return true; | |
2396 } | |
2397 catch (boost::bad_lexical_cast&) | |
2398 { | |
2399 LOG(ERROR) << "Corrupted PostgreSQL database"; | |
2400 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | |
2401 } | |
2402 } | |
2403 else | |
2404 { | |
2405 return false; | |
2406 } | |
2407 } | |
2408 | |
2409 | |
2410 void IndexBackend::SetGlobalIntegerProperty(DatabaseManager& manager, | |
2411 const char* serverIdentifier, | |
2412 int32_t property, | |
2413 int value) | |
2414 { | |
2415 std::string s = boost::lexical_cast<std::string>(value); | |
2416 SetGlobalProperty(manager, serverIdentifier, property, s.c_str()); | |
2417 } | |
2418 | |
2419 | |
2307 void IndexBackend::Finalize() | 2420 void IndexBackend::Finalize() |
2308 { | 2421 { |
2309 OrthancDatabases::DatabaseBackendAdapterV2::Finalize(); | 2422 OrthancDatabases::DatabaseBackendAdapterV2::Finalize(); |
2310 | 2423 |
2311 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 | 2424 #if defined(ORTHANC_PLUGINS_VERSION_IS_ABOVE) // Macro introduced in Orthanc 1.3.1 |
2316 } | 2429 } |
2317 | 2430 |
2318 | 2431 |
2319 DatabaseManager* IndexBackend::CreateSingleDatabaseManager(IDatabaseBackend& backend) | 2432 DatabaseManager* IndexBackend::CreateSingleDatabaseManager(IDatabaseBackend& backend) |
2320 { | 2433 { |
2321 std::unique_ptr<IDatabase> database(backend.OpenDatabaseConnection()); | 2434 std::unique_ptr<DatabaseManager> manager(new DatabaseManager(backend.OpenDatabaseConnection())); |
2322 backend.ConfigureDatabase(*database); | 2435 backend.ConfigureDatabase(*manager); |
2323 return new DatabaseManager(database.release()); | 2436 return manager.release(); |
2324 } | 2437 } |
2325 } | 2438 } |