comparison 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
comparison
equal deleted inserted replaced
230:ae2367145b49 231:8098448bd827
552 target["PendingChanges"] = (changes.size() == maxResults && s.Step()); 552 target["PendingChanges"] = (changes.size() == maxResults && s.Step());
553 target["LastSeq"] = static_cast<int>(last); 553 target["LastSeq"] = static_cast<int>(last);
554 } 554 }
555 555
556 556
557 void DatabaseWrapper::LogExportedInstance(const std::string& remoteModality, 557 void DatabaseWrapper::LogExportedResource(ResourceType resourceType,
558 DicomInstanceHasher& hasher, 558 const std::string& publicId,
559 const std::string& remoteModality,
560 const std::string& patientId,
561 const std::string& studyInstanceUid,
562 const std::string& seriesInstanceUid,
563 const std::string& sopInstanceUid,
559 const boost::posix_time::ptime& date) 564 const boost::posix_time::ptime& date)
560 { 565 {
561 SQLite::Statement s(db_, SQLITE_FROM_HERE, "INSERT INTO ExportedInstances VALUES(NULL, ?, ?, ?, ?, ?, ?)"); 566 SQLite::Statement s(db_, SQLITE_FROM_HERE,
562 s.BindString(0, remoteModality); 567 "INSERT INTO ExportedResources VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?)");
563 s.BindString(1, hasher.HashInstance()); 568
564 s.BindString(2, hasher.GetPatientId()); 569 s.BindInt(0, resourceType);
565 s.BindString(3, hasher.GetStudyUid()); 570 s.BindString(1, publicId);
566 s.BindString(4, hasher.GetSeriesUid()); 571 s.BindString(2, remoteModality);
567 s.BindString(5, hasher.GetInstanceUid()); 572 s.BindString(3, patientId);
568 s.BindString(6, boost::posix_time::to_iso_string(date)); 573 s.BindString(4, studyInstanceUid);
574 s.BindString(5, seriesInstanceUid);
575 s.BindString(6, sopInstanceUid);
576 s.BindString(7, boost::posix_time::to_iso_string(date));
577
569 s.Run(); 578 s.Run();
570 } 579 }
580
581
582 void DatabaseWrapper::GetExportedResources(Json::Value& target,
583 int64_t since,
584 unsigned int maxResults)
585 {
586 SQLite::Statement s(db_, SQLITE_FROM_HERE,
587 "SELECT * FROM ExportedResources WHERE seq>? ORDER BY seq LIMIT ?");
588 s.BindInt(0, since);
589 s.BindInt(1, maxResults + 1);
590
591 Json::Value changes = Json::arrayValue;
592 int64_t last = 0;
593
594 while (changes.size() < maxResults && s.Step())
595 {
596 int64_t seq = s.ColumnInt(0);
597 ResourceType resourceType = static_cast<ResourceType>(s.ColumnInt(1));
598 std::string publicId = s.ColumnString(2);
599
600 Json::Value item = Json::objectValue;
601 item["Seq"] = static_cast<int>(seq);
602 item["ResourceType"] = ToString(resourceType);
603 item["ID"] = publicId;
604 item["Path"] = GetBasePath(resourceType, publicId);
605 item["RemoteModality"] = s.ColumnString(3);
606 item["Date"] = s.ColumnString(8);
607
608 // WARNING: Do not add "break" below and do not reorder the case items!
609 switch (resourceType)
610 {
611 case ResourceType_Instance:
612 item["SopInstanceUid"] = s.ColumnString(7);
613
614 case ResourceType_Series:
615 item["SeriesInstanceUid"] = s.ColumnString(6);
616
617 case ResourceType_Study:
618 item["StudyInstanceUid"] = s.ColumnString(5);
619
620 case ResourceType_Patient:
621 item["PatientId"] = s.ColumnString(4);
622 break;
623
624 default:
625 throw OrthancException(ErrorCode_InternalError);
626 }
627
628 last = seq;
629
630 changes.append(item);
631 }
632
633 target = Json::objectValue;
634 target["Changes"] = changes;
635 target["PendingChanges"] = (changes.size() == maxResults && s.Step());
636 target["LastSeq"] = static_cast<int>(last);
637 }
638
639
571 640
572 641
573 int64_t DatabaseWrapper::GetTableRecordCount(const std::string& table) 642 int64_t DatabaseWrapper::GetTableRecordCount(const std::string& table)
574 { 643 {
575 char buf[128]; 644 char buf[128];