示例#1
0
文件: SqlStorage.cpp 项目: KDAB/Charm
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;
}
示例#2
0
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;
}