1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#[macro_use]
extern crate diesel;

use diesel::prelude::*;
use diesel::sql_query;
use diesel::sqlite::SqliteConnection;

pub mod crud;
pub mod models;
pub mod schema;
mod utils;

pub type NxtnoteSaveFile = SqliteConnection;

pub fn initialize_file(conn: &SqliteConnection) {
    sql_query(
        "\
        CREATE TABLE blocks (
            id      BLOB NOT NULL PRIMARY KEY,
            rank    TEXT NOT NULL UNIQUE,
            type    TEXT NOT NULL
        )
    ",
    )
    .execute(conn)
    .unwrap();

    sql_query(
        "\
        CREATE TABLE block_properties (
            block_id    BLOB NOT NULL,
            name        TEXT NOT NULL,
            data        BLOB NOT NULL,
            PRIMARY KEY(block_id, name),
            FOREIGN KEY(block_id)
                REFERENCES blocks(id)
                ON DELETE CASCADE
        )
    ",
    )
    .execute(conn)
    .unwrap();
}

pub fn establish_connection(file: String) -> NxtnoteSaveFile {
    let connection = SqliteConnection::establish(&file).expect(&format!("Error connecting to {}", file));

    sql_query("PRAGMA foreign_keys = ON").execute(&connection).unwrap();

    connection
}