Initial public release of Warp.

Repo-Sync-Origin: warpdotdev/warp-internal@12af1d983b
This commit is contained in:
David Stern
2026-04-28 08:43:33 -05:00
commit 0dbd3d567a
4982 changed files with 1431549 additions and 0 deletions
+23
View File
@@ -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
+9
View File
@@ -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
);
@@ -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;
@@ -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;
@@ -0,0 +1 @@
ALTER TABLE tabs DROP COLUMN custom_title;
@@ -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)
);
@@ -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);
@@ -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
);
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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);
@@ -0,0 +1 @@
ALTER TABLE object_metadata DROP metadata_last_updated_ts;
@@ -0,0 +1 @@
ALTER TABLE object_metadata ADD metadata_last_updated_ts BIGINTEGER;
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -0,0 +1 @@
ALTER TABLE commands DROP COLUMN workflow_command;
@@ -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