Add rollback of filesize column
This commit is contained in:
parent
9d4a77abd4
commit
3c33d66104
2 changed files with 64 additions and 2 deletions
|
@ -90,6 +90,11 @@ let m20210218 =
|
||||||
Cmdliner.Term.(const do_database_action $ const M20210218.migrate $ setup_log $ dbpath),
|
Cmdliner.Term.(const do_database_action $ const M20210218.migrate $ setup_log $ dbpath),
|
||||||
Cmdliner.Term.info ~doc "migrate-2021-02-18"
|
Cmdliner.Term.info ~doc "migrate-2021-02-18"
|
||||||
|
|
||||||
|
let r20210218 =
|
||||||
|
let doc = "Roll back column 'size' in 'build_file' and 'build_artifact' (2021-02-18)" in
|
||||||
|
Cmdliner.Term.(const do_database_action $ const M20210218.rollback $ setup_log $ dbpath),
|
||||||
|
Cmdliner.Term.info ~doc "rollback-2021-02-18"
|
||||||
|
|
||||||
let help_cmd =
|
let help_cmd =
|
||||||
let topic =
|
let topic =
|
||||||
let doc = "Migration to get help on" in
|
let doc = "Migration to get help on" in
|
||||||
|
@ -111,6 +116,6 @@ let () =
|
||||||
m20210126; r20210126;
|
m20210126; r20210126;
|
||||||
m20210202; r20210202;
|
m20210202; r20210202;
|
||||||
m20210216; r20210216;
|
m20210216; r20210216;
|
||||||
m20210218;
|
m20210218; r20210218;
|
||||||
]
|
]
|
||||||
|> Cmdliner.Term.exit
|
|> Cmdliner.Term.exit
|
||||||
|
|
|
@ -119,4 +119,61 @@ let migrate (module Db : Caqti_blocking.CONNECTION) =
|
||||||
|
|
||||||
Db.exec (set_version new_user_version) ()
|
Db.exec (set_version new_user_version) ()
|
||||||
|
|
||||||
(* FIXME: rollback. Requires copying data and creating new table without size column. *)
|
let old_build_artifact =
|
||||||
|
Caqti_request.exec ~oneshot:true
|
||||||
|
Caqti_type.unit
|
||||||
|
{| CREATE TABLE new_build_artifact (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
filepath TEXT NOT NULL, -- the path as in the build
|
||||||
|
localpath TEXT NOT NULL, -- local path to the file on disk
|
||||||
|
sha256 BLOB NOT NULL,
|
||||||
|
build INTEGER NOT NULL,
|
||||||
|
|
||||||
|
FOREIGN KEY(build) REFERENCES build(id),
|
||||||
|
UNIQUE(build, filepath)
|
||||||
|
)
|
||||||
|
|}
|
||||||
|
|
||||||
|
let old_build_file =
|
||||||
|
Caqti_request.exec ~oneshot:true
|
||||||
|
Caqti_type.unit
|
||||||
|
{| CREATE TABLE new_build_file (
|
||||||
|
id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
|
||||||
|
filepath TEXT NOT NULL, -- the path as in the build
|
||||||
|
localpath TEXT NOT NULL, -- local path to the file on disk
|
||||||
|
sha256 BLOB NOT NULL,
|
||||||
|
build INTEGER NOT NULL,
|
||||||
|
|
||||||
|
FOREIGN KEY(build) REFERENCES build(id),
|
||||||
|
UNIQUE(build, filepath)
|
||||||
|
)
|
||||||
|
|}
|
||||||
|
|
||||||
|
let copy_build_artifact =
|
||||||
|
Caqti_request.exec ~oneshot:true
|
||||||
|
Caqti_type.unit
|
||||||
|
"INSERT INTO new_build_artifact SELECT id, filepath, localpath, sha256, build FROM build_artifact"
|
||||||
|
|
||||||
|
let copy_build_file =
|
||||||
|
Caqti_request.exec ~oneshot:true
|
||||||
|
Caqti_type.unit
|
||||||
|
"INSERT INTO new_build_file SELECT id, filepath, localpath, sha256, build FROM build_file"
|
||||||
|
|
||||||
|
let rollback (module Db : Caqti_blocking.CONNECTION) =
|
||||||
|
let open Rresult.R.Infix in
|
||||||
|
Db.find Builder_db.get_application_id () >>= fun application_id ->
|
||||||
|
Db.find Builder_db.get_version () >>= fun user_version ->
|
||||||
|
if application_id <> Builder_db.application_id || user_version <> new_user_version
|
||||||
|
then Error (`Wrong_version (application_id, user_version))
|
||||||
|
else
|
||||||
|
Db.exec old_build_artifact () >>= fun () ->
|
||||||
|
Db.exec copy_build_artifact () >>= fun () ->
|
||||||
|
Db.exec drop_build_artifact () >>= fun () ->
|
||||||
|
Db.exec rename_build_artifact () >>= fun () ->
|
||||||
|
|
||||||
|
Db.exec old_build_file () >>= fun () ->
|
||||||
|
Db.exec copy_build_file () >>= fun () ->
|
||||||
|
Db.exec drop_build_file () >>= fun () ->
|
||||||
|
Db.exec rename_build_file () >>= fun () ->
|
||||||
|
|
||||||
|
Db.exec (set_version old_user_version) ()
|
||||||
|
|
Loading…
Reference in a new issue