Daniel García
4 years ago
committed by
GitHub
12 changed files with 258 additions and 40 deletions
@ -0,0 +1,13 @@ |
|||||
|
ALTER TABLE ciphers |
||||
|
ADD COLUMN favorite BOOLEAN NOT NULL DEFAULT FALSE; |
||||
|
|
||||
|
-- Transfer favorite status for user-owned ciphers. |
||||
|
UPDATE ciphers |
||||
|
SET favorite = TRUE |
||||
|
WHERE EXISTS ( |
||||
|
SELECT * FROM favorites |
||||
|
WHERE favorites.user_uuid = ciphers.user_uuid |
||||
|
AND favorites.cipher_uuid = ciphers.uuid |
||||
|
); |
||||
|
|
||||
|
DROP TABLE favorites; |
@ -0,0 +1,16 @@ |
|||||
|
CREATE TABLE favorites ( |
||||
|
user_uuid CHAR(36) NOT NULL REFERENCES users(uuid), |
||||
|
cipher_uuid CHAR(36) NOT NULL REFERENCES ciphers(uuid), |
||||
|
|
||||
|
PRIMARY KEY (user_uuid, cipher_uuid) |
||||
|
); |
||||
|
|
||||
|
-- Transfer favorite status for user-owned ciphers. |
||||
|
INSERT INTO favorites(user_uuid, cipher_uuid) |
||||
|
SELECT user_uuid, uuid |
||||
|
FROM ciphers |
||||
|
WHERE favorite = TRUE |
||||
|
AND user_uuid IS NOT NULL; |
||||
|
|
||||
|
ALTER TABLE ciphers |
||||
|
DROP COLUMN favorite; |
@ -0,0 +1,13 @@ |
|||||
|
ALTER TABLE ciphers |
||||
|
ADD COLUMN favorite BOOLEAN NOT NULL DEFAULT FALSE; |
||||
|
|
||||
|
-- Transfer favorite status for user-owned ciphers. |
||||
|
UPDATE ciphers |
||||
|
SET favorite = TRUE |
||||
|
WHERE EXISTS ( |
||||
|
SELECT * FROM favorites |
||||
|
WHERE favorites.user_uuid = ciphers.user_uuid |
||||
|
AND favorites.cipher_uuid = ciphers.uuid |
||||
|
); |
||||
|
|
||||
|
DROP TABLE favorites; |
@ -0,0 +1,16 @@ |
|||||
|
CREATE TABLE favorites ( |
||||
|
user_uuid VARCHAR(40) NOT NULL REFERENCES users(uuid), |
||||
|
cipher_uuid VARCHAR(40) NOT NULL REFERENCES ciphers(uuid), |
||||
|
|
||||
|
PRIMARY KEY (user_uuid, cipher_uuid) |
||||
|
); |
||||
|
|
||||
|
-- Transfer favorite status for user-owned ciphers. |
||||
|
INSERT INTO favorites(user_uuid, cipher_uuid) |
||||
|
SELECT user_uuid, uuid |
||||
|
FROM ciphers |
||||
|
WHERE favorite = TRUE |
||||
|
AND user_uuid IS NOT NULL; |
||||
|
|
||||
|
ALTER TABLE ciphers |
||||
|
DROP COLUMN favorite; |
@ -0,0 +1,13 @@ |
|||||
|
ALTER TABLE ciphers |
||||
|
ADD COLUMN favorite BOOLEAN NOT NULL DEFAULT 0; -- FALSE |
||||
|
|
||||
|
-- Transfer favorite status for user-owned ciphers. |
||||
|
UPDATE ciphers |
||||
|
SET favorite = 1 |
||||
|
WHERE EXISTS ( |
||||
|
SELECT * FROM favorites |
||||
|
WHERE favorites.user_uuid = ciphers.user_uuid |
||||
|
AND favorites.cipher_uuid = ciphers.uuid |
||||
|
); |
||||
|
|
||||
|
DROP TABLE favorites; |
@ -0,0 +1,71 @@ |
|||||
|
CREATE TABLE favorites ( |
||||
|
user_uuid TEXT NOT NULL REFERENCES users(uuid), |
||||
|
cipher_uuid TEXT NOT NULL REFERENCES ciphers(uuid), |
||||
|
|
||||
|
PRIMARY KEY (user_uuid, cipher_uuid) |
||||
|
); |
||||
|
|
||||
|
-- Transfer favorite status for user-owned ciphers. |
||||
|
INSERT INTO favorites(user_uuid, cipher_uuid) |
||||
|
SELECT user_uuid, uuid |
||||
|
FROM ciphers |
||||
|
WHERE favorite = 1 |
||||
|
AND user_uuid IS NOT NULL; |
||||
|
|
||||
|
-- Drop the `favorite` column from the `ciphers` table, using the 12-step |
||||
|
-- procedure from <https://www.sqlite.org/lang_altertable.html#altertabrename>. |
||||
|
-- Note that some steps aren't applicable and are omitted. |
||||
|
|
||||
|
-- 1. If foreign key constraints are enabled, disable them using PRAGMA foreign_keys=OFF. |
||||
|
-- |
||||
|
-- Diesel runs each migration in its own transaction. `PRAGMA foreign_keys` |
||||
|
-- is a no-op within a transaction, so this step must be done outside of this |
||||
|
-- file, before starting the Diesel migrations. |
||||
|
|
||||
|
-- 2. Start a transaction. |
||||
|
-- |
||||
|
-- Diesel already runs each migration in its own transaction. |
||||
|
|
||||
|
-- 4. Use CREATE TABLE to construct a new table "new_X" that is in the |
||||
|
-- desired revised format of table X. Make sure that the name "new_X" does |
||||
|
-- not collide with any existing table name, of course. |
||||
|
|
||||
|
CREATE TABLE new_ciphers( |
||||
|
uuid TEXT NOT NULL PRIMARY KEY, |
||||
|
created_at DATETIME NOT NULL, |
||||
|
updated_at DATETIME NOT NULL, |
||||
|
user_uuid TEXT REFERENCES users(uuid), |
||||
|
organization_uuid TEXT REFERENCES organizations(uuid), |
||||
|
atype INTEGER NOT NULL, |
||||
|
name TEXT NOT NULL, |
||||
|
notes TEXT, |
||||
|
fields TEXT, |
||||
|
data TEXT NOT NULL, |
||||
|
password_history TEXT, |
||||
|
deleted_at DATETIME |
||||
|
); |
||||
|
|
||||
|
-- 5. Transfer content from X into new_X using a statement like: |
||||
|
-- INSERT INTO new_X SELECT ... FROM X. |
||||
|
|
||||
|
INSERT INTO new_ciphers(uuid, created_at, updated_at, user_uuid, organization_uuid, atype, |
||||
|
name, notes, fields, data, password_history, deleted_at) |
||||
|
SELECT uuid, created_at, updated_at, user_uuid, organization_uuid, atype, |
||||
|
name, notes, fields, data, password_history, deleted_at |
||||
|
FROM ciphers; |
||||
|
|
||||
|
-- 6. Drop the old table X: DROP TABLE X. |
||||
|
|
||||
|
DROP TABLE ciphers; |
||||
|
|
||||
|
-- 7. Change the name of new_X to X using: ALTER TABLE new_X RENAME TO X. |
||||
|
|
||||
|
ALTER TABLE new_ciphers RENAME TO ciphers; |
||||
|
|
||||
|
-- 11. Commit the transaction started in step 2. |
||||
|
|
||||
|
-- 12. If foreign keys constraints were originally enabled, reenable them now. |
||||
|
-- |
||||
|
-- `PRAGMA foreign_keys` is scoped to a database connection, and Diesel |
||||
|
-- migrations are run in a separate database connection that is closed once |
||||
|
-- the migrations finish. |
Loading…
Reference in new issue