From f152430805d937c038a4a8cd04834dd8ec365650 Mon Sep 17 00:00:00 2001 From: PotapovaA Date: Tue, 13 Oct 2026 16:07:12 +0300 Subject: [PATCH] =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=81=D1=82=D0=B0=D1=80=D1=8B=D1=85=20=D1=84=D1=83?= =?UTF-8?q?=D0=BD=D0=BA=D1=86=D0=B8=D0=B9=20=D0=B2=20=D0=B1=D0=B4=20(?= =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?=D0=B8=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=81=D0=BF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../versions/0047_remove_old_vsp_functions.py | 102 ++++++++++++++++++ 1 file changed, 102 insertions(+) create mode 100644 api/alembic/versions/0047_remove_old_vsp_functions.py 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