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