Mercurial > hg > orthanc-databases
diff Framework/PostgreSQL/PostgreSQLDatabase.cpp @ 266:cc7af42d4f23
Store revisions for metadata and attachments in PostgreSQL
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Tue, 20 Apr 2021 17:41:44 +0200 |
parents | d663d9e44f8d |
children | b8ba198a8df3 |
line wrap: on
line diff
--- a/Framework/PostgreSQL/PostgreSQLDatabase.cpp Tue Apr 20 16:14:04 2021 +0200 +++ b/Framework/PostgreSQL/PostgreSQLDatabase.cpp Tue Apr 20 17:41:44 2021 +0200 @@ -30,6 +30,7 @@ #include <Logging.h> #include <OrthancException.h> +#include <Toolbox.h> #include <boost/lexical_cast.hpp> #include <boost/thread.hpp> @@ -184,10 +185,10 @@ } - bool PostgreSQLDatabase::DoesTableExist(const char* name) + bool PostgreSQLDatabase::DoesTableExist(const std::string& name) { - std::string lower(name); - std::transform(lower.begin(), lower.end(), lower.begin(), tolower); + std::string lower; + Orthanc::Toolbox::ToLowerCase(lower, name); // http://stackoverflow.com/a/24089729/881731 @@ -205,6 +206,30 @@ } + bool PostgreSQLDatabase::DoesColumnExist(const std::string& tableName, + const std::string& columnName) + { + std::string lowerTable, lowerColumn; + Orthanc::Toolbox::ToLowerCase(lowerTable, tableName); + Orthanc::Toolbox::ToLowerCase(lowerColumn, columnName); + + PostgreSQLStatement statement(*this, + "SELECT 1 FROM information_schema.columns " + "WHERE table_schema=$1 AND table_name=$2 AND column_name=$3"); + + statement.DeclareInputString(0); + statement.DeclareInputString(1); + statement.DeclareInputString(2); + + statement.BindString(0, "public" /* schema */); + statement.BindString(1, lowerTable); + statement.BindString(2, lowerColumn); + + PostgreSQLResult result(statement); + return !result.IsDone(); + } + + void PostgreSQLDatabase::ClearAll() { PostgreSQLTransaction transaction(*this, TransactionType_ReadWrite);