pub(crate) const CREATE_TABLE_QUERY: &str = "
CREATE TABLE IF NOT EXISTS SqliteFs
(
id INTEGER NOT NULL UNIQUE,
-- Name of the file
name TEXT NOT NULL UNIQUE,
-- holds information about the file type
ftype TEXT NULL DEFAULT NULL,
-- rwx or what ever
mode INTEGER NOT NULL DEFAULT 0,
-- how often it is allowed to open the file
max_open INTEGER NOT NULL DEFAULT 0,
-- size in bytes
size INTEGER NOT NULL DEFAULT 0,
-- size in bytes of the compressed data
size_compressed INTEGER NULL DEFAULT 0,
-- compression level 0 (none) to 9 (best) and 6 as default compression level when compression is used
compression INTEGER NOT NULL DEFAULT 0,
-- Data as BLOB (Vec<u8>) compressed or not
data BLOB NULL DEFAULT NULL,
-- Base64 encoded SHA-512 of the ucompressed data
sha TEXT NULL DEFAULT NULL,
-- Base64 encoded SHA-512 of the compressed data
sha_compressed TEXT NULL DEFAULT NULL,
-- TS of File creation
created_at DATETIME NOT NULL DEFAULT (datetime('now', 'localtime', 'subsec')),
-- TS of last read of data
read_at DATETIME NOT NULL DEFAULT (datetime('now', 'localtime', 'subsec')),
-- TS of last File write
modify_at DATETIME NOT NULL DEFAULT (datetime('now', 'localtime', 'subsec')),
PRIMARY KEY (id AUTOINCREMENT)
);
CREATE TABLE IF NOT EXISTS SqliteFsMeta
(
id INTEGER NOT NULL UNIQUE,
version TEXT NOT NULL UNIQUE,
-- MEMORY or PERSIST
fs_type TEXT NOT NULL,
created_at DATETIME NOT NULL UNIQUE DEFAULT (datetime('now', 'localtime', 'subsec')),
PRIMARY KEY (id AUTOINCREMENT)
);
-- In-Memory only!
CREATE TEMP TABLE IF NOT EXISTS SqliteFsFileHandles
(
-- UUID_V5(UUID_V7.now(), fname)
fhandle TEXT NOT NULL UNIQUE,
fid INTEGER NOT NULL,
mode INTEGER NOT NULL,
-- OPEN, CLOSED, DELETED, UNKNOWN
status TEXT NOT NULL,
created_at DATETIME NOT NULL DEFAULT (datetime('now', 'localtime', 'subsec')),
PRIMARY KEY (fhandle),
FOREIGN KEY (fid) REFERENCES SqliteFs (id)
);
";
pub(crate) const QUERY_DOES_FILE_EXIST: &str = "
SELECT
id
FROM
SqliteFs
WHERE
name = $1;
";
pub(crate) const QUERY_DELETE_FILE: &str = "
DELETE FROM
SqliteFs
WHERE
name = $1
RETURNING
*;
";
pub(crate) const QUERY_DELETE_DIR: &str = "
DELETE FROM
SqliteFs
WHERE
name
LIKE
$1
RETURNING
*;
";
pub(crate) const QUERY_READ_DIR: &str = "
SELECT
name
FROM
SqliteFs
WHERE
name
LIKE
$1;
";
pub(crate) const QUERY_FILE: &str = "
UPDATE SqliteFs SET
read_at = datetime('now', 'localtime', 'subsec')
WHERE
name = $1
RETURNING
*;
";
pub(crate) const QUERY_FILE_DATA: &str = "
UPDATE SqliteFs SET
read_at = datetime('now', 'localtime', 'subsec')
WHERE
name = $1
RETURNING
compression, data;
";
pub(crate) const QUERY_RENAME_FILE: &str = "
BEGIN TRANSACTION;
-- Step 1: Delete the entry with name if it exists
DELETE FROM
SqliteFs
WHERE
name = $2;
-- Step 2: Update the entry with name to have the new name
UPDATE
SqliteFs
SET
name = $2
WHERE
name = $1;
COMMIT;
";
pub(crate) const QUERY_WRITE_FILE: &str = "
INSERT OR REPLACE INTO SqliteFs
(id, name, ftype, mode, max_open, size, size_compressed, compression, data, sha, sha_compressed, modify_at)
VALUES
((SELECT id FROM SqliteFs WHERE name = $1), $1, $2, $3, $4, $5, $6, $7, $8, $9, $10, datetime('now', 'localtime', 'subsec'))
RETURNING *;
";
pub(crate) const QUERY_INSERT_FILE: &str = "
INSERT INTO SqliteFs
(name, ftype, mode, max_open, size, size_compressed, compression, data, sha, sha_compressed)
VALUES
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
RETURNING *;
";
pub(crate) const QUERY_COPY_FILE: &str = "
INSERT OR REPLACE INTO SqliteFs
(name, ftype, mode, max_open, size, size_compressed, compression, data, sha, sha_compressed)
SELECT
$2, ftype, mode, max_open, size, size_compressed, compression, data, sha, sha_compressed
FROM
SqliteFs
WHERE
name = $1
RETURNING
*;
";
pub(crate) const INSERT_FS_METADATA_QUERY: &str = "
INSERT INTO SqliteFsMeta
(version, fs_type)
VALUES
($1, $2);
";