Rename "store" to "dataset" in schema
This commit is contained in:
parent
12b669d591
commit
e5fa7a32f2
@ -1,5 +1,5 @@
|
|||||||
-- Simple key/value table describing _this_ store (not imported ones).
|
-- Simple key/value table describing _this_ dataset (not imported ones).
|
||||||
-- In particular, the key "local_store" should be the UUID of the store in this
|
-- In particular, the key "local_dataset" should be the UUID of the dataset in this
|
||||||
-- directory.
|
-- directory.
|
||||||
CREATE TABLE local_metadata(
|
CREATE TABLE local_metadata(
|
||||||
key TEXT PRIMARY KEY NOT NULL,
|
key TEXT PRIMARY KEY NOT NULL,
|
||||||
@ -54,8 +54,8 @@ CREATE INDEX FK_user_machine ON user (machine);
|
|||||||
|
|
||||||
-- Stores and files (and directories)
|
-- Stores and files (and directories)
|
||||||
-- These are the primary objects tracked by nancy.
|
-- These are the primary objects tracked by nancy.
|
||||||
-- A store is a directory containing a file called nancy.db (e.g. the dir holding this database)
|
-- A dataset is a directory containing a file called nancy.db (e.g. the dir holding this database)
|
||||||
-- In order to reliably merge store entries (like when we have converging
|
-- In order to reliably merge dataset entries (like when we have converging
|
||||||
-- dependencies), we need to deduplicate. The machine and path could match, for
|
-- dependencies), we need to deduplicate. The machine and path could match, for
|
||||||
-- example if a database is created in one location then copied elsewhere,
|
-- example if a database is created in one location then copied elsewhere,
|
||||||
-- followed by regenerating the original database. In these cases, we would want
|
-- followed by regenerating the original database. In these cases, we would want
|
||||||
@ -67,29 +67,29 @@ CREATE INDEX FK_user_machine ON user (machine);
|
|||||||
-- Client code should generate random UUIDs in the RFC 4122 variant layout.
|
-- Client code should generate random UUIDs in the RFC 4122 variant layout.
|
||||||
-- https://datatracker.ietf.org/doc/html/rfc4122.html
|
-- https://datatracker.ietf.org/doc/html/rfc4122.html
|
||||||
-- This is possible in Python by simply calling uuid.uuid4() with no arguments
|
-- This is possible in Python by simply calling uuid.uuid4() with no arguments
|
||||||
CREATE TABLE store (
|
CREATE TABLE dataset (
|
||||||
uuid BLOB PRIMARY KEY NOT NULL -- UUID generated by uuid.uuid4()
|
uuid BLOB PRIMARY KEY NOT NULL -- UUID generated by uuid.uuid4()
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
-- The filedir table holds all files and directories that are tracked by the
|
-- The filedir table holds all files and directories that are tracked by the
|
||||||
-- store. This table also holds tracked files and directories that have been
|
-- dataset. This table also holds tracked files and directories that have been
|
||||||
-- imported and live outside the current store.
|
-- imported and live outside the current dataset.
|
||||||
-- We do not support renaming files.
|
-- We do not support renaming files.
|
||||||
CREATE TABLE filedir (
|
CREATE TABLE filedir (
|
||||||
sha256 BLOB PRIMARY KEY NOT NULL,
|
sha256 BLOB PRIMARY KEY NOT NULL,
|
||||||
store BLOB NOT NULL REFERENCES store ON UPDATE CASCADE,
|
dataset BLOB NOT NULL REFERENCES dataset ON UPDATE CASCADE,
|
||||||
name TEXT, -- only a filename, not a path
|
name TEXT, -- only a filename, not a path
|
||||||
parent BLOB REFERENCES filedir ON UPDATE CASCADE,
|
parent BLOB REFERENCES filedir ON UPDATE CASCADE,
|
||||||
UNIQUE(store, name, parent)
|
UNIQUE(dataset, name, parent)
|
||||||
);
|
);
|
||||||
CREATE INDEX FK_filedir_store ON filedir (store);
|
CREATE INDEX FK_filedir_dataset ON filedir (dataset);
|
||||||
CREATE INDEX FK_filedir_parent ON filedir (parent);
|
CREATE INDEX FK_filedir_parent ON filedir (parent);
|
||||||
-- Detect cross-store references
|
-- Detect cross-dataset references
|
||||||
CREATE TRIGGER insert_filedir BEFORE INSERT ON filedir
|
CREATE TRIGGER insert_filedir BEFORE INSERT ON filedir
|
||||||
BEGIN SELECT CASE
|
BEGIN SELECT CASE
|
||||||
WHEN NEW.parent IS NOT NULL AND NEW.store != (SELECT store FROM filedir WHERE sha256 = NEW.parent)
|
WHEN NEW.parent IS NOT NULL AND NEW.dataset != (SELECT dataset FROM filedir WHERE sha256 = NEW.parent)
|
||||||
THEN RAISE (ABORT, 'Parent resides in different store')
|
THEN RAISE (ABORT, 'Parent resides in different dataset')
|
||||||
END; END;
|
END; END;
|
||||||
CREATE TRIGGER update_filedir BEFORE UPDATE ON filedir
|
CREATE TRIGGER update_filedir BEFORE UPDATE ON filedir
|
||||||
BEGIN
|
BEGIN
|
||||||
@ -112,12 +112,8 @@ CREATE TABLE filedir_version (
|
|||||||
|
|
||||||
-- Note that changing filetype (e.g. directory becomes file) or deleting a
|
-- Note that changing filetype (e.g. directory becomes file) or deleting a
|
||||||
-- file are simply just new versions of a filedir.
|
-- file are simply just new versions of a filedir.
|
||||||
filetype TEXT, -- One of 'LNK', 'DIR', 'REG', etc. See store.FSEntry.from_path for details
|
filetype TEXT, -- One of 'LNK', 'DIR', 'REG', etc.
|
||||||
deleted BOOL NOT NULL, -- set True when recording a deleted file
|
deleted BOOL NOT NULL, -- set True when recording a deleted file
|
||||||
|
|
||||||
-- We record the permissions on each file to enable fixing if needed
|
|
||||||
perms TEXT, -- stat.filemode(os.stat(path).st_mode): '-rw-rw-r--'
|
|
||||||
|
|
||||||
symlink_target TEXT, -- if this is a symlink, this is the (read but not fully resolved) target. i.e. this is the "content" of the symlink.
|
symlink_target TEXT, -- if this is a symlink, this is the (read but not fully resolved) target. i.e. this is the "content" of the symlink.
|
||||||
|
|
||||||
-- The following hash can be NULL if the file was deleted. It could also be
|
-- The following hash can be NULL if the file was deleted. It could also be
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user