summaryrefslogtreecommitdiff
path: root/server/schema.sql
diff options
context:
space:
mode:
Diffstat (limited to 'server/schema.sql')
-rw-r--r--server/schema.sql62
1 files changed, 62 insertions, 0 deletions
diff --git a/server/schema.sql b/server/schema.sql
new file mode 100644
index 0000000..54eac1f
--- /dev/null
+++ b/server/schema.sql
@@ -0,0 +1,62 @@
+-- database schema version 1
+
+pragma foreign_keys = on;
+
+create table Meta (
+ version integer not null
+);
+insert into Meta(version) values (1);
+
+create table Users (
+ id integer primary key,
+ username text unique not null,
+ passhash blob not null
+);
+
+create table Logins (
+ user integer not null,
+ token text unique not null,
+ expire integer not null -- unix timestamp, token invalid >= this time
+);
+create index Logins_user on Logins (user);
+
+create table Files (
+ id integer primary key,
+ owner integer not null,
+ path text unique not null, -- names separated with single '/', neither start nor end with '/'
+
+ foreign key (owner) references Users(id) on delete cascade
+);
+
+-- Undo history of a file
+create table Updates (
+ id integer primary key,
+ file integer not null,
+ idx integer not null, -- index in the update history of this file; first is 0
+
+ position integer not null,
+ -- If old_value is null & new_value exists:
+ -- insert item _before_ the given position; the new item has itemid.
+ -- If old_value exists & new_value is null:
+ -- delete item at the given position; that item had itemid.
+ -- If old_value exists & new_value exists:
+ -- modify the item at the given position, which has itemid.
+ -- If old_value is null & new_value is null:
+ -- <disallowed>.
+ itemid integer not null,
+ old_value blob null,
+ new_value blob null,
+
+ foreign key (file) references Files(id) on delete cascade,
+ unique (file, idx)
+);
+
+-- Current state of a file
+create table Chunks (
+ id integer primary key,
+ file integer not null,
+ position integer not null,
+ contents blob not null,
+
+ unique (file, position)
+);