Mercurial > gemma
diff schema/gemma.sql @ 4602:9fef9930aa8a geoserver_sql_views
Add field for GeoServer SQL view definition
author | Tom Gottfried <tom@intevation.de> |
---|---|
date | Mon, 02 Sep 2019 18:45:15 +0200 |
parents | 27ed6f709195 |
children | d24e951206ca |
line wrap: on
line diff
--- a/schema/gemma.sql Mon Sep 02 18:38:27 2019 +0200 +++ b/schema/gemma.sql Mon Sep 02 18:45:15 2019 +0200 @@ -23,6 +23,25 @@ CREATE EXTENSION btree_gist; -- +-- Functions to be used in CHECK constraints +-- + +-- Check if a given string can be used as a FROM item in an SQL statement +CREATE OR REPLACE FUNCTION is_valid_from_item(stmt text) RETURNS boolean +AS $$ +BEGIN + EXECUTE format('SELECT * FROM (%s) AS test', stmt); + RETURN true; +EXCEPTION + WHEN OTHERS THEN + RAISE NOTICE USING MESSAGE = SQLERRM, ERRCODE = SQLSTATE; + RETURN false; +END +$$ + LANGUAGE plpgsql; + + +-- -- Trigger functions -- -- TODO: will there ever be UPDATEs or can we drop that function due to @@ -272,10 +291,14 @@ ) CREATE TABLE published_services ( - name regclass PRIMARY KEY, + name varchar PRIMARY KEY, + -- SQL statement used for an SQL view in GeoServer: + view_def text CHECK (is_valid_from_item(view_def)), style xml CHECK(style IS DOCUMENT), as_wms boolean NOT NULL DEFAULT TRUE, - as_wfs boolean NOT NULL DEFAULT TRUE + as_wfs boolean NOT NULL DEFAULT TRUE, + -- Either give a valid relation name or a SQL statement: + CHECK (to_regclass(name) IS NOT NULL OR view_def IS NOT NULL) ) ;