bool SqlStorage::verifyDatabase() { // if the database is empty, it is not ok :-) if( database().tables().isEmpty() ) return false; // check database metadata, throw an exception in case the version does not match: int version = 1; QString versionString = getMetaData(CHARM_DATABASE_VERSION_DESCRIPTOR); if (versionString != QString::null ) { int value; bool ok; value = versionString.toInt( &ok ); if (ok) { version = value; } } if ( version == CHARM_DATABASE_VERSION ) return true; if( version > CHARM_DATABASE_VERSION ) throw UnsupportedDatabaseVersionException( QObject::tr( "Database version is too new." ) ); if ( version == CHARM_DATABASE_VERSION_BEFORE_TRACKABLE ) { return migrateDB( QStringLiteral("ALTER TABLE Tasks ADD trackable INTEGER"), CHARM_DATABASE_VERSION_BEFORE_TRACKABLE ); } else if ( version == CHARM_DATABASE_VERSION_BEFORE_COMMENT ) { return migrateDB( QStringLiteral("ALTER TABLE Tasks ADD comment varchar(256)"), CHARM_DATABASE_VERSION_BEFORE_COMMENT ); } throw UnsupportedDatabaseVersionException( QObject::tr( "Database version is not supported." ) ); return true; }
bool SqlStorage::verifyDatabase() { // if the database is empty, it is not ok :-) if( database().tables().isEmpty() ) return false; // check database metadata, throw an exception in case the version does not match: int version = 1; QString versionString = getMetaData(CHARM_DATABASE_VERSION_DESCRIPTOR); if (versionString != QString::null ) { int value; bool ok; value = versionString.toInt( &ok ); if( ok) { version = value; } } if ( version == CHARM_DATABASE_VERSION ) return true; if( version > CHARM_DATABASE_VERSION ) throw UnsupportedDatabaseVersionException( QObject::tr( "Database version is too new." ) ); if ( version == CHARM_DATABASE_VERSION_BEFORE_TRACKABLE ) { SqlRaiiTransactor transactor( database() ); QSqlQuery query( database() ); query.prepare( QLatin1String("ALTER TABLE Tasks ADD trackable INTEGER") ); if ( !runQuery( query ) ) throw UnsupportedDatabaseVersionException( QObject::tr("Could not upgrade database from version %1 to version %2: %3").arg( QString::number( CHARM_DATABASE_VERSION_BEFORE_TRACKABLE ), QString::number( CHARM_DATABASE_VERSION ), query.lastError().text() ) ); version = CHARM_DATABASE_VERSION; setMetaData( CHARM_DATABASE_VERSION_DESCRIPTOR, QString::number ( version ), transactor ); transactor.commit(); return true; } throw UnsupportedDatabaseVersionException( QObject::tr( "Database version is not supported." ) ); return true; }