Files
insar-management-system-v2/backend/migrations/001_st_intersection_agg.sql
T

30 lines
1.1 KiB
PL/PgSQL

-- Migration: Create st_intersection_agg function for efficient geometry intersection
-- This function reduces a set of geometries to their geometric intersection.
-- If no geometries are provided, it returns NULL.
-- Drop existing aggregate and function if they exist (for idempotency)
DROP AGGREGATE IF EXISTS st_intersection_agg(geometry);
DROP FUNCTION IF EXISTS st_intersection_agg(geometry, geometry);
-- Create the aggregation function
CREATE OR REPLACE FUNCTION st_intersection_agg(g1 geometry, g2 geometry)
RETURNS geometry AS
$$
SELECT CASE WHEN g1 IS NULL THEN g2
WHEN g2 IS NULL THEN g1
ELSE ST_Intersection(g1, g2) END;
$$
LANGUAGE SQL;
COMMENT ON FUNCTION st_intersection_agg(geometry, geometry) IS
'Aggregates a set of geometries by computing the intersection pairwise. Returns NULL if input is empty.';
-- Create aggregate wrapper for single-argument usage in SQL queries
CREATE AGGREGATE st_intersection_agg(geometry) (
SFUNC = st_intersection_agg,
STYPE = geometry
);
COMMENT ON AGGREGATE st_intersection_agg(geometry) IS
'Aggregates a set of geometries by computing the intersection pairwise.';