Browse Source

New method to update schema and re-insert data

Marco Nolden 13 years ago
parent
commit
cbd4657d07
2 changed files with 27 additions and 1 deletions
  1. 23 0
      Libs/DICOM/Core/ctkDICOMDatabase.cpp
  2. 4 1
      Libs/DICOM/Core/ctkDICOMDatabase.h

+ 23 - 0
Libs/DICOM/Core/ctkDICOMDatabase.cpp

@@ -352,6 +352,29 @@ bool ctkDICOMDatabase::initializeDatabase(const char* sqlFileName)
 }
 
 //------------------------------------------------------------------------------
+bool ctkDICOMDatabase::updateSchema(const char* schemaFile)
+{
+  // backup filelist
+  // reinit with the new schema
+  // reinsert everything
+ 
+  Q_D(ctkDICOMDatabase);
+  d->createBackupFileList();
+ 
+  this->initializeDatabase(schemaFile);
+
+  QStringList allFiles = d->filenames("Filenames_backup");
+  foreach(QString file, allFiles)
+  {
+    // TODO: use QFuture
+    this->insert(file,false,false,true);
+  }
+  return true;
+
+}
+
+
+//------------------------------------------------------------------------------
 void ctkDICOMDatabase::closeDatabase()
 {
   Q_D(ctkDICOMDatabase);

+ 4 - 1
Libs/DICOM/Core/ctkDICOMDatabase.h

@@ -110,6 +110,9 @@ public:
   /// delete all data and (re-)initialize the database.
   Q_INVOKABLE bool initializeDatabase(const char* schemaFile = ":/dicom/dicom-schema.sql");
 
+  /// updates the database schema and reinserts all existing files
+  Q_INVOKABLE bool updateSchema(const char* schemaFile = ":/dicom/dicom-schema.sql");
+
   ///
   /// \brief database accessors
   Q_INVOKABLE QStringList patients ();
@@ -148,7 +151,7 @@ public:
   Q_INVOKABLE void insert( const ctkDICOMDataset& ctkDataset, bool storeFile, bool generateThumbnail);
   void insert ( DcmDataset *dataset, bool storeFile = true, bool generateThumbnail = true);
   Q_INVOKABLE void insert ( const QString& filePath, bool storeFile = true, bool generateThumbnail = true, bool createHierarchy = true, const QString& destinationDirectoryName = QString() );
-  
+
   /// Check if file is already in database and up-to-date
   bool fileExistsAndUpToDate(const QString& filePath);