Src |
CREATE FUNCTION "URX_PUBLIC"."_add_raster_constraint_scale"(rastschema name, rasttable name, rastcolumn name, axis character)
RETURNS boolean AS
$BODY$
DECLARE
fqtn text;
cn name;
sql text;
attr double precision;
BEGIN
IF lower($4) != 'x' AND lower($4) != 'y' THEN
RAISE EXCEPTION 'axis must be either "x" or "y"';
RETURN FALSE;
END IF;
fqtn := '';
IF length($1) > 0 THEN
fqtn := quote_ident($1) || '.';
END IF;
fqtn := fqtn || quote_ident($2);
cn := 'enforce_scale' || $4 || '_' || $3;
sql := 'SELECT st_scale' || $4 || '('
|| quote_ident($3)
|| ') FROM '
|| fqtn
|| ' LIMIT 1';
BEGIN
EXECUTE sql INTO attr;
EXCEPTION WHEN OTHERS THEN
RAISE NOTICE 'Unable to get the %-scale of a sample raster: % (%)',
upper($4), SQLERRM, SQLSTATE;
RETURN FALSE;
END;
sql := 'ALTER TABLE ' || fqtn
|| ' ADD CONSTRAINT ' || quote_ident(cn)
|| ' CHECK (round(st_scale' || $4 || '('
|| quote_ident($3)
|| ')::numeric, 10) = round(' || text(attr) || '::numeric, 10))';
RETURN "URX_PUBLIC"._add_raster_constraint(cn, sql);
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILESTRICT ;
|