Transform paths column to null-separated

This commit is contained in:
Max Brunsfeld 2025-08-25 15:15:30 -07:00
parent 5abe0134ad
commit 5474a310f7
2 changed files with 21 additions and 6 deletions

View file

@ -58,11 +58,7 @@ impl PathList {
let mut paths: Vec<PathBuf> = if serialized.paths.is_empty() {
Vec::new()
} else {
serde_json::from_str::<Vec<PathBuf>>(&serialized.paths)
.unwrap_or(Vec::new())
.into_iter()
.map(|s| SanitizedPath::from(s).into())
.collect()
serialized.paths.split('\0').map(PathBuf::from).collect()
};
let mut order: Vec<usize> = serialized
@ -85,7 +81,13 @@ impl PathList {
pub fn serialize(&self) -> SerializedPathList {
use std::fmt::Write as _;
let paths = serde_json::to_string(&self.paths).unwrap_or_default();
let mut paths = String::new();
for path in self.paths.iter() {
if !paths.is_empty() {
paths.push('\0');
}
paths.push_str(&path.to_string_lossy());
}
let mut order = String::new();
for ix in self.order.iter() {

View file

@ -605,6 +605,19 @@ impl Domain for WorkspaceDb {
CREATE UNIQUE INDEX ix_workspaces_location ON workspaces(ssh_connection_id, paths);
),
sql!(
UPDATE workspaces
SET paths = CASE
WHEN substr(paths, 1, 2) = '[' || '"' AND substr(paths, -2, 2) = ']' || '"' THEN
replace(
substr(paths, 2, length(paths) - 2),
'"' || ',' || '"',
'\0'
)
ELSE
replace(paths, ',', '\0')
END
),
];
// Allow recovering from bad migration