Make db creation better
This commit is contained in:
@@ -1,95 +1,7 @@
|
||||
use crate::dictionary::app_data_dir;
|
||||
use crate::lang::{WordData, WordGroup};
|
||||
use rusqlite::Connection;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub fn create_db() {
|
||||
let path = app_data_dir();
|
||||
let db_file = path.join("data.db");
|
||||
if !db_file.exists() {
|
||||
std::fs::File::create(&db_file).unwrap();
|
||||
let connection = Connection::open(&db_file).unwrap();
|
||||
connection.execute("PRAGMA foreign_keys = ON;", []).unwrap();
|
||||
|
||||
create_tables(&connection);
|
||||
}
|
||||
}
|
||||
|
||||
fn create_tables(conn: &Connection) {
|
||||
conn.execute(
|
||||
"create table settings
|
||||
(
|
||||
id text primary key,
|
||||
value text
|
||||
);",
|
||||
(),
|
||||
)
|
||||
.unwrap_or_else(|e| 0);
|
||||
|
||||
conn.execute(
|
||||
"create table card_set
|
||||
(
|
||||
id INTEGER
|
||||
primary key autoincrement,
|
||||
name TEXT not null,
|
||||
forward TEXT not null,
|
||||
backward TEXT not null,
|
||||
filter TEXT not null
|
||||
);",
|
||||
(),
|
||||
)
|
||||
.unwrap_or_else(|e| 0);
|
||||
conn.execute(
|
||||
"create table word_group
|
||||
(
|
||||
id INTEGER
|
||||
primary key autoincrement,
|
||||
name TEXT not null
|
||||
);",
|
||||
(),
|
||||
)
|
||||
.unwrap_or_else(|e| 0);
|
||||
conn.execute(
|
||||
"create table words
|
||||
(
|
||||
id INTEGER
|
||||
primary key autoincrement,
|
||||
key TEXT not null,
|
||||
value TEXT not null,
|
||||
tags TEXT not null,
|
||||
more TEXT,
|
||||
group_id integer default 1 not null
|
||||
constraint words_word_group_id_fk
|
||||
references word_group
|
||||
on update cascade on delete cascade
|
||||
);",
|
||||
(),
|
||||
)
|
||||
.unwrap_or_else(|e| 0);
|
||||
conn.execute(
|
||||
"create table card_stats
|
||||
(
|
||||
id INTEGER
|
||||
primary key autoincrement,
|
||||
word_id INTEGER not null
|
||||
references words
|
||||
on delete cascade,
|
||||
set_id TEXT not null
|
||||
references card_set
|
||||
on delete cascade,
|
||||
score INTEGER default 1 not null,
|
||||
last_opened integer not null
|
||||
);",
|
||||
(),
|
||||
)
|
||||
.unwrap_or_else(|e| 0);
|
||||
conn.execute(
|
||||
"insert into word_group (name)
|
||||
values (\"Слова\");",
|
||||
(),
|
||||
)
|
||||
.unwrap_or_else(|e| 0);
|
||||
}
|
||||
|
||||
pub fn add_word(word: &mut WordData, connection: &Connection) {
|
||||
let index = connection
|
||||
|
||||
Reference in New Issue
Block a user