Initial public release of Warp.
Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
[package]
|
||||
name = "persistence"
|
||||
edition = "2024"
|
||||
authors.workspace = true
|
||||
publish.workspace = true
|
||||
license.workspace = true
|
||||
|
||||
[features]
|
||||
local_fs = []
|
||||
|
||||
[dependencies]
|
||||
chrono.workspace = true
|
||||
diesel = { workspace = true, features = [
|
||||
"chrono",
|
||||
"32-column-tables",
|
||||
] }
|
||||
# Ideally, we'd make this an optional dependency, but due to the
|
||||
# fact that we're enabling the `local_fs` feature in build.rs and not
|
||||
# via some mechanism that the feature resolver has access to, we can't
|
||||
# make it optional.
|
||||
diesel_migrations = "2.2.0"
|
||||
serde.workspace = true
|
||||
warp_multi_agent_api.workspace = true
|
||||
@@ -0,0 +1,9 @@
|
||||
fn main() -> Result<(), std::env::VarError> {
|
||||
let target_family = std::env::var("CARGO_CFG_TARGET_FAMILY")?;
|
||||
|
||||
if target_family != "wasm" {
|
||||
println!("cargo:rustc-cfg=feature=\"local_fs\"");
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
-- This migration is a no-op. It serves just to make diesel do its own bookkeeping.
|
||||
-- As a result, the sqlite database gets created.
|
||||
@@ -0,0 +1,2 @@
|
||||
-- This migration is a no-op. It serves just to make diesel do its own bookkeeping.
|
||||
-- As a result, the sqlite database gets created.
|
||||
@@ -0,0 +1,2 @@
|
||||
DROP TABLE windows;
|
||||
DROP TABLE tabs;
|
||||
@@ -0,0 +1,19 @@
|
||||
CREATE TABLE windows (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
active_tab_index INTEGER NOT NULL CHECK (active_tab_index >= 0),
|
||||
window_width FLOAT CHECK (window_width >= 0),
|
||||
window_height FLOAT CHECK (window_height >= 0),
|
||||
origin_x FLOAT,
|
||||
origin_y FLOAT,
|
||||
CONSTRAINT Bound_integrity CHECK (
|
||||
COALESCE(window_width, window_height, origin_x, origin_y) IS NOT NULL
|
||||
OR COALESCE(window_width, window_height, origin_x, origin_y) IS NULL
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE tabs (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
window_id INTEGER NOT NULL,
|
||||
cwd TEXT,
|
||||
FOREIGN KEY(window_id) REFERENCES windows(id)
|
||||
);
|
||||
@@ -0,0 +1,7 @@
|
||||
ALTER TABLE tabs ADD cwd TEXT;
|
||||
|
||||
UPDATE tabs set cwd = (SELECT pane_leaves.cwd from pane_nodes join pane_leaves where tabs.id = pane_nodes.tab_id order by pane_leaves.id limit 1);
|
||||
|
||||
DROP TABLE pane_leaves;
|
||||
DROP TABLE pane_branches;
|
||||
DROP TABLE pane_nodes;
|
||||
@@ -0,0 +1,33 @@
|
||||
CREATE TABLE pane_nodes (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
tab_id INTEGER NOT NULL REFERENCES tabs(id),
|
||||
parent_pane_node_id INTEGER REFERENCES pane_nodes(id),
|
||||
flex FLOAT,
|
||||
is_leaf BOOLEAN NOT NULL,
|
||||
CONSTRAINT root_or_has_parent CHECK (
|
||||
parent_pane_node_id IS NULL AND flex IS NULL
|
||||
OR parent_pane_node_id IS NOT NULL AND flex IS NOT NULL
|
||||
)
|
||||
);
|
||||
|
||||
CREATE TABLE pane_branches (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
pane_node_id INTEGER NOT NULL UNIQUE REFERENCES pane_nodes(id),
|
||||
horizontal BOOLEAN NOT NULL
|
||||
);
|
||||
|
||||
CREATE TABLE pane_leaves (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
pane_node_id INTEGER NOT NULL UNIQUE REFERENCES pane_nodes(id),
|
||||
cwd TEXT
|
||||
);
|
||||
|
||||
-- Migrate the same tabs data into a pane structure (i.e. each tab has a single
|
||||
-- pane node that's a leaf).
|
||||
INSERT INTO pane_nodes (tab_id, is_leaf)
|
||||
SELECT id AS tab_id, TRUE from tabs;
|
||||
|
||||
INSERT INTO pane_leaves (pane_node_id, cwd)
|
||||
SELECT pane_nodes.id AS pane_node_id, cwd from tabs JOIN pane_nodes ON tab_id = tabs.id;
|
||||
|
||||
ALTER TABLE tabs DROP COLUMN cwd;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE pane_leaves DROP COLUMN is_active;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE pane_leaves ADD is_active BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
@@ -0,0 +1,14 @@
|
||||
DROP TABLE blocks;
|
||||
|
||||
ALTER TABLE pane_leaves RENAME TO old_pane_leaves;
|
||||
|
||||
CREATE TABLE pane_leaves (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
pane_node_id INTEGER NOT NULL UNIQUE REFERENCES pane_nodes(id),
|
||||
cwd TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT FALSE
|
||||
);
|
||||
|
||||
-- Select 1, 2, 3, ... for the ID.
|
||||
INSERT INTO pane_leaves SELECT (ROW_NUMBER() OVER (ORDER BY (SELECT 0))), pane_node_id, cwd, is_active from old_pane_leaves;
|
||||
DROP TABLE old_pane_leaves;
|
||||
@@ -0,0 +1,28 @@
|
||||
-- First, change panes table to have a uuid as primary key.
|
||||
ALTER TABLE pane_leaves RENAME TO old_pane_leaves;
|
||||
CREATE TABLE pane_leaves (
|
||||
uuid BLOB PRIMARY KEY NOT NULL,
|
||||
pane_node_id INTEGER NOT NULL UNIQUE REFERENCES pane_nodes(id),
|
||||
cwd TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT FALSE
|
||||
);
|
||||
|
||||
INSERT INTO pane_leaves SELECT id, pane_node_id, cwd, is_active from old_pane_leaves;
|
||||
|
||||
-- Drop the old pane leaves table.
|
||||
DROP TABLE old_pane_leaves;
|
||||
|
||||
-- Now we can create a blocks table that has pane_leaf_uuid as a foreign key.
|
||||
-- We don't establish a formal relationship for reasons documented in the code.
|
||||
CREATE TABLE blocks (
|
||||
id INTEGER PRIMARY KEY,
|
||||
pane_leaf_uuid BLOB NOT NULL,
|
||||
stylized_command TEXT NOT NULL,
|
||||
stylized_output TEXT NOT NULL,
|
||||
pwd TEXT,
|
||||
git_branch TEXT,
|
||||
virtual_env TEXT,
|
||||
conda_env TEXT,
|
||||
exit_code INTEGER NOT NULL,
|
||||
did_execute BOOLEAN NOT NULL
|
||||
);
|
||||
+14
@@ -0,0 +1,14 @@
|
||||
DROP TABLE blocks;
|
||||
|
||||
CREATE TABLE blocks (
|
||||
id INTEGER PRIMARY KEY,
|
||||
pane_leaf_uuid BLOB NOT NULL,
|
||||
stylized_command TEXT NOT NULL,
|
||||
stylized_output TEXT NOT NULL,
|
||||
pwd TEXT,
|
||||
git_branch TEXT,
|
||||
virtual_env TEXT,
|
||||
conda_env TEXT,
|
||||
exit_code INTEGER NOT NULL,
|
||||
did_execute BOOLEAN NOT NULL
|
||||
);
|
||||
@@ -0,0 +1,14 @@
|
||||
DROP TABLE blocks;
|
||||
|
||||
CREATE TABLE blocks (
|
||||
id INTEGER PRIMARY KEY,
|
||||
pane_leaf_uuid BLOB NOT NULL,
|
||||
stylized_command BLOB NOT NULL,
|
||||
stylized_output BLOB NOT NULL,
|
||||
pwd TEXT,
|
||||
git_branch TEXT,
|
||||
virtual_env TEXT,
|
||||
conda_env TEXT,
|
||||
exit_code INTEGER NOT NULL,
|
||||
did_execute BOOLEAN NOT NULL
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks DROP COLUMN completed_ts;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks ADD completed_ts DATETIME;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE app;
|
||||
@@ -0,0 +1,4 @@
|
||||
CREATE TABLE app (
|
||||
id INTEGER PRIMARY KEY,
|
||||
active_window_id INTEGER REFERENCES windows(id)
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks DROP COLUMN start_ts;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks ADD start_ts DATETIME;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE blocks DROP COLUMN ps1;
|
||||
ALTER TABLE blocks DROP COLUMN honor_ps1;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE blocks ADD ps1 TEXT;
|
||||
ALTER TABLE blocks ADD honor_ps1 BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE windows DROP COLUMN quake_mode;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE windows ADD quake_mode BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
+1
@@ -0,0 +1 @@
|
||||
UPDATE windows SET origin_y = -origin_y - 2 * window_height WHERE origin_y IS NOT NULL;
|
||||
@@ -0,0 +1,6 @@
|
||||
-- migrate the dataset to use the new coordinate system conversion: before the change,
|
||||
-- we convert coordinates with "origin_y - window_height". After the change, we convert
|
||||
-- the coordinates with "-(origin_y + window_height)". The delta defined here makes
|
||||
-- sure the coordinate will be valid after the new conversion
|
||||
-- "-(origin_y - window_height) - 2 * window_height = -(origin_y + window_height)".
|
||||
UPDATE windows SET origin_y = -origin_y - 2 * window_height WHERE origin_y IS NOT NULL;
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE tabs DROP COLUMN custom_title;
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE tabs ADD custom_title TEXT;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS users;
|
||||
@@ -0,0 +1,4 @@
|
||||
CREATE TABLE users (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
firebase_uid TEXT NOT NULL UNIQUE
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS workflows;
|
||||
@@ -0,0 +1,9 @@
|
||||
CREATE TABLE workflows (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
-- Diesel does not let you specify JSON as data type
|
||||
data TEXT NOT NULL,
|
||||
last_updated_at DATETIME NOT NULL,
|
||||
-- `user_id` column helps to support multiple users logged into same device.
|
||||
-- It ensures the user is only served data meant for their Warp account.
|
||||
user_id INTEGER NOT NULL REFERENCES users(id)
|
||||
);
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE workflows ADD COLUMN last_updated_at DATETIME NOT NULL;
|
||||
ALTER TABLE workflows ADD COLUMN user_id INTEGER NOT NULL REFERENCES users(id);
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE workflows DROP COLUMN user_id;
|
||||
ALTER TABLE workflows DROP COLUMN last_updated_at;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE tabs DROP COLUMN color;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE tabs ADD color TEXT;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS notebooks;
|
||||
@@ -0,0 +1,4 @@
|
||||
CREATE TABLE notebooks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
author_id INTEGER NOT NULL
|
||||
);
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE notebooks DROP COLUMN title;
|
||||
|
||||
DROP TABLE IF EXISTS notebook_blocks;
|
||||
@@ -0,0 +1,9 @@
|
||||
ALTER TABLE notebooks ADD title TEXT;
|
||||
|
||||
CREATE TABLE notebook_blocks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
notebook_id INTEGER NOT NULL,
|
||||
is_documentation BOOLEAN NOT NULL,
|
||||
data TEXT NOT NULL,
|
||||
FOREIGN KEY(notebook_id) REFERENCES notebooks(id)
|
||||
);
|
||||
@@ -0,0 +1,15 @@
|
||||
DROP TABLE IF EXISTS notebooks;
|
||||
|
||||
CREATE TABLE notebooks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
author_id INTEGER NOT NULL,
|
||||
title TEXT
|
||||
);
|
||||
|
||||
CREATE TABLE notebook_blocks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
notebook_id INTEGER NOT NULL,
|
||||
is_documentation BOOLEAN NOT NULL,
|
||||
data TEXT NOT NULL,
|
||||
FOREIGN KEY(notebook_id) REFERENCES notebooks(id)
|
||||
);
|
||||
@@ -0,0 +1,10 @@
|
||||
DROP TABLE IF EXISTS notebook_blocks;
|
||||
|
||||
DROP TABLE IF EXISTS notebooks;
|
||||
|
||||
CREATE TABLE notebooks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
author_id INTEGER NOT NULL,
|
||||
title TEXT,
|
||||
data TEXT
|
||||
);
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
ALTER TABLE workflows DROP COLUMN user_can_delete;
|
||||
ALTER TABLE workflows DROP COLUMN is_pending;
|
||||
ALTER TABLE notebooks DROP COLUMN is_pending;
|
||||
|
||||
ALTER TABLE workflows DROP COLUMN server_id;
|
||||
ALTER TABLE notebooks DROP COLUMN server_id;
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
ALTER TABLE workflows ADD user_can_delete BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
ALTER TABLE workflows ADD is_pending BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
ALTER TABLE notebooks ADD is_pending BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
|
||||
ALTER TABLE workflows ADD server_id BIGINTEGER;
|
||||
ALTER TABLE notebooks ADD server_id BIGINTEGER;
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE blocks DROP COLUMN shell;
|
||||
ALTER TABLE blocks DROP COLUMN user;
|
||||
ALTER TABLE blocks DROP COLUMN host;
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE blocks ADD COLUMN shell TEXT;
|
||||
ALTER TABLE blocks ADD COLUMN user TEXT;
|
||||
ALTER TABLE blocks ADD COLUMN host TEXT;
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
ALTER TABLE notebooks RENAME TO old_notebooks;
|
||||
CREATE TABLE notebooks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
author_id INTEGER NOT NULL,
|
||||
title TEXT,
|
||||
data TEXT,
|
||||
is_pending BOOLEAN NOT NULL,
|
||||
server_id BIGINTEGER
|
||||
);
|
||||
|
||||
INSERT INTO notebooks SELECT id, COALESCE(author_id,0), title, data, is_pending, server_id from old_notebooks;
|
||||
DROP TABLE old_notebooks;
|
||||
@@ -0,0 +1,13 @@
|
||||
ALTER TABLE notebooks RENAME TO old_notebooks;
|
||||
CREATE TABLE notebooks (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
author_id INTEGER,
|
||||
title TEXT,
|
||||
data TEXT,
|
||||
client_id TEXT,
|
||||
is_pending BOOLEAN NOT NULL,
|
||||
server_id BIGINTEGER
|
||||
);
|
||||
|
||||
INSERT INTO notebooks SELECT id, author_id, title, data, null, is_pending, server_id from old_notebooks;
|
||||
DROP TABLE old_notebooks;
|
||||
@@ -0,0 +1,9 @@
|
||||
DROP TABLE object_metadata;
|
||||
|
||||
ALTER TABLE workflows ADD is_pending BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
ALTER TABLE workflows ADD server_id BIGINTEGER;
|
||||
|
||||
ALTER TABLE notebooks ADD is_pending BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
ALTER TABLE notebooks ADD author_id INTEGER;
|
||||
ALTER TABLE notebooks ADD client_id TEXT;
|
||||
ALTER TABLE notebooks ADD server_id BIGINTEGER;
|
||||
@@ -0,0 +1,23 @@
|
||||
CREATE TABLE object_metadata (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
is_pending BOOLEAN NOT NULL,
|
||||
object_type TEXT CHECK(object_type IN ('NOTEBOOK','WORKFLOW')) NOT NULL,
|
||||
revision_ts INTEGER,
|
||||
server_id TEXT,
|
||||
client_id TEXT,
|
||||
shareable_object_id INTEGER NOT NULL,
|
||||
last_edited_by TEXT,
|
||||
author_id INTEGER,
|
||||
retry_count INTEGER NOT NULL
|
||||
);
|
||||
|
||||
INSERT INTO object_metadata SELECT null, is_pending, 'NOTEBOOK', null, null, null, id, null, author_id, 0 from notebooks;
|
||||
INSERT INTO object_metadata SELECT null, is_pending, 'WORKFLOW', null, null, null, id, null, null, 0 from workflows;
|
||||
|
||||
ALTER TABLE workflows DROP COLUMN is_pending;
|
||||
ALTER TABLE workflows DROP COLUMN server_id;
|
||||
|
||||
ALTER TABLE notebooks DROP COLUMN is_pending;
|
||||
ALTER TABLE notebooks DROP COLUMN author_id;
|
||||
ALTER TABLE notebooks DROP COLUMN client_id;
|
||||
ALTER TABLE notebooks DROP COLUMN server_id;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata DROP COLUMN team_id;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata ADD team_id BIGINTEGER;
|
||||
@@ -0,0 +1,2 @@
|
||||
-- This file should undo anything in `up.sql`
|
||||
DROP TABLE teams;
|
||||
@@ -0,0 +1,7 @@
|
||||
-- Your SQL goes here
|
||||
CREATE TABLE teams (
|
||||
id integer NOT NULL PRIMARY KEY,
|
||||
server_id BIGINTEGER UNIQUE,
|
||||
name TEXT NOT NULL,
|
||||
creator_id BIGINTEGER NOT NULL
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE windows DROP COLUMN universal_search_width;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE windows ADD universal_search_width FLOAT CHECK (universal_search_width >= 0);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks DROP COLUMN is_background;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks ADD COLUMN is_background BOOLEAN NOT NULL DEFAULT false;
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE windows DROP COLUMN warp_ai_width;
|
||||
ALTER TABLE windows DROP COLUMN voltron_width;
|
||||
ALTER TABLE windows DROP COLUMN warp_drive_index_width;
|
||||
ALTER TABLE windows DROP COLUMN warp_drive_asset_width;
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
ALTER TABLE windows ADD warp_ai_width FLOAT CHECK (warp_ai_width >= 0);
|
||||
ALTER TABLE windows ADD voltron_width FLOAT CHECK (voltron_width >= 0);
|
||||
ALTER TABLE windows ADD warp_drive_index_width FLOAT CHECK (warp_drive_index_width >= 0);
|
||||
ALTER TABLE windows ADD warp_drive_asset_width FLOAT CHECK (warp_drive_asset_width >= 0);
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata DROP metadata_last_updated_ts;
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata ADD metadata_last_updated_ts BIGINTEGER;
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata DROP trashed_ts;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata ADD trashed_ts BIGINTEGER;
|
||||
@@ -0,0 +1,2 @@
|
||||
DROP TABLE IF EXISTS folders;
|
||||
ALTER TABLE object_metadata DROP folder_id;
|
||||
@@ -0,0 +1,7 @@
|
||||
CREATE TABLE folders (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
is_open BOOLEAN NOT NULL
|
||||
);
|
||||
|
||||
ALTER TABLE object_metadata ADD folder_id TEXT;
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
-- remove rows with where object_type != NOTEBOOK | WORKFLOW
|
||||
DELETE FROM object_metadata WHERE object_type NOT IN ('NOTEBOOK', 'WORKFLOW');
|
||||
|
||||
-- clear folders table (this restores consistency after deleting their metadata)
|
||||
DELETE FROM folders;
|
||||
|
||||
-- create new table with the CHECK constraint back in
|
||||
CREATE TABLE object_metadata_new (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
is_pending BOOLEAN NOT NULL,
|
||||
object_type TEXT CHECK(object_type IN ('NOTEBOOK','WORKFLOW')) NOT NULL,
|
||||
revision_ts INTEGER,
|
||||
server_id TEXT,
|
||||
client_id TEXT,
|
||||
shareable_object_id INTEGER NOT NULL,
|
||||
last_edited_by TEXT,
|
||||
author_id INTEGER,
|
||||
retry_count INTEGER NOT NULL,
|
||||
team_id BIGINTEGER,
|
||||
metadata_last_updated_ts BIGINTEGER,
|
||||
trashed_ts BIGINTEGER,
|
||||
folder_id TEXT
|
||||
);
|
||||
|
||||
-- migrate data from old table to new table
|
||||
INSERT INTO object_metadata_new
|
||||
SELECT id, is_pending, object_type, revision_ts, server_id, client_id, shareable_object_id, last_edited_by, author_id, retry_count, team_id, metadata_last_updated_ts, trashed_ts, folder_id
|
||||
FROM object_metadata;
|
||||
|
||||
-- drop old table
|
||||
DROP TABLE object_metadata;
|
||||
|
||||
-- rename new table to old table name
|
||||
ALTER TABLE object_metadata_new RENAME TO object_metadata;
|
||||
@@ -0,0 +1,30 @@
|
||||
-- The goal is to remove the constraint on object_type.
|
||||
|
||||
-- create new table without CHECK constraint
|
||||
CREATE TABLE object_metadata_new (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
is_pending BOOLEAN NOT NULL,
|
||||
object_type TEXT NOT NULL,
|
||||
revision_ts INTEGER,
|
||||
server_id TEXT,
|
||||
client_id TEXT,
|
||||
shareable_object_id INTEGER NOT NULL,
|
||||
last_edited_by TEXT,
|
||||
author_id INTEGER,
|
||||
retry_count INTEGER NOT NULL,
|
||||
team_id BIGINTEGER,
|
||||
metadata_last_updated_ts BIGINTEGER,
|
||||
trashed_ts BIGINTEGER,
|
||||
folder_id TEXT
|
||||
);
|
||||
|
||||
-- copy data from old table to new table
|
||||
INSERT INTO object_metadata_new
|
||||
SELECT id, is_pending, object_type, revision_ts, server_id, client_id, shareable_object_id, last_edited_by, author_id, retry_count, team_id, metadata_last_updated_ts, trashed_ts, folder_id
|
||||
FROM object_metadata;
|
||||
|
||||
-- drop old table
|
||||
DROP TABLE object_metadata;
|
||||
|
||||
-- rename new table to old table name
|
||||
ALTER TABLE object_metadata_new RENAME TO object_metadata;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks DROP COLUMN rprompt;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks ADD COLUMN rprompt TEXT;
|
||||
@@ -0,0 +1,11 @@
|
||||
ALTER TABLE object_metadata ADD COLUMN team_id INTEGER;
|
||||
|
||||
-- Backfilling team_id column with values from object_permissions
|
||||
UPDATE object_metadata
|
||||
SET team_id = object_permissions.subject_id
|
||||
FROM object_permissions
|
||||
WHERE object_permissions.subject_type = 'TEAM'
|
||||
AND object_metadata.id = object_permissions.object_metadata_id;
|
||||
|
||||
-- Dropping object_permissions table
|
||||
DROP TABLE IF EXISTS object_permissions;
|
||||
@@ -0,0 +1,21 @@
|
||||
-- Create the object_permissions table
|
||||
CREATE TABLE object_permissions (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
object_metadata_id INTEGER NOT NULL REFERENCES object_metadata(id) ON DELETE CASCADE,
|
||||
subject_type TEXT NOT NULL,
|
||||
-- This can be null in the case where the subject is a user. We don't know
|
||||
-- the user's ID so we currently are not able to backfill this field.
|
||||
-- We treat this case as though the current user is implicitly granted access.
|
||||
subject_id INTEGER,
|
||||
permissions_last_updated_at BIGINTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
-- Migrate the data from object_metadata to object_permissions
|
||||
INSERT INTO object_permissions (object_metadata_id, subject_type, subject_id)
|
||||
SELECT id, 'TEAM', team_id FROM object_metadata WHERE team_id IS NOT NULL;
|
||||
|
||||
INSERT INTO object_permissions(object_metadata_id, subject_type)
|
||||
SELECT id, 'USER' FROM object_metadata WHERE team_id IS NULL;
|
||||
|
||||
-- Drop the column from the object_metadata table
|
||||
ALTER TABLE object_metadata DROP COLUMN team_id;
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
-- This file should undo anything in `up.sql`
|
||||
|
||||
-- Create new table
|
||||
CREATE TABLE object_permissions_new (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
object_metadata_id INTEGER NOT NULL REFERENCES object_metadata(id) ON DELETE CASCADE,
|
||||
subject_type TEXT NOT NULL,
|
||||
-- This can be null in the case where the subject is a user. We don't know
|
||||
-- the user's ID so we currently are not able to backfill this field.
|
||||
-- We treat this case as though the current user is implicitly granted access.
|
||||
subject_id INTEGER,
|
||||
permissions_last_updated_at BIGINTEGER NOT NULL DEFAULT 0
|
||||
);
|
||||
|
||||
-- Copy values from old table
|
||||
INSERT INTO object_permissions_new
|
||||
SELECT id, object_metadata_id, subject_type, subject_id, permissions_last_updated_at
|
||||
FROM object_permissions
|
||||
WHERE permissions_last_updated_at IS NOT NULL;
|
||||
|
||||
INSERT INTO object_permissions_new
|
||||
SELECT id, object_metadata_id, subject_type, subject_id, 0
|
||||
FROM object_permissions
|
||||
WHERE permissions_last_updated_at IS NULL;
|
||||
|
||||
-- Drop old table
|
||||
DROP TABLE object_permissions;
|
||||
|
||||
-- Rename new table to old table name
|
||||
ALTER TABLE object_permissions_new RENAME TO object_permissions;
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
-- The goal is to make the permissions_last_updated_at value nullable
|
||||
|
||||
-- Create new table
|
||||
CREATE TABLE object_permissions_new (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
object_metadata_id INTEGER NOT NULL REFERENCES object_metadata(id) ON DELETE CASCADE,
|
||||
subject_type TEXT NOT NULL,
|
||||
-- This can be null in the case where the subject is a user. We don't know
|
||||
-- the user's ID so we currently are not able to backfill this field.
|
||||
-- We treat this case as though the current user is implicitly granted access.
|
||||
subject_id INTEGER,
|
||||
permissions_last_updated_at BIGINTEGER
|
||||
);
|
||||
|
||||
-- Copy values from old table
|
||||
INSERT INTO object_permissions_new
|
||||
SELECT id, object_metadata_id, subject_type, subject_id, permissions_last_updated_at
|
||||
FROM object_permissions;
|
||||
|
||||
-- Drop old table
|
||||
DROP TABLE object_permissions;
|
||||
|
||||
-- Rename new table to old table name
|
||||
ALTER TABLE object_permissions_new RENAME TO object_permissions;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata DROP is_welcome_object;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata ADD is_welcome_object BOOLEAN NOT NULL DEFAULT false;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS commands;
|
||||
@@ -0,0 +1,14 @@
|
||||
CREATE TABLE commands (
|
||||
id INTEGER NOT NULL PRIMARY KEY,
|
||||
command TEXT NOT NULL,
|
||||
exit_code INTEGER,
|
||||
start_ts DATETIME,
|
||||
completed_ts DATETIME,
|
||||
pwd TEXT,
|
||||
shell TEXT,
|
||||
username TEXT,
|
||||
hostname TEXT,
|
||||
session_id BIGINTEGER,
|
||||
git_branch TEXT,
|
||||
cloud_workflow_id TEXT
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks DROP COLUMN prompt_snapshot;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE blocks ADD COLUMN prompt_snapshot TEXT;
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE commands DROP COLUMN workflow_command;
|
||||
+1
@@ -0,0 +1 @@
|
||||
ALTER TABLE commands ADD workflow_command TEXT;
|
||||
@@ -0,0 +1,23 @@
|
||||
PRAGMA foreign_keys = off;
|
||||
|
||||
-- This also follows the required SQLite schema-change approach from
|
||||
-- https://www.sqlite.org/lang_altertable.html#making_other_kinds_of_table_schema_changes,
|
||||
-- but using the pre-migration schema.
|
||||
|
||||
CREATE TABLE rollback_pane_leaves (
|
||||
uuid BLOB PRIMARY KEY NOT NULL,
|
||||
pane_node_id INTEGER NOT NULL UNIQUE REFERENCES pane_nodes(id),
|
||||
cwd TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT FALSE
|
||||
);
|
||||
|
||||
INSERT INTO rollback_pane_leaves (uuid, pane_node_id, cwd, is_active)
|
||||
SELECT uuid, id as pane_node_id, cwd, is_active
|
||||
FROM terminal_panes;
|
||||
|
||||
DROP TABLE terminal_panes;
|
||||
DROP TABLE pane_leaves;
|
||||
ALTER TABLE rollback_pane_leaves RENAME TO pane_leaves;
|
||||
|
||||
PRAGMA foreign_key_check;
|
||||
PRAGMA foreign_keys = on;
|
||||
@@ -0,0 +1,38 @@
|
||||
-- Schema change approach from https://www.sqlite.org/lang_altertable.html#making_other_kinds_of_table_schema_changes
|
||||
|
||||
PRAGMA foreign_keys = off;
|
||||
|
||||
CREATE TABLE new_pane_leaves (
|
||||
pane_node_id INTEGER NOT NULL UNIQUE REFERENCES pane_nodes(id),
|
||||
-- This does not have a CHECK constraint because, when we add new kinds of panes in the future,
|
||||
-- it's difficult to update the constraint.
|
||||
kind TEXT NOT NULL,
|
||||
is_focused BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
|
||||
PRIMARY KEY (pane_node_id, kind)
|
||||
);
|
||||
|
||||
CREATE TABLE terminal_panes (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
kind TEXT NOT NULL DEFAULT 'terminal' CHECK (kind = 'terminal'),
|
||||
|
||||
uuid BLOB NOT NULL UNIQUE,
|
||||
cwd TEXT,
|
||||
is_active BOOLEAN NOT NULL DEFAULT FALSE,
|
||||
|
||||
FOREIGN KEY (id, kind) REFERENCES new_pane_leaves(pane_node_id, kind)
|
||||
);
|
||||
|
||||
INSERT INTO new_pane_leaves (pane_node_id, kind, is_focused)
|
||||
SELECT pane_node_id, 'terminal' as kind, is_active as is_focused
|
||||
FROM pane_leaves;
|
||||
|
||||
INSERT INTO terminal_panes (id, uuid, cwd, is_active)
|
||||
SELECT pane_node_id, uuid, cwd, is_active
|
||||
FROM pane_leaves;
|
||||
|
||||
DROP TABLE pane_leaves;
|
||||
ALTER TABLE new_pane_leaves RENAME TO pane_leaves;
|
||||
|
||||
PRAGMA foreign_key_check;
|
||||
PRAGMA foreign_keys = on;
|
||||
@@ -0,0 +1,5 @@
|
||||
-- Notebook panes are new, so we can undo the migration by removing them completely.
|
||||
-- To avoid foreign key errors, we have to delete any saved notebook panes.
|
||||
|
||||
DELETE FROM pane_leaves WHERE kind = 'notebook';
|
||||
DROP TABLE notebook_panes;
|
||||
@@ -0,0 +1,10 @@
|
||||
-- This adds a table for restoring open notebook panes.
|
||||
CREATE TABLE notebook_panes (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
kind TEXT NOT NULL DEFAULT 'notebook' CHECK (kind = 'notebook'),
|
||||
|
||||
-- The sync ID of the notebook. This may be null if the notebook has not yet been saved.
|
||||
notebook_id TEXT,
|
||||
|
||||
FOREIGN KEY (id, kind) REFERENCES pane_leaves (pane_node_id, kind)
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE IF EXISTS user_profiles;
|
||||
@@ -0,0 +1,6 @@
|
||||
CREATE TABLE user_profiles (
|
||||
firebase_uid TEXT NOT NULL PRIMARY KEY,
|
||||
photo_url TEXT NOT NULL,
|
||||
email TEXT NOT NULL,
|
||||
display_name TEXT
|
||||
);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE windows ADD warp_drive_asset_width FLOAT CHECK (warp_drive_asset_width >= 0);
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE windows DROP warp_drive_asset_width;
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE object_metadata ADD last_edited_by TEXT;
|
||||
ALTER TABLE object_metadata DROP creator_uid;
|
||||
ALTER TABLE object_metadata DROP last_editor_uid;
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE object_metadata DROP last_edited_by;
|
||||
ALTER TABLE object_metadata ADD creator_uid TEXT;
|
||||
ALTER TABLE object_metadata ADD last_editor_uid TEXT;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata DROP current_editor;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE object_metadata ADD current_editor TEXT;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE workflows ADD user_can_delete BOOLEAN NOT NULL DEFAULT FALSE;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE workflows DROP COLUMN user_can_delete;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE teams DROP server_uid;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE teams ADD server_uid TEXT;
|
||||
@@ -0,0 +1 @@
|
||||
DROP TABLE cloud_objects_refreshes;
|
||||
@@ -0,0 +1,5 @@
|
||||
CREATE TABLE cloud_objects_refreshes (
|
||||
id INTEGER PRIMARY KEY NOT NULL,
|
||||
description TEXT,
|
||||
refreshed BOOLEAN NOT NULL
|
||||
);
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user