inline static int open (ckdb::Plugin * handle, ckdb::Key * errorKey, Builder builder = defaultBuilder) { kdb::KeySet config (elektraPluginGetConfig (handle)); int ret = openHelper (handle, config, errorKey, builder); config.release (); return ret; }
bool SqlDatabase::openOrCreateReadWrite( const QString& filename ) { if( isOpen() ) { return true; } if( !openHelper(filename, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE) ) { return false; } if( !checkDb() ) { qDebug() << "Consistency check failed, removing broken db" << filename; close(); QFile::remove(filename); return openHelper(filename, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); } return true; }
bool SqlDatabase::openOrCreateReadWrite(const QString &filename) { if (isOpen()) { return true; } if (!openHelper(filename, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE)) { return false; } auto checkResult = checkDb(); if (checkResult != CheckDbResult::Ok) { if (checkResult == CheckDbResult::CantPrepare) { // When disk space is low, preparing may fail even though the db is fine. // Typically CANTOPEN or IOERR. qint64 freeSpace = Utility::freeDiskSpace(QFileInfo(filename).dir().absolutePath()); if (freeSpace != -1 && freeSpace < 1000000) { qCWarning(lcSql) << "Can't prepare consistency check and disk space is low:" << freeSpace; close(); return false; } // Even when there's enough disk space, it might very well be that the // file is on a read-only filesystem and can't be opened because of that. if (_errId == SQLITE_CANTOPEN) { qCWarning(lcSql) << "Can't open db to prepare consistency check, aborting"; close(); return false; } } qCCritical(lcSql) << "Consistency check failed, removing broken db" << filename; close(); QFile::remove(filename); return openHelper(filename, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE); } return true; }
bool SqlDatabase::openReadOnly( const QString& filename ) { if( isOpen() ) { return true; } if( !openHelper(filename, SQLITE_OPEN_READONLY) ) { return false; } if( !checkDb() ) { qDebug() << "Consistency check failed in readonly mode, giving up" << filename; close(); return false; } return true; }