void IDBObjectStoreBackendImpl::deleteInternal(ScriptExecutionContext*, PassRefPtr<IDBObjectStoreBackendImpl> objectStore, PassRefPtr<IDBKey> key, PassRefPtr<IDBCallbacks> callbacks) { SQLiteStatement idQuery(objectStore->sqliteDatabase(), "SELECT id FROM ObjectStoreData " + whereClause(key.get())); bool ok = idQuery.prepare() == SQLResultOk; ASSERT_UNUSED(ok, ok); // FIXME: Better error handling? bindWhereClause(idQuery, objectStore->id(), key.get()); if (idQuery.step() != SQLResultRow) { callbacks->onError(IDBDatabaseError::create(IDBDatabaseException::NOT_FOUND_ERR, "Key does not exist in the object store.")); return; } int64_t id = idQuery.getColumnInt64(0); SQLiteStatement osQuery(objectStore->sqliteDatabase(), "DELETE FROM ObjectStoreData WHERE id = ?"); ok = osQuery.prepare() == SQLResultOk; ASSERT_UNUSED(ok, ok); // FIXME: Better error handling? osQuery.bindInt64(1, id); ok = osQuery.step() == SQLResultDone; ASSERT_UNUSED(ok, ok); SQLiteStatement indexQuery(objectStore->sqliteDatabase(), "DELETE FROM IndexData WHERE objectStoreDataId = ?"); ok = indexQuery.prepare() == SQLResultOk; ASSERT_UNUSED(ok, ok); // FIXME: Better error handling? indexQuery.bindInt64(1, id); ok = indexQuery.step() == SQLResultDone; ASSERT_UNUSED(ok, ok); callbacks->onSuccess(); }
void IDBObjectStoreBackendImpl::loadIndexes() { SQLiteStatement indexQuery(sqliteDatabase(), "SELECT id, name, keyPath, isUnique FROM Indexes WHERE objectStoreId = ?"); bool ok = indexQuery.prepare() == SQLResultOk; ASSERT_UNUSED(ok, ok); // FIXME: Better error handling? indexQuery.bindInt64(1, m_id); while (indexQuery.step() == SQLResultRow) { int64_t id = indexQuery.getColumnInt64(0); String name = indexQuery.getColumnText(1); String keyPath = indexQuery.getColumnText(2); bool unique = !!indexQuery.getColumnInt(3); m_indexes.set(name, IDBIndexBackendImpl::create(this, id, name, keyPath, unique)); } }