Skip to content

Commit

Permalink
restore create/drop symbology functions (#29)
Browse files Browse the repository at this point in the history
* restore create/drop symbology functions

* add test
  • Loading branch information
3nids authored Dec 1, 2023
1 parent 41b8254 commit c605ee2
Show file tree
Hide file tree
Showing 2 changed files with 131 additions and 0 deletions.
105 changes: 105 additions & 0 deletions datamodel/app/symbology_functions.sql
Original file line number Diff line number Diff line change
Expand Up @@ -659,12 +659,117 @@ END;
$BODY$
LANGUAGE plpgsql VOLATILE;

-----------------------------------------------------------------------
-- Drop Symbology Triggers
-- To temporarily disable these cache refreshes for batch jobs like migrations
-----------------------------------------------------------------------

CREATE OR REPLACE FUNCTION tww_sys.drop_symbology_triggers() RETURNS VOID AS $$
BEGIN
DROP TRIGGER IF EXISTS on_reach_point_update ON tww_od.reach_point;
DROP TRIGGER IF EXISTS on_reach_2_change ON tww_od.reach;
DROP TRIGGER IF EXISTS on_reach_1_delete ON tww_od.reach;
DROP TRIGGER IF EXISTS on_wastewater_structure_update ON tww_od.wastewater_structure;
DROP TRIGGER IF EXISTS ws_label_update_by_wastewater_networkelement ON tww_od.wastewater_networkelement;
DROP TRIGGER IF EXISTS on_structure_part_change ON tww_od.structure_part;
DROP TRIGGER IF EXISTS on_cover_change ON tww_od.cover;
DROP TRIGGER IF EXISTS on_wasterwaternode_change ON tww_od.wastewater_node;
DROP TRIGGER IF EXISTS ws_symbology_update_by_reach ON tww_od.reach;
DROP TRIGGER IF EXISTS ws_symbology_update_by_channel ON tww_od.channel;
DROP TRIGGER IF EXISTS ws_symbology_update_by_reach_point ON tww_od.reach_point;
DROP TRIGGER IF EXISTS calculate_reach_length ON tww_od.reach;
RETURN;
END;
$$ LANGUAGE plpgsql;

-----------------------------------------------------------------------
-- Create Symbology Triggers
-----------------------------------------------------------------------

CREATE OR REPLACE FUNCTION tww_sys.create_symbology_triggers() RETURNS VOID AS $$
BEGIN
-- only update -> insert and delete are handled by reach trigger
CREATE TRIGGER on_reach_point_update
AFTER UPDATE
ON tww_od.reach_point
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_reach_point_update();

CREATE TRIGGER on_reach_2_change
AFTER INSERT OR UPDATE OR DELETE
ON tww_od.reach
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_reach_change();

CREATE TRIGGER on_reach_1_delete
AFTER DELETE
ON tww_od.reach
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_reach_delete();

CREATE TRIGGER calculate_reach_length
BEFORE INSERT OR UPDATE
ON tww_od.reach
FOR EACH ROW
EXECUTE PROCEDURE tww_app.calculate_reach_length();

CREATE TRIGGER ws_symbology_update_by_reach
AFTER INSERT OR UPDATE OR DELETE
ON tww_od.reach
FOR EACH ROW
EXECUTE PROCEDURE tww_app.ws_symbology_update_by_reach();

CREATE TRIGGER on_wastewater_structure_update
AFTER UPDATE
ON tww_od.wastewater_structure
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_wastewater_structure_update();

CREATE TRIGGER ws_label_update_by_wastewater_networkelement
AFTER INSERT OR UPDATE OR DELETE
ON tww_od.wastewater_networkelement
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_structure_part_change_networkelement();

CREATE TRIGGER on_structure_part_change
AFTER INSERT OR UPDATE OR DELETE
ON tww_od.structure_part
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_structure_part_change_networkelement();

CREATE TRIGGER on_cover_change
AFTER INSERT OR UPDATE OR DELETE
ON tww_od.cover
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_cover_change();

CREATE TRIGGER on_wasterwaternode_change
AFTER INSERT OR UPDATE
ON tww_od.wastewater_node
FOR EACH ROW
EXECUTE PROCEDURE tww_app.on_wasterwaternode_change();

CREATE TRIGGER ws_symbology_update_by_channel
AFTER INSERT OR UPDATE OR DELETE
ON tww_od.channel
FOR EACH ROW
EXECUTE PROCEDURE tww_app.ws_symbology_update_by_channel();

-- only update -> insert and delete are handled by reach trigger
CREATE TRIGGER ws_symbology_update_by_reach_point
AFTER UPDATE
ON tww_od.reach_point
FOR EACH ROW
EXECUTE PROCEDURE tww_app.ws_symbology_update_by_reach_point();


RETURN;
END;
$$ LANGUAGE plpgsql;

-- Activate triggers by default
SELECT tww_sys.create_symbology_triggers();

-- only update -> insert and delete are handled by reach trigger
CREATE TRIGGER tr_symb_on_reach_point_update
AFTER UPDATE
Expand Down
26 changes: 26 additions & 0 deletions datamodel/test/test_symbology.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import os
import unittest

import psycopg2
import psycopg2.extras

from .utils import DEFAULT_PG_SERVICE, DbTestBase


class TestViews(unittest.TestCase, DbTestBase):
@classmethod
def tearDownClass(cls):
cls.conn.rollback()

@classmethod
def setUpClass(cls):
pgservice = os.environ.get("PGSERVICE") or DEFAULT_PG_SERVICE
cls.conn = psycopg2.connect(f"service={pgservice}")

def test_create_drop_triggers(self):
self.execute("tww_sys.drop_symbology_triggers()")
self.execute("tww_sys.create_symbology_triggers()")


if __name__ == "__main__":
unittest.main()

0 comments on commit c605ee2

Please sign in to comment.