2022-11-19 04:59:59 +00:00
|
|
|
use std::path::{Path, PathBuf};
|
2022-11-17 00:35:56 +00:00
|
|
|
|
2022-11-19 04:59:59 +00:00
|
|
|
use anyhow::{Context, Result};
|
2022-11-17 00:35:56 +00:00
|
|
|
use db::connection;
|
|
|
|
use indoc::indoc;
|
|
|
|
use lazy_static::lazy_static;
|
|
|
|
use sqlez::domain::Domain;
|
2022-11-19 04:59:59 +00:00
|
|
|
use workspace::{ItemId, Workspace, WorkspaceId};
|
2022-11-17 00:35:56 +00:00
|
|
|
|
|
|
|
use crate::Editor;
|
|
|
|
|
|
|
|
connection!(DB: EditorDb<(Workspace, Editor)>);
|
|
|
|
|
|
|
|
impl Domain for Editor {
|
|
|
|
fn name() -> &'static str {
|
|
|
|
"editor"
|
|
|
|
}
|
|
|
|
|
|
|
|
fn migrations() -> &'static [&'static str] {
|
|
|
|
&[indoc! {"
|
2022-11-19 04:59:59 +00:00
|
|
|
CREATE TABLE editors(
|
|
|
|
item_id INTEGER NOT NULL,
|
|
|
|
workspace_id BLOB NOT NULL,
|
|
|
|
path BLOB NOT NULL,
|
|
|
|
PRIMARY KEY(item_id, workspace_id)
|
|
|
|
) STRICT;
|
2022-11-17 00:35:56 +00:00
|
|
|
"}]
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl EditorDb {
|
2022-11-19 04:59:59 +00:00
|
|
|
pub fn get_path(&self, item_id: ItemId, workspace_id: WorkspaceId) -> Result<PathBuf> {
|
|
|
|
self.select_row_bound(indoc! {"
|
|
|
|
SELECT path FROM editors
|
|
|
|
WHERE item_id = ? AND workspace_id = ?"})?((item_id, &workspace_id))?
|
|
|
|
.context("Path not found for serialized editor")
|
|
|
|
}
|
|
|
|
|
|
|
|
pub fn save_path(
|
|
|
|
&self,
|
|
|
|
item_id: ItemId,
|
|
|
|
workspace_id: WorkspaceId,
|
|
|
|
path: PathBuf,
|
|
|
|
) -> Result<()> {
|
|
|
|
self.exec_bound::<(ItemId, &WorkspaceId, &Path)>(indoc! {"
|
|
|
|
INSERT OR REPLACE INTO editors(item_id, workspace_id, path)
|
|
|
|
VALUES (?, ?, ?)"})?((item_id, &workspace_id, &path))
|
2022-11-17 00:35:56 +00:00
|
|
|
}
|
|
|
|
}
|