Mercurial > hg > orthanc
diff OrthancServer/DatabaseWrapper.cpp @ 231:8098448bd827
export log
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 30 Nov 2012 12:18:44 +0100 |
parents | 0200cd330582 |
children | 5368bbe813cf |
line wrap: on
line diff
--- a/OrthancServer/DatabaseWrapper.cpp Fri Nov 30 11:01:29 2012 +0100 +++ b/OrthancServer/DatabaseWrapper.cpp Fri Nov 30 12:18:44 2012 +0100 @@ -554,20 +554,89 @@ } - void DatabaseWrapper::LogExportedInstance(const std::string& remoteModality, - DicomInstanceHasher& hasher, + void DatabaseWrapper::LogExportedResource(ResourceType resourceType, + const std::string& publicId, + const std::string& remoteModality, + const std::string& patientId, + const std::string& studyInstanceUid, + const std::string& seriesInstanceUid, + const std::string& sopInstanceUid, const boost::posix_time::ptime& date) { - SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO ExportedInstances VALUES(NULL, ?, ?, ?, ?, ?, ?)"); - s.BindString(0, remoteModality); - s.BindString(1, hasher.HashInstance()); - s.BindString(2, hasher.GetPatientId()); - s.BindString(3, hasher.GetStudyUid()); - s.BindString(4, hasher.GetSeriesUid()); - s.BindString(5, hasher.GetInstanceUid()); - s.BindString(6, boost::posix_time::to_iso_string(date)); + SQLite::Statement s(db_, SQLITE_FROM_HERE, + "INSERT INTO ExportedResources VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?)"); + + s.BindInt(0, resourceType); + s.BindString(1, publicId); + s.BindString(2, remoteModality); + s.BindString(3, patientId); + s.BindString(4, studyInstanceUid); + s.BindString(5, seriesInstanceUid); + s.BindString(6, sopInstanceUid); + s.BindString(7, boost::posix_time::to_iso_string(date)); + s.Run(); } + + + void DatabaseWrapper::GetExportedResources(Json::Value& target, + int64_t since, + unsigned int maxResults) + { + SQLite::Statement s(db_, SQLITE_FROM_HERE, + "SELECT * FROM ExportedResources WHERE seq>? ORDER BY seq LIMIT ?"); + s.BindInt(0, since); + s.BindInt(1, maxResults + 1); + + Json::Value changes = Json::arrayValue; + int64_t last = 0; + + while (changes.size() < maxResults && s.Step()) + { + int64_t seq = s.ColumnInt(0); + ResourceType resourceType = static_cast<ResourceType>(s.ColumnInt(1)); + std::string publicId = s.ColumnString(2); + + Json::Value item = Json::objectValue; + item["Seq"] = static_cast<int>(seq); + item["ResourceType"] = ToString(resourceType); + item["ID"] = publicId; + item["Path"] = GetBasePath(resourceType, publicId); + item["RemoteModality"] = s.ColumnString(3); + item["Date"] = s.ColumnString(8); + + // WARNING: Do not add "break" below and do not reorder the case items! + switch (resourceType) + { + case ResourceType_Instance: + item["SopInstanceUid"] = s.ColumnString(7); + + case ResourceType_Series: + item["SeriesInstanceUid"] = s.ColumnString(6); + + case ResourceType_Study: + item["StudyInstanceUid"] = s.ColumnString(5); + + case ResourceType_Patient: + item["PatientId"] = s.ColumnString(4); + break; + + default: + throw OrthancException(ErrorCode_InternalError); + } + + last = seq; + + changes.append(item); + } + + target = Json::objectValue; + target["Changes"] = changes; + target["PendingChanges"] = (changes.size() == maxResults && s.Step()); + target["LastSeq"] = static_cast<int>(last); + } + + int64_t DatabaseWrapper::GetTableRecordCount(const std::string& table)