void GeolocationPositionCache::writeToDatabaseImpl() { SQLiteDatabase database; { MutexLocker lock(m_databaseFileMutex); if (!database.open(m_databaseFile)) return; } RefPtr<Geoposition> cachedPosition; { MutexLocker lock(m_cachedPositionMutex); if (m_cachedPosition) cachedPosition = m_cachedPosition->threadSafeCopy(); } SQLiteTransaction transaction(database); if (!database.executeCommand("DELETE FROM CachedPosition")) return; SQLiteStatement statement(database, "INSERT INTO CachedPosition (" "latitude, " "longitude, " "altitude, " "accuracy, " "altitudeAccuracy, " "heading, " "speed, " "timestamp) " "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); if (statement.prepare() != SQLResultOk) return; statement.bindDouble(1, cachedPosition->coords()->latitude()); statement.bindDouble(2, cachedPosition->coords()->longitude()); if (cachedPosition->coords()->canProvideAltitude()) statement.bindDouble(3, cachedPosition->coords()->altitude()); else statement.bindNull(3); statement.bindDouble(4, cachedPosition->coords()->accuracy()); if (cachedPosition->coords()->canProvideAltitudeAccuracy()) statement.bindDouble(5, cachedPosition->coords()->altitudeAccuracy()); else statement.bindNull(5); if (cachedPosition->coords()->canProvideHeading()) statement.bindDouble(6, cachedPosition->coords()->heading()); else statement.bindNull(6); if (cachedPosition->coords()->canProvideSpeed()) statement.bindDouble(7, cachedPosition->coords()->speed()); else statement.bindNull(7); statement.bindInt64(8, cachedPosition->timestamp()); if (!statement.executeCommand()) return; transaction.commit(); }
void GeolocationPermissions::maybeLoadPermanentPermissions() { if (s_permanentPermissionsLoaded) return; s_permanentPermissionsLoaded = true; SQLiteDatabase database; if (!database.open(s_databasePath + databaseName)) return; // Create the table here, such that even if we've just created the DB, the // commands below should succeed. if (!database.executeCommand("CREATE TABLE IF NOT EXISTS Permissions (origin TEXT UNIQUE NOT NULL, allow INTEGER NOT NULL)")) { database.close(); return; } SQLiteStatement statement(database, "SELECT * FROM Permissions"); if (statement.prepare() != SQLResultOk) { database.close(); return; } ASSERT(s_permanentPermissions.size() == 0); while (statement.step() == SQLResultRow) s_permanentPermissions.set(statement.getColumnText(0), statement.getColumnInt64(1)); database.close(); }
void NotificationPresenterImpl::maybeStorePermanentPermissions() { // If the permanent permissions haven't been modified, there's no need to // save them to the DB. (If we haven't even loaded them, writing them now // would overwrite the stored permissions with the empty set.) SQLiteDatabase database; if (!openDatabase(&database)) return; SQLiteTransaction transaction(database); // The number of entries should be small enough that it's not worth trying // to perform a diff. Simply clear the table and repopulate it. if (!database.executeCommand("DELETE FROM NotifyPermissions")) { database.close(); return; } PermissionsMap::const_iterator end = s_notificationPermissions.end(); for (PermissionsMap::const_iterator iter = s_notificationPermissions.begin(); iter != end; ++iter) { SQLiteStatement statement(database, "INSERT INTO NotifyPermissions (origin, allow) VALUES (?, ?)"); if (statement.prepare() != SQLResultOk) continue; statement.bindText(1, iter->first); statement.bindInt64(2, iter->second); statement.executeCommand(); } transaction.commit(); database.close(); }
void NotificationPresenterImpl::maybeLoadPermanentPermissions() { SQLiteDatabase database; if (!openDatabase(&database)) return; LOGV("NotificationPresenterImpl::maybeLoadPermanentPermissions"); // Create the table here, such that even if we've just created the DB, the // commands below should succeed. if (!database.executeCommand("CREATE TABLE IF NOT EXISTS NotifyPermissions (origin TEXT UNIQUE NOT NULL, allow INTEGER NOT NULL)")) { LOGV("NotificationPresenterImpl::maybeLoadPermanentPermissions inside fail create table"); database.close(); return; } SQLiteStatement statement(database, "SELECT * FROM NotifyPermissions"); if (statement.prepare() != SQLResultOk) { database.close(); return; } ASSERT(s_notificationPermissions.size() == 0); while (statement.step() == SQLResultRow) s_notificationPermissions.set(statement.getColumnText(0), statement.getColumnInt64(1)); database.close(); }
static bool runCommands(SQLiteDatabase& sqliteDatabase, const char** commands, size_t numberOfCommands) { SQLiteTransaction transaction(sqliteDatabase, false); transaction.begin(); for (size_t i = 0; i < numberOfCommands; ++i) { if (!sqliteDatabase.executeCommand(commands[i])) { LOG_ERROR("Failed to run the following command for IndexedDB: %s", commands[i]); return false; } } transaction.commit(); return true; }
void GeolocationPositionCache::writeToDB(const Geoposition* position) { ASSERT(position); SQLiteDatabase database; if (!s_databaseFile || !database.open(*s_databaseFile)) return; SQLiteTransaction transaction(database); if (!database.executeCommand("DELETE FROM CachedPosition")) return; SQLiteStatement statement(database, "INSERT INTO CachedPosition (" "latitude, " "longitude, " "altitude, " "accuracy, " "altitudeAccuracy, " "heading, " "speed, " "timestamp) " "VALUES (?, ?, ?, ?, ?, ?, ?, ?)"); if (statement.prepare() != SQLResultOk) return; statement.bindDouble(1, position->coords()->latitude()); statement.bindDouble(2, position->coords()->longitude()); if (position->coords()->canProvideAltitude()) statement.bindDouble(3, position->coords()->altitude()); else statement.bindNull(3); statement.bindDouble(4, position->coords()->accuracy()); if (position->coords()->canProvideAltitudeAccuracy()) statement.bindDouble(5, position->coords()->altitudeAccuracy()); else statement.bindNull(5); if (position->coords()->canProvideHeading()) statement.bindDouble(6, position->coords()->heading()); else statement.bindNull(6); if (position->coords()->canProvideSpeed()) statement.bindDouble(7, position->coords()->speed()); else statement.bindNull(7); statement.bindInt64(8, position->timestamp()); if (!statement.executeCommand()) return; transaction.commit(); }
void GeolocationPositionCache::readFromDatabaseImpl() { SQLiteDatabase database; { MutexLocker lock(m_databaseFileMutex); if (!database.open(m_databaseFile)) return; } // Create the table here, such that even if we've just created the // DB, the commands below should succeed. if (!database.executeCommand("CREATE TABLE IF NOT EXISTS CachedPosition (" "latitude REAL NOT NULL, " "longitude REAL NOT NULL, " "altitude REAL, " "accuracy REAL NOT NULL, " "altitudeAccuracy REAL, " "heading REAL, " "speed REAL, " "timestamp INTEGER NOT NULL)")) return; SQLiteStatement statement(database, "SELECT * FROM CachedPosition"); if (statement.prepare() != SQLResultOk) return; if (statement.step() != SQLResultRow) return; bool providesAltitude = statement.getColumnValue(2).type() != SQLValue::NullValue; bool providesAltitudeAccuracy = statement.getColumnValue(4).type() != SQLValue::NullValue; bool providesHeading = statement.getColumnValue(5).type() != SQLValue::NullValue; bool providesSpeed = statement.getColumnValue(6).type() != SQLValue::NullValue; RefPtr<Coordinates> coordinates = Coordinates::create(statement.getColumnDouble(0), // latitude statement.getColumnDouble(1), // longitude providesAltitude, statement.getColumnDouble(2), // altitude statement.getColumnDouble(3), // accuracy providesAltitudeAccuracy, statement.getColumnDouble(4), // altitudeAccuracy providesHeading, statement.getColumnDouble(5), // heading providesSpeed, statement.getColumnDouble(6)); // speed DOMTimeStamp timestamp = statement.getColumnInt64(7); // timestamp // A position may have been set since we called triggerReadFromDatabase(). MutexLocker lock(m_cachedPositionMutex); if (m_cachedPosition) return; m_cachedPosition = Geoposition::create(coordinates.release(), timestamp); }
void NotificationPresenterImpl::deleteDatabase() { LOGV("NotificationPresenterImpl::clearAll"); SQLiteDatabase database; if (!openDatabase(&database)) return; SQLiteTransaction transaction(database); if (!database.executeCommand("DELETE FROM NotifyPermissions")) { database.close(); return; } transaction.commit(); database.close(); }
PassRefPtr<Geoposition> GeolocationPositionCache::readFromDB() { SQLiteDatabase database; if (!s_databaseFile || !database.open(*s_databaseFile)) return 0; // Create the table here, such that even if we've just created the // DB, the commands below should succeed. if (!database.executeCommand("CREATE TABLE IF NOT EXISTS CachedPosition (" "latitude REAL NOT NULL, " "longitude REAL NOT NULL, " "altitude REAL, " "accuracy REAL NOT NULL, " "altitudeAccuracy REAL, " "heading REAL, " "speed REAL, " "timestamp INTEGER NOT NULL)")) return 0; SQLiteStatement statement(database, "SELECT * FROM CachedPosition"); if (statement.prepare() != SQLResultOk) return 0; if (statement.step() != SQLResultRow) return 0; bool providesAltitude = statement.getColumnValue(2).type() != SQLValue::NullValue; bool providesAltitudeAccuracy = statement.getColumnValue(4).type() != SQLValue::NullValue; bool providesHeading = statement.getColumnValue(5).type() != SQLValue::NullValue; bool providesSpeed = statement.getColumnValue(6).type() != SQLValue::NullValue; RefPtr<Coordinates> coordinates = Coordinates::create(statement.getColumnDouble(0), // latitude statement.getColumnDouble(1), // longitude providesAltitude, statement.getColumnDouble(2), // altitude statement.getColumnDouble(3), // accuracy providesAltitudeAccuracy, statement.getColumnDouble(4), // altitudeAccuracy providesHeading, statement.getColumnDouble(5), // heading providesSpeed, statement.getColumnDouble(6)); // speed return Geoposition::create(coordinates.release(), statement.getColumnInt64(7)); // timestamp }