Mercurial > hg > orthanc-databases
comparison Framework/Plugins/IndexBackend.cpp @ 238:f033cc039264
new table: "ServerProperties"
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Thu, 08 Apr 2021 19:33:36 +0200 |
parents | 35598014f140 |
children | e9ba888f371b |
comparison
equal
deleted
inserted
replaced
237:35598014f140 | 238:f033cc039264 |
---|---|
1060 ReadString(statement, 5)); | 1060 ReadString(statement, 5)); |
1061 return true; | 1061 return true; |
1062 } | 1062 } |
1063 } | 1063 } |
1064 | 1064 |
1065 | |
1066 static bool ReadGlobalProperty(std::string& target, | |
1067 DatabaseManager::CachedStatement& statement, | |
1068 const Dictionary& args) | |
1069 { | |
1070 statement.Execute(args); | |
1071 statement.SetResultFieldType(0, ValueType_Utf8String); | |
1072 | |
1073 if (statement.IsDone()) | |
1074 { | |
1075 return false; | |
1076 } | |
1077 else | |
1078 { | |
1079 ValueType type = statement.GetResultField(0).GetType(); | |
1080 | |
1081 if (type == ValueType_Null) | |
1082 { | |
1083 return false; | |
1084 } | |
1085 else if (type != ValueType_Utf8String) | |
1086 { | |
1087 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | |
1088 } | |
1089 else | |
1090 { | |
1091 target = dynamic_cast<const Utf8StringValue&>(statement.GetResultField(0)).GetContent(); | |
1092 return true; | |
1093 } | |
1094 } | |
1095 } | |
1096 | |
1065 | 1097 |
1066 bool IndexBackend::LookupGlobalProperty(std::string& target /*out*/, | 1098 bool IndexBackend::LookupGlobalProperty(std::string& target /*out*/, |
1067 DatabaseManager& manager, | 1099 DatabaseManager& manager, |
1068 const char* serverIdentifier, | 1100 const char* serverIdentifier, |
1069 int32_t property) | 1101 int32_t property) |
1070 { | 1102 { |
1071 DatabaseManager::CachedStatement statement( | 1103 if (serverIdentifier == NULL) |
1072 STATEMENT_FROM_HERE, manager, | 1104 { |
1073 "SELECT value FROM GlobalProperties WHERE property=${property}"); | 1105 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
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 } | 1106 } |
1088 else | 1107 else |
1089 { | 1108 { |
1090 ValueType type = statement.GetResultField(0).GetType(); | 1109 if (strlen(serverIdentifier) == 0) |
1091 | 1110 { |
1092 if (type == ValueType_Null) | 1111 DatabaseManager::CachedStatement statement( |
1093 { | 1112 STATEMENT_FROM_HERE, manager, |
1094 return false; | 1113 "SELECT value FROM GlobalProperties WHERE property=${property}"); |
1095 } | 1114 |
1096 else if (type != ValueType_Utf8String) | 1115 statement.SetReadOnly(true); |
1097 { | 1116 statement.SetParameterType("property", ValueType_Integer64); |
1098 throw Orthanc::OrthancException(Orthanc::ErrorCode_Database); | 1117 |
1118 Dictionary args; | |
1119 args.SetIntegerValue("property", property); | |
1120 | |
1121 return ReadGlobalProperty(target, statement, args); | |
1099 } | 1122 } |
1100 else | 1123 else |
1101 { | 1124 { |
1102 target = dynamic_cast<const Utf8StringValue&>(statement.GetResultField(0)).GetContent(); | 1125 DatabaseManager::CachedStatement statement( |
1103 return true; | 1126 STATEMENT_FROM_HERE, manager, |
1127 "SELECT value FROM ServerProperties WHERE server=${server} AND property=${property}"); | |
1128 | |
1129 statement.SetReadOnly(true); | |
1130 statement.SetParameterType("server", ValueType_Utf8String); | |
1131 statement.SetParameterType("property", ValueType_Integer64); | |
1132 | |
1133 Dictionary args; | |
1134 args.SetUtf8Value("server", serverIdentifier); | |
1135 args.SetIntegerValue("property", property); | |
1136 | |
1137 return ReadGlobalProperty(target, statement, args); | |
1104 } | 1138 } |
1105 } | 1139 } |
1106 } | 1140 } |
1107 | 1141 |
1108 | 1142 |
1365 void IndexBackend::SetGlobalProperty(DatabaseManager& manager, | 1399 void IndexBackend::SetGlobalProperty(DatabaseManager& manager, |
1366 const char* serverIdentifier, | 1400 const char* serverIdentifier, |
1367 int32_t property, | 1401 int32_t property, |
1368 const char* utf8) | 1402 const char* utf8) |
1369 { | 1403 { |
1370 if (manager.GetDialect() == Dialect_SQLite) | 1404 if (serverIdentifier == NULL) |
1371 { | 1405 { |
1372 DatabaseManager::CachedStatement statement( | 1406 throw Orthanc::OrthancException(Orthanc::ErrorCode_NullPointer); |
1373 STATEMENT_FROM_HERE, manager, | 1407 } |
1374 "INSERT OR REPLACE INTO GlobalProperties VALUES (${property}, ${value})"); | 1408 else if (manager.GetDialect() == Dialect_SQLite) |
1375 | 1409 { |
1376 statement.SetParameterType("property", ValueType_Integer64); | 1410 bool hasServer = (strlen(serverIdentifier) != 0); |
1377 statement.SetParameterType("value", ValueType_Utf8String); | 1411 |
1412 std::unique_ptr<DatabaseManager::CachedStatement> statement; | |
1413 | |
1414 if (hasServer) | |
1415 { | |
1416 statement.reset(new DatabaseManager::CachedStatement( | |
1417 STATEMENT_FROM_HERE, manager, | |
1418 "INSERT OR REPLACE INTO ServerProperties VALUES (${server}, ${property}, ${value})")); | |
1419 } | |
1420 else | |
1421 { | |
1422 statement.reset(new DatabaseManager::CachedStatement( | |
1423 STATEMENT_FROM_HERE, manager, | |
1424 "INSERT OR REPLACE INTO GlobalProperties VALUES (${property}, ${value})")); | |
1425 } | |
1426 | |
1427 statement->SetParameterType("property", ValueType_Integer64); | |
1428 statement->SetParameterType("value", ValueType_Utf8String); | |
1378 | 1429 |
1379 Dictionary args; | 1430 Dictionary args; |
1380 args.SetIntegerValue("property", static_cast<int>(property)); | 1431 args.SetIntegerValue("property", static_cast<int>(property)); |
1381 args.SetUtf8Value("value", utf8); | 1432 args.SetUtf8Value("value", utf8); |
1382 | 1433 |
1383 statement.Execute(args); | 1434 if (hasServer) |
1435 { | |
1436 statement->SetParameterType("server", ValueType_Utf8String); | |
1437 args.SetUtf8Value("server", serverIdentifier); | |
1438 } | |
1439 | |
1440 statement->Execute(args); | |
1384 } | 1441 } |
1385 else | 1442 else |
1386 { | 1443 { |
1387 { | 1444 bool hasServer = (strlen(serverIdentifier) != 0); |
1388 DatabaseManager::CachedStatement statement( | 1445 |
1389 STATEMENT_FROM_HERE, manager, | 1446 std::unique_ptr<DatabaseManager::CachedStatement> statement; |
1390 "DELETE FROM GlobalProperties WHERE property=${property}"); | 1447 |
1391 | 1448 { |
1392 statement.SetParameterType("property", ValueType_Integer64); | 1449 if (hasServer) |
1450 { | |
1451 statement.reset(new DatabaseManager::CachedStatement( | |
1452 STATEMENT_FROM_HERE, manager, | |
1453 "DELETE FROM ServerProperties WHERE server=${server} AND property=${property}")); | |
1454 } | |
1455 else | |
1456 { | |
1457 statement.reset(new DatabaseManager::CachedStatement( | |
1458 STATEMENT_FROM_HERE, manager, | |
1459 "DELETE FROM GlobalProperties WHERE property=${property}")); | |
1460 } | |
1461 | |
1462 statement->SetParameterType("property", ValueType_Integer64); | |
1393 | 1463 |
1394 Dictionary args; | 1464 Dictionary args; |
1395 args.SetIntegerValue("property", property); | 1465 args.SetIntegerValue("property", property); |
1396 | 1466 |
1397 statement.Execute(args); | 1467 if (hasServer) |
1398 } | 1468 { |
1399 | 1469 statement->SetParameterType("server", ValueType_Utf8String); |
1400 { | 1470 args.SetUtf8Value("server", serverIdentifier); |
1401 DatabaseManager::CachedStatement statement( | 1471 } |
1402 STATEMENT_FROM_HERE, manager, | 1472 |
1403 "INSERT INTO GlobalProperties VALUES (${property}, ${value})"); | 1473 statement->Execute(args); |
1404 | 1474 } |
1405 statement.SetParameterType("property", ValueType_Integer64); | 1475 |
1406 statement.SetParameterType("value", ValueType_Utf8String); | 1476 { |
1477 if (hasServer) | |
1478 { | |
1479 statement.reset(new DatabaseManager::CachedStatement( | |
1480 STATEMENT_FROM_HERE, manager, | |
1481 "INSERT INTO ServerProperties VALUES (${server}, ${property}, ${value})")); | |
1482 } | |
1483 else | |
1484 { | |
1485 statement.reset(new DatabaseManager::CachedStatement( | |
1486 STATEMENT_FROM_HERE, manager, | |
1487 "INSERT INTO GlobalProperties VALUES (${property}, ${value})")); | |
1488 } | |
1489 | |
1490 statement->SetParameterType("property", ValueType_Integer64); | |
1491 statement->SetParameterType("value", ValueType_Utf8String); | |
1407 | 1492 |
1408 Dictionary args; | 1493 Dictionary args; |
1409 args.SetIntegerValue("property", static_cast<int>(property)); | 1494 args.SetIntegerValue("property", static_cast<int>(property)); |
1410 args.SetUtf8Value("value", utf8); | 1495 args.SetUtf8Value("value", utf8); |
1411 | 1496 |
1412 statement.Execute(args); | 1497 if (hasServer) |
1498 { | |
1499 statement->SetParameterType("server", ValueType_Utf8String); | |
1500 args.SetUtf8Value("server", serverIdentifier); | |
1501 } | |
1502 | |
1503 statement->Execute(args); | |
1413 } | 1504 } |
1414 } | 1505 } |
1415 } | 1506 } |
1416 | 1507 |
1417 | 1508 |