1use std::path::PathBuf;
2
3use db::{define_connection, query, sqlez_macros::sql};
4use workspace::{ItemId, WorkspaceDb, WorkspaceId};
5
6define_connection! {
7 pub static ref TERMINAL_DB: TerminalDb<WorkspaceDb> =
8 &[sql!(
9 CREATE TABLE terminals (
10 workspace_id INTEGER,
11 item_id INTEGER UNIQUE,
12 working_directory BLOB,
13 PRIMARY KEY(workspace_id, item_id),
14 FOREIGN KEY(workspace_id) REFERENCES workspaces(workspace_id)
15 ON DELETE CASCADE
16 ) STRICT;
17 )];
18}
19
20impl TerminalDb {
21 query! {
22 pub async fn update_workspace_id(
23 new_id: WorkspaceId,
24 old_id: WorkspaceId,
25 item_id: ItemId
26 ) -> Result<()> {
27 UPDATE terminals
28 SET workspace_id = ?
29 WHERE workspace_id = ? AND item_id = ?
30 }
31 }
32
33 query! {
34 pub async fn save_working_directory(
35 item_id: ItemId,
36 workspace_id: WorkspaceId,
37 working_directory: PathBuf
38 ) -> Result<()> {
39 INSERT OR REPLACE INTO terminals(item_id, workspace_id, working_directory)
40 VALUES (?, ?, ?)
41 }
42 }
43
44 query! {
45 pub fn get_working_directory(item_id: ItemId, workspace_id: WorkspaceId) -> Result<Option<PathBuf>> {
46 SELECT working_directory
47 FROM terminals
48 WHERE item_id = ? AND workspace_id = ?
49 }
50 }
51}