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);