diff OrthancServer/DatabaseWrapperBase.cpp @ 1671:2f2e2ec17bc4 db-changes

sample database plugin
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 01 Oct 2015 17:44:43 +0200
parents 16955f8fec4d
children 2ad22b2970a2
line wrap: on
line diff
--- a/OrthancServer/DatabaseWrapperBase.cpp	Thu Oct 01 14:03:07 2015 +0200
+++ b/OrthancServer/DatabaseWrapperBase.cpp	Thu Oct 01 17:44:43 2015 +0200
@@ -98,8 +98,9 @@
     }
   }
 
-  bool DatabaseWrapperBase::LookupParent(int64_t& parentId,
-                                         int64_t resourceId)
+  ErrorCode DatabaseWrapperBase::LookupParent(bool& found,
+                                              int64_t& parentId,
+                                              int64_t resourceId)
   {
     SQLite::Statement s(db_, SQLITE_FROM_HERE, 
                         "SELECT parentId FROM Resources WHERE internalId=?");
@@ -107,21 +108,24 @@
 
     if (!s.Step())
     {
-      throw OrthancException(ErrorCode_UnknownResource);
+      return ErrorCode_UnknownResource;
     }
 
     if (s.ColumnIsNull(0))
     {
-      return false;
+      found = false;
     }
     else
     {
+      found = true;
       parentId = s.ColumnInt(0);
-      return true;
     }
+
+    return ErrorCode_Success;
   }
 
-  std::string DatabaseWrapperBase::GetPublicId(int64_t resourceId)
+  bool DatabaseWrapperBase::GetPublicId(std::string& result,
+                                        int64_t resourceId)
   {
     SQLite::Statement s(db_, SQLITE_FROM_HERE, 
                         "SELECT publicId FROM Resources WHERE internalId=?");
@@ -129,25 +133,32 @@
     
     if (!s.Step())
     { 
-      throw OrthancException(ErrorCode_UnknownResource);
+      return false;
     }
-
-    return s.ColumnString(0);
+    else
+    {
+      result = s.ColumnString(0);
+      return true;
+    }
   }
 
 
-  ResourceType DatabaseWrapperBase::GetResourceType(int64_t resourceId)
+  ErrorCode DatabaseWrapperBase::GetResourceType(ResourceType& result,
+                                                 int64_t resourceId)
   {
     SQLite::Statement s(db_, SQLITE_FROM_HERE, 
                         "SELECT resourceType FROM Resources WHERE internalId=?");
     s.BindInt64(0, resourceId);
     
-    if (!s.Step())
+    if (s.Step())
+    {
+      result = static_cast<ResourceType>(s.ColumnInt(0));
+      return ErrorCode_Success;
+    }
+    else
     { 
-      throw OrthancException(ErrorCode_UnknownResource);
+      return ErrorCode_UnknownResource;
     }
-
-    return static_cast<ResourceType>(s.ColumnInt(0));
   }
 
 
@@ -400,10 +411,10 @@
   }
 
 
-  void DatabaseWrapperBase::GetChangesInternal(std::list<ServerIndexChange>& target,
-                                               bool& done,
-                                               SQLite::Statement& s,
-                                               uint32_t maxResults)
+  ErrorCode DatabaseWrapperBase::GetChangesInternal(std::list<ServerIndexChange>& target,
+                                                    bool& done,
+                                                    SQLite::Statement& s,
+                                                    uint32_t maxResults)
   {
     target.clear();
 
@@ -415,31 +426,36 @@
       const std::string& date = s.ColumnString(4);
 
       int64_t internalId = s.ColumnInt64(2);
-      std::string publicId = GetPublicId(internalId);
+      std::string publicId;
+      if (!GetPublicId(publicId, internalId))
+      {
+        return ErrorCode_UnknownResource;
+      }
 
       target.push_back(ServerIndexChange(seq, changeType, resourceType, publicId, date));
     }
 
     done = !(target.size() == maxResults && s.Step());
+    return ErrorCode_Success;
   }
 
 
-  void DatabaseWrapperBase::GetChanges(std::list<ServerIndexChange>& target,
-                                       bool& done,
-                                       int64_t since,
-                                       uint32_t maxResults)
+  ErrorCode DatabaseWrapperBase::GetChanges(std::list<ServerIndexChange>& target,
+                                            bool& done,
+                                            int64_t since,
+                                            uint32_t maxResults)
   {
     SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT * FROM Changes WHERE seq>? ORDER BY seq LIMIT ?");
     s.BindInt64(0, since);
     s.BindInt(1, maxResults + 1);
-    GetChangesInternal(target, done, s, maxResults);
+    return GetChangesInternal(target, done, s, maxResults);
   }
 
-  void DatabaseWrapperBase::GetLastChange(std::list<ServerIndexChange>& target)
+  ErrorCode DatabaseWrapperBase::GetLastChange(std::list<ServerIndexChange>& target)
   {
     bool done;  // Ignored
     SQLite::Statement s(db_, SQLITE_FROM_HERE, "SELECT * FROM Changes ORDER BY seq DESC LIMIT 1");
-    GetChangesInternal(target, done, s, 1);
+    return GetChangesInternal(target, done, s, 1);
   }
 
 
@@ -573,13 +589,14 @@
     
     if (!s.Step())
     {
-      throw OrthancException(ErrorCode_InternalError);
+      return 0;
     }
-
-    int64_t c = s.ColumnInt(0);
-    assert(!s.Step());
-
-    return c;
+    else
+    {
+      int64_t c = s.ColumnInt(0);
+      assert(!s.Step());
+      return c;
+    }
   }
 
 
@@ -664,11 +681,6 @@
                                              const DicomTag& tag,
                                              const std::string& value)
   {
-    if (!tag.IsIdentifier())
-    {
-      throw OrthancException(ErrorCode_ParameterOutOfRange);
-    }
-
     SQLite::Statement s(db_, SQLITE_FROM_HERE, 
                         "SELECT id FROM DicomIdentifiers WHERE tagGroup=? AND tagElement=? and value=?");