comparison PostgreSQL/Plugins/PostgreSQLIndex.cpp @ 522:c49136b34891 large-queries tip

use a prepared statement for InsertOrUpdateMetadata
author Alain Mazy <am@orthanc.team>
date Fri, 05 Jul 2024 09:15:54 +0200
parents 54d518dcd74a
children
comparison
equal deleted inserted replaced
521:2ab3d45c0b3c 522:c49136b34891
550 550
551 Dictionary args; 551 Dictionary args;
552 552
553 for (uint32_t i = 0; i < count; i++) 553 for (uint32_t i = 0; i < count; i++)
554 { 554 {
555 std::string argName = "m" + boost::lexical_cast<std::string>(i); 555 std::string resourceArgName = "r" + boost::lexical_cast<std::string>(i);
556 556 std::string typeArgName = "t" + boost::lexical_cast<std::string>(i);
557 args.SetUtf8Value(argName, metadata[i].value); 557 std::string valueArgName = "v" + boost::lexical_cast<std::string>(i);
558 558
559 resourceIds.push_back(boost::lexical_cast<std::string>(metadata[i].resource)); 559 args.SetIntegerValue(resourceArgName, metadata[i].resource);
560 metadataTypes.push_back(boost::lexical_cast<std::string>(metadata[i].metadata)); 560 args.SetInteger32Value(typeArgName, metadata[i].metadata);
561 metadataValues.push_back("${" + argName + "}"); 561 args.SetUtf8Value(valueArgName, metadata[i].value);
562
563 resourceIds.push_back("${" + resourceArgName + "}");
564 metadataTypes.push_back("${" + typeArgName + "}");
565 metadataValues.push_back("${" + valueArgName + "}");
562 revisions.push_back("0"); 566 revisions.push_back("0");
563 } 567 }
564 568
565 std::string joinedResourceIds; 569 std::string joinedResourceIds;
566 std::string joinedMetadataTypes; 570 std::string joinedMetadataTypes;
576 joinedResourceIds + "], ARRAY[" + 580 joinedResourceIds + "], ARRAY[" +
577 joinedMetadataTypes + "], ARRAY[" + 581 joinedMetadataTypes + "], ARRAY[" +
578 joinedMetadataValues + "], ARRAY[" + 582 joinedMetadataValues + "], ARRAY[" +
579 joinedRevisions + "])"; 583 joinedRevisions + "])";
580 584
581 DatabaseManager::StandaloneStatement statement(manager, sql); 585 DatabaseManager::CachedStatement statement(STATEMENT_FROM_HERE_DYNAMIC(sql), manager, sql);
582 586
583 for (uint32_t i = 0; i < count; i++) 587 for (uint32_t i = 0; i < count; i++)
584 { 588 {
585 statement.SetParameterType("m" + boost::lexical_cast<std::string>(i), 589 statement.SetParameterType("v" + boost::lexical_cast<std::string>(i),
586 ValueType_Utf8String); 590 ValueType_Utf8String);
591 statement.SetParameterType("r" + boost::lexical_cast<std::string>(i),
592 ValueType_Integer64);
593 statement.SetParameterType("t" + boost::lexical_cast<std::string>(i),
594 ValueType_Integer32);
587 } 595 }
588 596
589 statement.Execute(args); 597 statement.Execute(args);
590 } 598 }
591 #endif 599 #endif