Bläddra i källkod

Added new column SOPInstanceUID in images table

Marco Nolden 14 år sedan
förälder
incheckning
d20ecbd93c

+ 2 - 1
Libs/DICOM/Core/Resources/dicom-schema.sql

@@ -13,10 +13,11 @@ DROP TABLE IF EXISTS 'Studies' ;
 DROP TABLE IF EXISTS 'Directories' ;
 
 CREATE TABLE 'Images' (
+  'SOPInstanceUID' VARCHAR(64) NOT NULL,
   'Filename' VARCHAR(1024) NOT NULL ,
   'SeriesInstanceUID' VARCHAR(64) NOT NULL ,
   'InsertTimestamp' VARCHAR(20) NOT NULL ,
-  PRIMARY KEY ('Filename') );
+  PRIMARY KEY ('SOPInstanceUID') );
 CREATE TABLE 'Patients' (
   'UID' INTEGER PRIMARY KEY AUTOINCREMENT,
   'PatientsName' VARCHAR(255) NULL ,

+ 1 - 1
Libs/DICOM/Core/Testing/Cpp/ctkDICOMModelTest1.cpp

@@ -49,7 +49,7 @@ int ctkDICOMModelTest1( int argc, char * argv [] )
   qDebug() << "titi: " << titi.seek(0) << myCTK.lastError();
   QSqlQuery tata("SELECT SeriesInstanceUID as UID, BodyPartExamined as Scan, SeriesDate as Date, AcquisitionNumber as Number FROM Series WHERE StudyInstanceUID='1.2.826.0.1.3680043.2.1125.1.73379483469717886505187028001198162'", myCTK.database());
   qDebug() << "tata: " << tata.seek(0) << myCTK.lastError();
-  QSqlQuery tutu("SELECT Filename as UID, Filename as Name, SeriesInstanceUID as Date FROM Images WHERE SeriesInstanceUID='%1'", myCTK.database());
+  QSqlQuery tutu("SELECT SOPInstanceUID as UID, Filename as Name, SeriesInstanceUID as Date FROM Images WHERE SeriesInstanceUID='%1'", myCTK.database());
   qDebug() << "tutu: " << tutu.seek(0) << myCTK.lastError();
   */
 

+ 7 - 5
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -249,7 +249,7 @@ void ctkDICOMDatabase::insert ( DcmDataset *dataset, QString filename ) {
   OFString seriesInstanceUID, seriesDate, seriesTime,
     seriesDescription, bodyPartExamined, frameOfReferenceUID,
     contrastAgent, scanningSequence;
-  OFString instanceNumber;
+  OFString instanceNumber, sopInstanceUID ;
 
   Sint32 seriesNumber = 0, acquisitionNumber = 0, echoNumber = 0, temporalPosition = 0;
 
@@ -258,6 +258,7 @@ void ctkDICOMDatabase::insert ( DcmDataset *dataset, QString filename ) {
   dataset->findAndGetOFString(DCM_StudyInstanceUID, studyInstanceUID);
   dataset->findAndGetOFString(DCM_SeriesInstanceUID, seriesInstanceUID);
   dataset->findAndGetOFString(DCM_PatientID, patientID);
+  dataset->findAndGetOFString(DCM_SOPInstanceUID, sopInstanceUID);
 
   dataset->findAndGetOFString(DCM_PatientsBirthDate, patientsBirthDate);
   dataset->findAndGetOFString(DCM_PatientsBirthTime, patientsBirthTime);
@@ -384,10 +385,11 @@ void ctkDICOMDatabase::insert ( DcmDataset *dataset, QString filename ) {
     if(!check_exists_query.next())
       {
       QSqlQuery statement ( d->Database );
-      statement.prepare ( "INSERT INTO Images ( 'Filename', 'SeriesInstanceUID', 'InsertTimestamp' ) VALUES ( ?, ?, ? )" );
-      statement.bindValue ( 0, filename );
-      statement.bindValue ( 1, QString ( seriesInstanceUID.c_str() ) );
-      statement.bindValue ( 2, QDateTime::currentDateTime() );
+      statement.prepare ( "INSERT INTO Images ( 'SOPInstanceUID', 'Filename', 'SeriesInstanceUID', 'InsertTimestamp' ) VALUES ( ?, ?, ?, ? )" );
+      statement.bindValue ( 0, QString ( sopInstanceUID.c_str() ) );
+      statement.bindValue ( 1, filename );
+      statement.bindValue ( 2, QString ( seriesInstanceUID.c_str() ) );
+      statement.bindValue ( 3, QDateTime::currentDateTime() );
       statement.exec();
       }
     }

+ 2 - 2
Libs/DICOM/Core/ctkDICOMIndexer.cpp

@@ -420,7 +420,7 @@ void ctkDICOMIndexer::addDirectory(ctkDICOMDatabase& database, const QString& di
     QSqlQuery check_exists_query(database.database());
     std::stringstream check_exists_query_string;
 //    check_exists_query_string << "SELECT * FROM Images WHERE Filename = '" << relativeFilePath.str() << "'";
-    check_exists_query_string << "SELECT * FROM Images WHERE Filename = '" << filename << "'";
+    check_exists_query_string << "SELECT * FROM Images WHERE SOPInstanceUID = '" << sopInstanceUID << "'";
     check_exists_query.exec(check_exists_query_string.str().c_str());
 
     if(!check_exists_query.next())
@@ -429,7 +429,7 @@ void ctkDICOMIndexer::addDirectory(ctkDICOMDatabase& database, const QString& di
 
       //To save absolute path: destDirectoryPath.str()
       query_string << "INSERT INTO Images VALUES('"
-        << qfilename.toStdString() << "','" << seriesInstanceUID << "','" << QDateTime::currentDateTime().toString(Qt::ISODate).toStdString() << "')";
+        << sopInstanceUID << "','" << qfilename.toStdString() << "','" << seriesInstanceUID << "','" << QDateTime::currentDateTime().toString(Qt::ISODate).toStdString() << "')";
 
       query.exec(query_string.str().c_str());
     }

+ 1 - 1
Libs/DICOM/Core/ctkDICOMModel.cpp

@@ -316,7 +316,7 @@ void ctkDICOMModelPrivate::updateQueries(Node* node)const
       break;
     case ctkDICOMModelPrivate::SeriesType:
       //query = QString("SELECT Filename as UID, Filename as Name, SeriesInstanceUID as Date FROM Images WHERE SeriesInstanceUID='%1'").arg(node->UID);
-      query = this->generateQuery("Filename as UID, Filename as Name, SeriesInstanceUID as Date", "Images", QString("SeriesInstanceUID='%1'").arg(node->UID));
+      query = this->generateQuery("SOPInstanceUID as UID, Filename as Name, SeriesInstanceUID as Date", "Images", QString("SeriesInstanceUID='%1'").arg(node->UID));
       logger.debug ( "ctkDICOMModelPrivate::updateQueries for Series: query is: " + query );
       break;
     case ctkDICOMModelPrivate::ImageType: