net/indexeddb/engines/sqlite/
create.rs1pub(crate) fn create_tables(conn: &rusqlite::Connection) -> Result<(), rusqlite::Error> {
9 const DATABASE: &str = r#"
10create table database (
11 name varchar not null
12 primary key,
13 origin varchar not null,
14 version bigint default 0 not null
15) WITHOUT ROWID;"#;
16 conn.execute(DATABASE, [])?;
17
18 const OBJECT_STORE: &str = r#"
19create table object_store (
20 id integer not null
21 primary key autoincrement,
22 name varchar not null
23 unique,
24 key_path varbinary_blob,
25 auto_increment integer default FALSE not null
26);"#;
27 conn.execute(OBJECT_STORE, [])?;
28
29 const OBJECT_DATA: &str = r#"
30create table object_data (
31 object_store_id integer not null
32 references object_store,
33 key blob not null,
34 data blob not null,
35 constraint "pk-object_data"
36 primary key (object_store_id, key)
37) WITHOUT ROWID;"#;
38 conn.execute(OBJECT_DATA, [])?;
39
40 const OBJECT_STORE_INDEX: &str = r#"
41create table object_store_index (
42 id integer not null
43 primary key autoincrement,
44 object_store_id integer not null
45 references object_store,
46 name varchar not null
47 unique,
48 key_path varbinary_blob not null,
49 unique_index boolean not null,
50 multi_entry_index boolean not null
51);"#;
52 conn.execute(OBJECT_STORE_INDEX, [])?;
53
54 const INDEX_DATA: &str = r#"
55CREATE TABLE index_data (
56 index_id INTEGER NOT NULL,
57 value BLOB NOT NULL,
58 object_data_key BLOB NOT NULL,
59 object_store_id INTEGER NOT NULL,
60 value_locale BLOB,
61 PRIMARY KEY (index_id, value, object_data_key)
62 FOREIGN KEY (index_id) REFERENCES object_store_index(id),
63 FOREIGN KEY (object_store_id, object_data_key)
64 REFERENCES object_data(object_store_id, key)
65) WITHOUT ROWID;"#;
66 conn.execute(INDEX_DATA, [])?;
67
68 const UNIQUE_INDEX_DATA: &str = r#"
69CREATE TABLE unique_index_data (
70 index_id INTEGER NOT NULL,
71 value BLOB NOT NULL,
72 object_store_id INTEGER NOT NULL,
73 object_data_key BLOB NOT NULL,
74 value_locale BLOB,
75 PRIMARY KEY (index_id, value),
76 FOREIGN KEY (index_id) REFERENCES object_store_index(id),
77 FOREIGN KEY (object_store_id, object_data_key)
78 REFERENCES object_data(object_store_id, key)
79) WITHOUT ROWID;"#;
80 conn.execute(UNIQUE_INDEX_DATA, [])?;
81 Ok(())
82}