From f8164f84a26541196987f25655dcd3f32318d653 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Fri, 12 Jul 2019 18:29:39 +0200 Subject: [PATCH 1/3] MediaLibrary: Pass the database model to the tables setup functions --- src/MediaLibrary.cpp | 13 ++++++------- src/MediaLibrary.h | 4 ++-- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/MediaLibrary.cpp b/src/MediaLibrary.cpp index 7aa7a1c2..84ab8320 100644 --- a/src/MediaLibrary.cpp +++ b/src/MediaLibrary.cpp @@ -139,9 +139,8 @@ MediaLibrary::~MediaLibrary() m_parser->stop(); } -void MediaLibrary::createAllTables() +void MediaLibrary::createAllTables( uint32_t dbModelVersion ) { - auto dbModelVersion = m_settings.dbModelVersion(); // We need to create the tables in order of triggers creation // Device is the "root of all evil". When a device is modified, // we will trigger an update on folder, which will trigger @@ -177,9 +176,8 @@ void MediaLibrary::createAllTables() Bookmark::createTable( m_dbConnection.get() ); } -void MediaLibrary::createAllTriggers() +void MediaLibrary::createAllTriggers(uint32_t dbModelVersion) { - auto dbModelVersion = m_settings.dbModelVersion(); Folder::createTriggers( m_dbConnection.get(), dbModelVersion ); Album::createTriggers( m_dbConnection.get() ); AlbumTrack::createTriggers( m_dbConnection.get() ); @@ -352,8 +350,9 @@ InitializeResult MediaLibrary::initialize( const std::string& dbPath, LOG_ERROR( "Failed to load settings" ); return InitializeResult::Failed; } - createAllTables(); - createAllTriggers(); + auto dbModel = m_settings.dbModelVersion(); + createAllTables( dbModel ); + createAllTriggers( dbModel ); t->commit(); if ( m_settings.dbModelVersion() != Settings::DbModelVersion ) @@ -1028,7 +1027,7 @@ bool MediaLibrary::recreateDatabase( const std::string& dbPath ) unlink( dbPath.c_str() ); m_dbConnection = sqlite::Connection::connect( dbPath ); Settings::createTable( m_dbConnection.get() ); - createAllTables(); + createAllTables( Settings::DbModelVersion ); // We dropped the database, there is no setting to be read anymore return m_settings.load(); } diff --git a/src/MediaLibrary.h b/src/MediaLibrary.h index 2fd3f7d8..7577755b 100644 --- a/src/MediaLibrary.h +++ b/src/MediaLibrary.h @@ -223,8 +223,8 @@ private: void migrateModel15to16(); void migrateModel16to17( uint32_t originalPreviousVersion ); void migrateModel17to18(uint32_t originalPreviousVersion); - void createAllTables(); - void createAllTriggers(); + void createAllTables( uint32_t dbModelVersion ); + void createAllTriggers( uint32_t dbModelVersion ); void registerEntityHooks(); static bool validateSearchPattern( const std::string& pattern ); bool createThumbnailFolder( const std::string& thumbnailPath ) const; -- GitLab From a375d82823283fceea24835e781669741cb469e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Fri, 12 Jul 2019 18:30:47 +0200 Subject: [PATCH 2/3] MediaLibrary: Fix missing trigger recreation --- src/MediaLibrary.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MediaLibrary.cpp b/src/MediaLibrary.cpp index 84ab8320..b5257e5c 100644 --- a/src/MediaLibrary.cpp +++ b/src/MediaLibrary.cpp @@ -1028,6 +1028,7 @@ bool MediaLibrary::recreateDatabase( const std::string& dbPath ) m_dbConnection = sqlite::Connection::connect( dbPath ); Settings::createTable( m_dbConnection.get() ); createAllTables( Settings::DbModelVersion ); + createAllTriggers( Settings::DbModelVersion ); // We dropped the database, there is no setting to be read anymore return m_settings.load(); } -- GitLab From caf62ed20be7c5a6344699c6d5053d4834146917 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hugo=20Beauz=C3=A9e-Luyssen?= Date: Fri, 12 Jul 2019 18:33:50 +0200 Subject: [PATCH 3/3] MediaLibrary: Don't try to create the tables when the model didn't change This should make the startup a bit faster when the database is already setup --- src/MediaLibrary.cpp | 22 +++++++++++++--------- src/Settings.cpp | 2 +- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/src/MediaLibrary.cpp b/src/MediaLibrary.cpp index b5257e5c..b14a99d2 100644 --- a/src/MediaLibrary.cpp +++ b/src/MediaLibrary.cpp @@ -351,17 +351,21 @@ InitializeResult MediaLibrary::initialize( const std::string& dbPath, return InitializeResult::Failed; } auto dbModel = m_settings.dbModelVersion(); - createAllTables( dbModel ); - createAllTriggers( dbModel ); - t->commit(); - - if ( m_settings.dbModelVersion() != Settings::DbModelVersion ) + if ( dbModel != Settings::DbModelVersion ) { - res = updateDatabaseModel( m_settings.dbModelVersion(), dbPath ); - if ( res == InitializeResult::Failed ) + if ( dbModel == 0 ) + dbModel = Settings::DbModelVersion; + createAllTables( dbModel ); + createAllTriggers( dbModel ); + t->commit(); + if ( dbModel != Settings::DbModelVersion ) { - LOG_ERROR( "Failed to update database model" ); - return res; + res = updateDatabaseModel( dbModel, dbPath ); + if ( res == InitializeResult::Failed ) + { + LOG_ERROR( "Failed to update database model" ); + return res; + } } } } diff --git a/src/Settings.cpp b/src/Settings.cpp index 1137eae5..d609818a 100644 --- a/src/Settings.cpp +++ b/src/Settings.cpp @@ -50,7 +50,7 @@ bool Settings::load() { if ( sqlite::Tools::executeInsert( m_ml->getConn(), "INSERT INTO Settings VALUES(?)", DbModelVersion ) == false ) return false; - m_dbModelVersion = DbModelVersion; + m_dbModelVersion = 0; } else { -- GitLab