mirror of
				https://github.com/dani-garcia/vaultwarden.git
				synced 2025-11-04 12:18:20 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			SQL
		
	
	
	
	
	
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.
 |