diff --git a/web/database/queries/db-queries.js b/web/database/queries/db-queries.js index ddf6c9b80..fb1ae3a07 100644 --- a/web/database/queries/db-queries.js +++ b/web/database/queries/db-queries.js @@ -1,33 +1,38 @@ // @flow import type { SqliteDatabase } from 'sql.js'; function getSQLiteDBVersion(db: SqliteDatabase): number { const versionData = db.exec('PRAGMA user_version;'); if (!versionData.length || !versionData[0].values.length) { throw new Error('Error while retrieving database version: empty result'); } const [dbVersion] = versionData[0].values[0]; if (typeof dbVersion !== 'number') { throw new Error( 'Error while retrieving database version: invalid type returned', ); } return dbVersion; } function setupSQLiteDB(db: SqliteDatabase) { db.exec(` CREATE TABLE IF NOT EXISTS drafts ( key TEXT UNIQUE PRIMARY KEY NOT NULL, text TEXT NOT NULL ); CREATE TABLE IF NOT EXISTS metadata ( name TEXT UNIQUE PRIMARY KEY NOT NULL, data TEXT NOT NULL ); + + CREATE TABLE IF NOT EXISTS persist_storage ( + key TEXT UNIQUE PRIMARY KEY NOT NULL, + item TEXT NOT NULL + ); `); } export { getSQLiteDBVersion, setupSQLiteDB }; diff --git a/web/database/queries/storage-engine-queries.js b/web/database/queries/storage-engine-queries.js new file mode 100644 index 000000000..6e3daec83 --- /dev/null +++ b/web/database/queries/storage-engine-queries.js @@ -0,0 +1,60 @@ +// @flow + +import { SqliteDatabase } from 'sql.js'; + +import { parseMultiStatementSQLiteResult } from '../utils/db-utils.js'; + +type Entry = { + key: string, + item: string, +}; + +function setPersistStorageItem(db: SqliteDatabase, key: string, item: string) { + const query = ` + INSERT OR REPLACE INTO persist_storage (key, item) + VALUES ($key, $item) + `; + const params = { + $key: key, + $item: item, + }; + + db.exec(query, params); +} + +function getPersistStorageItem(db: SqliteDatabase, key: string): string { + const query = ` + SELECT * + FROM persist_storage + WHERE key = $key + `; + const params = { + $key: key, + }; + + const rawResult = db.exec(query, params); + const result = parseMultiStatementSQLiteResult(rawResult); + if (result.length === 0 || result[0].length === 0) { + return ''; + } + const [entry] = result[0]; + return entry.item; +} + +function removePersistStorageItem(db: SqliteDatabase, key: string) { + const query = ` + DELETE FROM persist_storage + WHERE key = $key + `; + const params = { + $key: key, + }; + + db.exec(query, params); +} + +export { + setPersistStorageItem, + getPersistStorageItem, + removePersistStorageItem, +};