diff --git a/api/alembic/versions/0047_remove_old_vsp_functions.py b/api/alembic/versions/0047_remove_old_vsp_functions.py new file mode 100644 index 0000000..04341b1 --- /dev/null +++ b/api/alembic/versions/0047_remove_old_vsp_functions.py @@ -0,0 +1,102 @@ +from alembic import op + + +revision = "0047" +down_revision = "0046" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # Verify that the implementations used by the API exist before removing + # historical signatures. CREATE OR REPLACE does not replace overloads. + op.execute( + """ + DO $migration$ + BEGIN + IF to_regprocedure( + 'v3.add_vsp(integer, varchar, varchar, varchar, date, ' + 'varchar, integer, numeric, date, boolean, boolean, varchar, ' + 'integer, varchar, text, varchar, date)' + ) IS NULL THEN + RAISE EXCEPTION 'Current v3.add_vsp function is missing'; + END IF; + + IF to_regprocedure( + 'v3.upd_vsp(integer, integer, varchar, varchar, varchar, ' + 'date, varchar, integer, numeric, date, boolean, boolean, ' + 'varchar, integer, varchar, text, varchar, date)' + ) IS NULL THEN + RAISE EXCEPTION 'Current v3.upd_vsp function is missing'; + END IF; + END + $migration$; + """ + ) + + # The first two may still have their temporary names in production. + for function_name in ("add_vsp", "add_vsp_1"): + op.execute( + f""" + DROP FUNCTION IF EXISTS v3.{function_name}( + integer, varchar, varchar, varchar, date, varchar, + integer, numeric, date, boolean, boolean, varchar, + integer, varchar, text, varchar, integer, varchar, date + ) RESTRICT + """ + ) + + for function_name in ("add_vsp", "add_vsp_2"): + op.execute( + f""" + DROP FUNCTION IF EXISTS v3.{function_name}( + integer, varchar, varchar, varchar, date, varchar, + integer, numeric + ) RESTRICT + """ + ) + + op.execute( + """ + DROP FUNCTION IF EXISTS v3.upd_vsp( + integer, integer, varchar, varchar, varchar, date, varchar, + integer, numeric, date, boolean, boolean, varchar, integer, + varchar, text, varchar, integer, varchar, date + ) RESTRICT + """ + ) + op.execute( + """ + DROP FUNCTION IF EXISTS v3.upd_vsp( + integer, integer, varchar, varchar, varchar, date, varchar, + integer, numeric + ) RESTRICT + """ + ) + + op.execute( + """ + DO $migration$ + BEGIN + IF ( + SELECT count(*) + FROM pg_proc AS p + JOIN pg_namespace AS n ON n.oid = p.pronamespace + WHERE n.nspname = 'v3' AND p.proname = 'add_vsp' + ) <> 1 OR ( + SELECT count(*) + FROM pg_proc AS p + JOIN pg_namespace AS n ON n.oid = p.pronamespace + WHERE n.nspname = 'v3' AND p.proname = 'upd_vsp' + ) <> 1 THEN + RAISE EXCEPTION 'Unexpected v3.add_vsp or v3.upd_vsp overload remains'; + END IF; + END + $migration$; + """ + ) + + +def downgrade() -> None: + # The obsolete function bodies are not part of the current schema. + pass