Mercurial > hg > orthanc-databases
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 |