Skip to content
  • Antonio Larrosa Jimenez's avatar
    Fallback to using the QSQLITE3 driver if QMYSQL can't be used · 8240e111
    Antonio Larrosa Jimenez authored and Antonio Larrosa Jimenez's avatar Antonio Larrosa Jimenez committed
    On SUSE Linux Enterprise Desktop (SLED) with the PackageHub repository
    enabled (which provides the KDE packages) the mysql package is not available,
    so there's no mysqld, and the QMYSQL driver can't be used.
    
    OTOH, SUSE Linux Enterprise Server (SLES) with the same PackageHub repository
    enabled has a mariadb package available which provides the mysqld binary.
    
    Since the akonadi-server package for SLES and SLED is the same, we can't
    just set DATABASE_BACKEND to SQLITE at buildtime and we need to choose
    a fallback at runtime, which is what this commit implements.
    
    If it's the first time akonadi starts and mysql is expected to be used, this
    commit checks if it's really usable, and if it's not, it checks if the QSQLITE3 driver
    is available and if it is, we fall back to it instead of using mysql.
    
    Since we need to find out if a DbConfig* object can be initialized before
    it's actually initialized, I added a bool storeSettings parameter to
    DbConfig::init(QSettings &) that can be used to try the initialization
    (find out available paths, etc.) without storing anything.
    
    Then I added two methods DbConfigMysql::areRequirementsAvailable and
    DbConfigSqlite::areRequirementsAvailable that check if the given object
    has the system requirements available. I didn't add it to
    DbConfigPostgresql because Postgresql isn't used by default in any case.
    
    Also, note that this check is only done the first time akonadi starts
    when it's not configured. Once it starts with mysql or sqlite3 this
    configuration is stored and used the next times without any further
    check.
    8240e111