aboutsummaryrefslogtreecommitdiffstats
path: root/INIT_DATABASE.sql
diff options
context:
space:
mode:
Diffstat (limited to 'INIT_DATABASE.sql')
-rw-r--r--INIT_DATABASE.sql113
1 files changed, 113 insertions, 0 deletions
diff --git a/INIT_DATABASE.sql b/INIT_DATABASE.sql
new file mode 100644
index 0000000..d96a4b0
--- /dev/null
+++ b/INIT_DATABASE.sql
@@ -0,0 +1,113 @@
+create database if not exists fileup;
+use fileup;
+
+/*BEWARE!*/
+drop table if exists node_access;
+drop table if exists users;
+drop table if exists node_links;
+drop table if exists trash;
+drop table if exists super_trash;
+drop table if exists shared_nodes;
+drop table if exists nodes;
+
+
+
+drop trigger if exists delete_on_zero_links;
+drop trigger if exists delete_links;
+drop trigger if exists del_node;
+drop trigger if exists supper_del_node;
+
+
+
+
+
+create table nodes (
+ node_id int not null auto_increment,
+ is_directory boolean default false,
+ relative_path varchar(500) not null,
+ type varchar(20) not null default 'data',
+ code varchar(100) not null default "error",
+ primary key (node_id)
+);
+
+/*base user information*/
+create table users (
+ user_id int not null auto_increment,
+ username varchar(50) not null unique,
+ password varchar(255) not null,
+ email varchar(50),
+ home_directory int not null,
+ primary key (user_id),
+ foreign key (home_directory) references nodes(node_id) on delete cascade
+);
+
+create table node_access (
+ node_id int not null,
+ user_id int not null,
+
+ can_view boolean not null default true,
+ can_edit boolean not null default false,
+ foreign key (node_id) references nodes(node_id) on delete cascade,
+ foreign key (user_id) references users(user_id) on delete cascade
+);
+/*we can name a node in many different ways */
+create table node_links (
+ directory_id int not null,
+ node_id int not null,
+ name varchar(100) not null default 'no name',
+ note varchar(200) not null default "",
+ foreign key (directory_id) references nodes(node_id) on delete cascade,
+ foreign key (node_id) references nodes(node_id) on delete cascade
+);
+
+/*we store passwords for the shared links here, it doesn't really have anything to do with the filesystem*/
+create table shared_nodes (
+ node_id int not null,
+ passcode varchar(100) default "",
+ code varchar(100) default "",
+ foreign key (node_id) references nodes(node_id) on delete cascade
+);
+
+create table trash (
+ node_id int not null
+);
+create table super_trash (
+ node_id int not null
+);
+
+
+create trigger delete_on_zero_links
+ after delete
+ on node_links
+ for each row
+ insert into trash
+ select nodes.node_id
+ from nodes
+ where nodes.node_id not in (select node_id from node_links) and
+ (nodes.node_id=old.node_id );
+
+create trigger del_node
+ after delete
+ on trash
+ for each row
+ insert into super_trash(node_id)
+ select node_id
+ from nodes
+ where nodes.node_id=old.node_id;
+
+
+create trigger supper_del_node
+ after delete
+ on super_trash
+ for each row
+ insert into trash
+ select node_id
+ from nodes
+ where nodes.node_id=old.node_id;
+
+create trigger delete_links
+ before delete
+ on super_trash
+ for each row
+ delete from node_links
+ where directory_id=old.node_id;