comparison Framework/Plugins/IndexBackend.cpp @ 239:e9ba888f371b

fix IndexBackend::SetGlobalProperty(), lighten GlobalProperty enum
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 08 Apr 2021 20:30:15 +0200
parents f033cc039264
children 7f5ee2b42a86
comparison
equal deleted inserted replaced
238:f033cc039264 239:e9ba888f371b
1393 internalId = ReadInteger64(statement, 0); 1393 internalId = ReadInteger64(statement, 0);
1394 return true; 1394 return true;
1395 } 1395 }
1396 } 1396 }
1397 1397
1398
1399 static void RunSetGlobalPropertyStatement(DatabaseManager::CachedStatement& statement,
1400 bool hasServer,
1401 bool hasValue,
1402 const char* serverIdentifier,
1403 int32_t property,
1404 const char* utf8)
1405 {
1406 Dictionary args;
1407
1408 statement.SetParameterType("property", ValueType_Integer64);
1409 args.SetIntegerValue("property", static_cast<int>(property));
1410
1411 if (hasValue)
1412 {
1413 assert(utf8 != NULL);
1414 statement.SetParameterType("value", ValueType_Utf8String);
1415 args.SetUtf8Value("value", utf8);
1416 }
1417 else
1418 {
1419 assert(utf8 == NULL);
1420 }
1421
1422 if (hasServer)
1423 {
1424 assert(serverIdentifier != NULL && strlen(serverIdentifier) > 0);
1425 statement.SetParameterType("server", ValueType_Utf8String);
1426 args.SetUtf8Value("server", serverIdentifier);
1427 }
1428 else
1429 {
1430 assert(serverIdentifier == NULL);
1431 }
1432
1433 statement.Execute(args);
1434 }
1435
1398 1436
1399 void IndexBackend::SetGlobalProperty(DatabaseManager& manager, 1437 void IndexBackend::SetGlobalProperty(DatabaseManager& manager,
1400 const char* serverIdentifier, 1438 const char* serverIdentifier,
1401 int32_t property, 1439 int32_t property,
1402 const char* utf8) 1440 const char* utf8)
1407 } 1445 }
1408 else if (manager.GetDialect() == Dialect_SQLite) 1446 else if (manager.GetDialect() == Dialect_SQLite)
1409 { 1447 {
1410 bool hasServer = (strlen(serverIdentifier) != 0); 1448 bool hasServer = (strlen(serverIdentifier) != 0);
1411 1449
1412 std::unique_ptr<DatabaseManager::CachedStatement> statement;
1413
1414 if (hasServer) 1450 if (hasServer)
1415 { 1451 {
1416 statement.reset(new DatabaseManager::CachedStatement( 1452 DatabaseManager::CachedStatement statement(
1417 STATEMENT_FROM_HERE, manager, 1453 STATEMENT_FROM_HERE, manager,
1418 "INSERT OR REPLACE INTO ServerProperties VALUES (${server}, ${property}, ${value})")); 1454 "INSERT OR REPLACE INTO ServerProperties VALUES (${server}, ${property}, ${value})");
1455
1456 RunSetGlobalPropertyStatement(statement, true, true, serverIdentifier, property, utf8);
1419 } 1457 }
1420 else 1458 else
1421 { 1459 {
1422 statement.reset(new DatabaseManager::CachedStatement( 1460 DatabaseManager::CachedStatement statement(
1423 STATEMENT_FROM_HERE, manager, 1461 STATEMENT_FROM_HERE, manager,
1424 "INSERT OR REPLACE INTO GlobalProperties VALUES (${property}, ${value})")); 1462 "INSERT OR REPLACE INTO GlobalProperties VALUES (${property}, ${value})");
1425 } 1463
1426 1464 RunSetGlobalPropertyStatement(statement, false, true, NULL, property, utf8);
1427 statement->SetParameterType("property", ValueType_Integer64); 1465 }
1428 statement->SetParameterType("value", ValueType_Utf8String); 1466 }
1429 1467 else
1430 Dictionary args; 1468 {
1431 args.SetIntegerValue("property", static_cast<int>(property)); 1469 bool hasServer = (strlen(serverIdentifier) != 0);
1432 args.SetUtf8Value("value", utf8);
1433 1470
1434 if (hasServer) 1471 if (hasServer)
1435 { 1472 {
1436 statement->SetParameterType("server", ValueType_Utf8String);
1437 args.SetUtf8Value("server", serverIdentifier);
1438 }
1439
1440 statement->Execute(args);
1441 }
1442 else
1443 {
1444 bool hasServer = (strlen(serverIdentifier) != 0);
1445
1446 std::unique_ptr<DatabaseManager::CachedStatement> statement;
1447
1448 {
1449 if (hasServer)
1450 { 1473 {
1451 statement.reset(new DatabaseManager::CachedStatement( 1474 DatabaseManager::CachedStatement statement(
1452 STATEMENT_FROM_HERE, manager, 1475 STATEMENT_FROM_HERE, manager,
1453 "DELETE FROM ServerProperties WHERE server=${server} AND property=${property}")); 1476 "DELETE FROM ServerProperties WHERE server=${server} AND property=${property}");
1477
1478 RunSetGlobalPropertyStatement(statement, true, false, serverIdentifier, property, NULL);
1454 } 1479 }
1455 else 1480
1456 { 1481 {
1457 statement.reset(new DatabaseManager::CachedStatement( 1482 DatabaseManager::CachedStatement statement(
1458 STATEMENT_FROM_HERE, manager, 1483 STATEMENT_FROM_HERE, manager,
1459 "DELETE FROM GlobalProperties WHERE property=${property}")); 1484 "INSERT INTO ServerProperties VALUES (${server}, ${property}, ${value})");
1485
1486 RunSetGlobalPropertyStatement(statement, true, true, serverIdentifier, property, utf8);
1460 } 1487 }
1461 1488 }
1462 statement->SetParameterType("property", ValueType_Integer64); 1489 else
1463 1490 {
1464 Dictionary args;
1465 args.SetIntegerValue("property", property);
1466
1467 if (hasServer)
1468 { 1491 {
1469 statement->SetParameterType("server", ValueType_Utf8String); 1492 DatabaseManager::CachedStatement statement(
1470 args.SetUtf8Value("server", serverIdentifier); 1493 STATEMENT_FROM_HERE, manager,
1494 "DELETE FROM GlobalProperties WHERE property=${property}");
1495
1496 RunSetGlobalPropertyStatement(statement, false, false, NULL, property, NULL);
1471 } 1497 }
1472 1498
1473 statement->Execute(args);
1474 }
1475
1476 {
1477 if (hasServer)
1478 { 1499 {
1479 statement.reset(new DatabaseManager::CachedStatement( 1500 DatabaseManager::CachedStatement statement(
1480 STATEMENT_FROM_HERE, manager, 1501 STATEMENT_FROM_HERE, manager,
1481 "INSERT INTO ServerProperties VALUES (${server}, ${property}, ${value})")); 1502 "INSERT INTO GlobalProperties VALUES (${property}, ${value})");
1503
1504 RunSetGlobalPropertyStatement(statement, false, true, NULL, property, utf8);
1482 } 1505 }
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);
1492
1493 Dictionary args;
1494 args.SetIntegerValue("property", static_cast<int>(property));
1495 args.SetUtf8Value("value", utf8);
1496
1497 if (hasServer)
1498 {
1499 statement->SetParameterType("server", ValueType_Utf8String);
1500 args.SetUtf8Value("server", serverIdentifier);
1501 }
1502
1503 statement->Execute(args);
1504 } 1506 }
1505 } 1507 }
1506 } 1508 }
1507 1509
1508 1510