# HG changeset patch # User Sebastien Jodogne # Date 1617874952 -7200 # Node ID f2b32d31fc99b4c68cd54469b4716d3504f3ac1e # Parent d1b124d116c155b3891f34ec159d3a1c69d25635 fix lsb build, fix backward compatibility with SDK <= 1.9.1 diff -r d1b124d116c1 -r f2b32d31fc99 Framework/Common/DatabaseManager.cpp --- a/Framework/Common/DatabaseManager.cpp Thu Apr 08 10:50:01 2021 +0200 +++ b/Framework/Common/DatabaseManager.cpp Thu Apr 08 11:42:32 2021 +0200 @@ -58,8 +58,16 @@ void DatabaseManager::CloseIfUnavailable(Orthanc::ErrorCode e) { - if (e != Orthanc::ErrorCode_Success && - e != Orthanc::ErrorCode_DatabaseCannotSerialize) + bool failure; + +#if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 2) + failure = (e != Orthanc::ErrorCode_Success && + e != Orthanc::ErrorCode_DatabaseCannotSerialize); +#else + failure = (e != Orthanc::ErrorCode_Success); +#endif + + if (failure) { transaction_.reset(NULL); } diff -r d1b124d116c1 -r f2b32d31fc99 Framework/Plugins/DatabaseBackendAdapterV3.cpp --- a/Framework/Plugins/DatabaseBackendAdapterV3.cpp Thu Apr 08 10:50:01 2021 +0200 +++ b/Framework/Plugins/DatabaseBackendAdapterV3.cpp Thu Apr 08 11:42:32 2021 +0200 @@ -55,9 +55,32 @@ namespace OrthancDatabases { static bool isBackendInUse_ = false; // Only for sanity checks - - // TODO - TURN THIS INTO A CONNECTION POOL + + template + static void CopyListToVector(std::vector& target, + const std::list& source) + { + /** + * This has the the same effect as: + * + * target.reserve(source.size()); + * std::copy(std::begin(source), std::end(source), std::back_inserter(target)); + * + * However, this implementation is compatible with C++03 (Linux + * Standard Base), whereas "std::back_inserter" requires C++11. + **/ + + target.clear(); + target.reserve(source.size()); + + for (typename std::list::const_iterator it = source.begin(); it != source.end(); ++it) + { + target.push_back(*it); + } + } + + class DatabaseBackendAdapterV3::Adapter : public boost::noncopyable { private: @@ -704,22 +727,18 @@ matches_.push_back(match); } - + void AnswerIntegers32(const std::list& values) { SetupAnswerType(_OrthancPluginDatabaseAnswerType_Int32); - - integers32_.reserve(values.size()); - std::copy(std::begin(values), std::end(values), std::back_inserter(integers32_)); + CopyListToVector(integers32_, values); } void AnswerIntegers64(const std::list& values) { SetupAnswerType(_OrthancPluginDatabaseAnswerType_Int64); - - integers64_.reserve(values.size()); - std::copy(std::begin(values), std::end(values), std::back_inserter(integers64_)); + CopyListToVector(integers64_, values); } @@ -748,9 +767,7 @@ void AnswerStrings(const std::list& values) { SetupAnswerType(_OrthancPluginDatabaseAnswerType_String); - - stringAnswers_.reserve(values.size()); - std::copy(std::begin(values), std::end(values), std::back_inserter(stringAnswers_)); + CopyListToVector(stringAnswers_, values); } diff -r d1b124d116c1 -r f2b32d31fc99 Framework/PostgreSQL/PostgreSQLStatement.cpp --- a/Framework/PostgreSQL/PostgreSQLStatement.cpp Thu Apr 08 10:50:01 2021 +0200 +++ b/Framework/PostgreSQL/PostgreSQLStatement.cpp Thu Apr 08 11:42:32 2021 +0200 @@ -285,7 +285,11 @@ PQclear(result); } +#if ORTHANC_PLUGINS_VERSION_IS_ABOVE(1, 9, 2) throw Orthanc::OrthancException(Orthanc::ErrorCode_DatabaseCannotSerialize); +#else + throw Orthanc::OrthancException(Orthanc::ErrorCode_Database, "Collision between multiple writers"); +#endif } else if (result == NULL) {