@metamask/kernel-store
Version:
Ocap Kernel storage abstractions and implementations
85 lines • 2.22 kB
JavaScript
export const SQL_QUERIES = {
CREATE_TABLE: `
CREATE TABLE IF NOT EXISTS kv (
key TEXT,
value TEXT,
PRIMARY KEY(key)
)
`,
CREATE_TABLE_VS: `
CREATE TABLE IF NOT EXISTS kv_vatstore (
vatID TEXT,
key TEXT,
value TEXT,
PRIMARY KEY(vatID, key)
)
`,
GET: `
SELECT value
FROM kv
WHERE key = ?
`,
GET_NEXT: `
SELECT key
FROM kv
WHERE key > ?
LIMIT 1
`,
GET_ALL_VS: `
SELECT key, value
FROM kv_vatstore
WHERE vatID = ?
`,
SET: `
INSERT INTO kv (key, value)
VALUES (?, ?)
ON CONFLICT DO UPDATE SET value = excluded.value
`,
SET_VS: `
INSERT INTO kv_vatstore (vatID, key, value)
VALUES (?, ?, ?)
ON CONFLICT DO UPDATE SET value = excluded.value
`,
DELETE: `
DELETE FROM kv
WHERE key = ?
`,
DELETE_VS: `
DELETE FROM kv_vatstore
WHERE vatID = ? AND key = ?
`,
DELETE_VS_ALL: `
DELETE FROM kv_vatstore
WHERE vatID = ?
`,
CLEAR: `DELETE FROM kv`,
CLEAR_VS: `DELETE FROM kv_vatstore`,
DROP: `DROP TABLE kv`,
DROP_VS: `DROP TABLE kv_vatstore`,
BEGIN_TRANSACTION: `BEGIN TRANSACTION`,
BEGIN_IMMEDIATE_TRANSACTION: `BEGIN IMMEDIATE TRANSACTION`,
COMMIT_TRANSACTION: `COMMIT TRANSACTION`,
ABORT_TRANSACTION: `ROLLBACK TRANSACTION`,
// SQLite's parameter markers (?, ?NNN, :name, @name, $name) can only be used
// in places where a literal value is allowed. We can't bind identifiers
// for table names, column names, or savepoint names. We use %NAME% as a
// placeholder for the savepoint name.
CREATE_SAVEPOINT: `SAVEPOINT %NAME%`,
ROLLBACK_SAVEPOINT: `ROLLBACK TO SAVEPOINT %NAME%`,
RELEASE_SAVEPOINT: `RELEASE SAVEPOINT %NAME%`,
};
/**
* The default filename for the SQLite database; ":memory:" is an ephemeral in-memory database.
*/
export const DEFAULT_DB_FILENAME = ':memory:';
/**
* Check if a string is a valid SQLite identifier.
*
* @param name - The string to check.
*/
export function assertSafeIdentifier(name) {
if (!/^[A-Za-z_]\w*$/u.test(name)) {
throw new Error(`Invalid identifier: ${name}`);
}
}
//# sourceMappingURL=common.mjs.map