Improve DB work.

This commit is contained in:
AB
2020-12-13 14:00:55 +03:00
parent e02e98df06
commit cac53e480a
2 changed files with 103 additions and 214 deletions

View File

@@ -1,109 +1,144 @@
--
-- File generated with SQLiteStudio v3.2.1 on Sun Dec 6 13:46:57 2020
--
-- Text encoding used: System
--
PRAGMA foreign_keys = off; PRAGMA foreign_keys = off;
BEGIN TRANSACTION; BEGIN TRANSACTION;
-- Table: alert -- Table: alert
CREATE TABLE IF NOT EXISTS alert ( CREATE TABLE IF NOT EXISTS alert (
conf_id TEXT NOT NULL, conf_id TEXT NOT NULL,
user_id TEXT NOT NULL, user_id TEXT NOT NULL,
created TEXT NOT NULL, created TEXT NOT NULL,
time TEXT NOT NULL, time TEXT NOT NULL,
message TEXT message TEXT
); );
-- Table: conf -- Table: conf
CREATE TABLE IF NOT EXISTS conf ( CREATE TABLE IF NOT EXISTS conf (
id NUMERIC NOT NULL id NUMERIC NOT NULL
UNIQUE, UNIQUE,
title TEXT, title TEXT,
date INTEGER NOT NULL, date INTEGER NOT NULL,
PRIMARY KEY ( PRIMARY KEY (
id id
) )
); );
-- Table: file -- Table: file
CREATE TABLE IF NOT EXISTS file ( CREATE TABLE IF NOT EXISTS file (
path TEXT NOT NULL, path TEXT NOT NULL,
user_id TEXT NOT NULL, user_id TEXT NOT NULL,
conf_id TEXT NOT NULL, conf_id TEXT NOT NULL,
file_id STRING PRIMARY KEY file_id STRING PRIMARY KEY
);
-- Table: messages
CREATE TABLE IF NOT EXISTS messages (
id INTEGER NOT NULL
PRIMARY KEY AUTOINCREMENT,
text TEXT UNIQUE
); );
-- Table: relations -- Table: relations
CREATE TABLE IF NOT EXISTS relations ( CREATE TABLE IF NOT EXISTS relations (
id INTEGER NOT NULL id INTEGER NOT NULL
PRIMARY KEY AUTOINCREMENT, PRIMARY KEY AUTOINCREMENT,
word_id INTEGER NOT NULL, word_id INTEGER NOT NULL,
user_id INTEGER NOT NULL, user_id INTEGER NOT NULL,
conf_id INTEGER NOT NULL, conf_id INTEGER NOT NULL,
date INTEGER NOT NULL, date INTEGER NOT NULL,
msg_id INTEGER, msg_id INTEGER,
FOREIGN KEY ( FOREIGN KEY (
word_id word_id
) )
REFERENCES word (id) ON DELETE CASCADE, REFERENCES word (id) ON DELETE CASCADE,
FOREIGN KEY ( FOREIGN KEY (
user_id user_id
) )
REFERENCES user (id), REFERENCES user (id),
FOREIGN KEY ( FOREIGN KEY (
conf_id conf_id
) )
REFERENCES conf (id) REFERENCES conf (id)
); );
-- Table: reset -- Table: reset
CREATE TABLE IF NOT EXISTS reset ( CREATE TABLE IF NOT EXISTS reset (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER, user_id INTEGER,
conf_id INTEGER, conf_id INTEGER,
date INTEGER, date INTEGER,
relation_id INTEGER, relation_id INTEGER,
FOREIGN KEY ( FOREIGN KEY (
user_id user_id
) )
REFERENCES user (id) REFERENCES user (id)
);
-- Table: stop_words
CREATE TABLE IF NOT EXISTS stop_words (
word TEXT
); );
-- Table: user -- Table: user
CREATE TABLE IF NOT EXISTS user ( CREATE TABLE IF NOT EXISTS user (
id INTEGER NOT NULL id INTEGER NOT NULL
UNIQUE, UNIQUE,
username TEXT, username TEXT,
first_name INTEGER NOT NULL, first_name INTEGER NOT NULL,
last_name INTEGER, last_name INTEGER,
date INTEGER NOT NULL, date INTEGER NOT NULL,
PRIMARY KEY ( PRIMARY KEY (
id id
) )
ON CONFLICT REPLACE ON CONFLICT REPLACE
); );
-- Table: word -- Table: word
CREATE TABLE IF NOT EXISTS word ( CREATE TABLE IF NOT EXISTS word (
id INTEGER PRIMARY KEY AUTOINCREMENT, id INTEGER PRIMARY KEY AUTOINCREMENT,
word TEXT UNIQUE word TEXT UNIQUE
); );
-- Table: xxx_message -- Index: conf_ids
CREATE TABLE IF NOT EXISTS xxx_message ( CREATE INDEX IF NOT EXISTS conf_ids ON conf (
id INTEGER NOT NULL id
PRIMARY KEY AUTOINCREMENT, );
text TEXT UNIQUE
-- Index: file_ids
CREATE INDEX IF NOT EXISTS file_ids ON file (
file_id
);
-- Index: relations_ids
CREATE INDEX IF NOT EXISTS relations_ids ON relations (
conf_id,
word_id,
user_id,
msg_id
);
-- Index: user_ids
CREATE INDEX IF NOT EXISTS user_ids ON user (
id,
username
);
-- Index: word_id
CREATE INDEX IF NOT EXISTS word_id ON word (
id
); );
COMMIT TRANSACTION; COMMIT TRANSACTION;
PRAGMA foreign_keys = on; PRAGMA foreign_keys = on;

148
src/db.rs
View File

@@ -25,8 +25,7 @@ pub(crate) fn open() -> Result<Connection> {
pub(crate) fn update_scheme() -> Result<()> { pub(crate) fn update_scheme() -> Result<()> {
let conn = open()?; let conn = open()?;
//let x = conn.execute(SCHEME, params![])?; for table in include_str!("../assets/scheme.sql").split(';').into_iter() {
for table in SCHEME.split(';').into_iter() {
let t = table.trim(); let t = table.trim();
if t != "" { if t != "" {
conn.execute(t, params![])?; conn.execute(t, params![])?;
@@ -425,149 +424,4 @@ pub(crate) async fn get_top(
Ok(top) Ok(top)
} }
// SCHEME
static SCHEME: &str = "
PRAGMA foreign_keys = off;
BEGIN TRANSACTION;
-- Table: alert
CREATE TABLE IF NOT EXISTS alert (
conf_id TEXT NOT NULL,
user_id TEXT NOT NULL,
created TEXT NOT NULL,
time TEXT NOT NULL,
message TEXT
);
-- Table: conf
CREATE TABLE IF NOT EXISTS conf (
id NUMERIC NOT NULL
UNIQUE,
title TEXT,
date INTEGER NOT NULL,
PRIMARY KEY (
id
)
);
-- Table: file
CREATE TABLE IF NOT EXISTS file (
path TEXT NOT NULL,
user_id TEXT NOT NULL,
conf_id TEXT NOT NULL,
file_id STRING PRIMARY KEY
);
-- Table: messages
CREATE TABLE IF NOT EXISTS messages (
id INTEGER NOT NULL
PRIMARY KEY AUTOINCREMENT,
text TEXT UNIQUE
);
-- Table: relations
CREATE TABLE IF NOT EXISTS relations (
id INTEGER NOT NULL
PRIMARY KEY AUTOINCREMENT,
word_id INTEGER NOT NULL,
user_id INTEGER NOT NULL,
conf_id INTEGER NOT NULL,
date INTEGER NOT NULL,
msg_id INTEGER,
FOREIGN KEY (
word_id
)
REFERENCES word (id) ON DELETE CASCADE,
FOREIGN KEY (
user_id
)
REFERENCES user (id),
FOREIGN KEY (
conf_id
)
REFERENCES conf (id)
);
-- Table: reset
CREATE TABLE IF NOT EXISTS reset (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
conf_id INTEGER,
date INTEGER,
relation_id INTEGER,
FOREIGN KEY (
user_id
)
REFERENCES user (id)
);
-- Table: stop_words
CREATE TABLE IF NOT EXISTS stop_words (
word TEXT
);
-- Table: user
CREATE TABLE IF NOT EXISTS user (
id INTEGER NOT NULL
UNIQUE,
username TEXT,
first_name INTEGER NOT NULL,
last_name INTEGER,
date INTEGER NOT NULL,
PRIMARY KEY (
id
)
ON CONFLICT REPLACE
);
-- Table: word
CREATE TABLE IF NOT EXISTS word (
id INTEGER PRIMARY KEY AUTOINCREMENT,
word TEXT UNIQUE
);
-- Index: conf_ids
CREATE INDEX IF NOT EXISTS conf_ids ON conf (
id
);
-- Index: file_ids
CREATE INDEX IF NOT EXISTS file_ids ON file (
file_id
);
-- Index: relations_ids
CREATE INDEX IF NOT EXISTS relations_ids ON relations (
conf_id,
word_id,
user_id,
msg_id
);
-- Index: user_ids
CREATE INDEX IF NOT EXISTS user_ids ON user (
id,
username
);
-- Index: word_id
CREATE INDEX IF NOT EXISTS word_id ON word (
id
);
COMMIT TRANSACTION;
PRAGMA foreign_keys = on;";