1 // Copyright © 2021 650 Industries. All rights reserved. 2 3 // swiftlint:disable line_length 4 5 import Foundation 6 import sqlite3 7 8 internal final class UpdatesDatabaseMigration4To5: UpdatesDatabaseMigration { 9 private(set) var filename: String = "expo-v4.db" 10 11 func runMigration(onDatabase db: OpaquePointer) throws { 12 try db.withForeignKeysOff { 13 try db.withTransaction { trx in 14 try trx.safeExecOrRollback(sql: """ 15 CREATE TABLE "new_assets" ( 16 "id" INTEGER PRIMARY KEY AUTOINCREMENT, 17 "url" TEXT, 18 "key" TEXT UNIQUE, 19 "headers" TEXT, 20 "type" TEXT NOT NULL, 21 "metadata" TEXT, 22 "download_time" INTEGER NOT NULL, 23 "relative_path" TEXT NOT NULL, 24 "hash" BLOB NOT NULL, 25 "hash_type" INTEGER NOT NULL, 26 "marked_for_deletion" INTEGER NOT NULL 27 ) 28 """) 29 30 try trx.safeExecOrRollback(sql: """ 31 INSERT INTO `new_assets` (`id`, `url`, `key`, `headers`, `type`, `metadata`, `download_time`, `relative_path`, `hash`, `hash_type`, `marked_for_deletion`) 32 SELECT `id`, `url`, `key`, `headers`, `type`, `metadata`, `download_time`, `relative_path`, `hash`, `hash_type`, `marked_for_deletion` FROM `assets` 33 """) 34 35 try trx.safeExecOrRollback(sql: "DROP TABLE `assets`") 36 try trx.safeExecOrRollback(sql: "ALTER TABLE `new_assets` RENAME TO `assets`") 37 } 38 } 39 } 40 } 41