First version of DO precheck
This commit is contained in:
parent
0e7a777787
commit
f5037aab5e
39
client/sql/35_precheck_functions.sql
Normal file
39
client/sql/35_precheck_functions.sql
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
CREATE OR REPLACE FUNCTION cdb_dataservices_client._OBS_PreCheck(
|
||||||
|
source_query text,
|
||||||
|
parameters jsonb
|
||||||
|
) RETURNS boolean AS $$
|
||||||
|
DECLARE
|
||||||
|
username text;
|
||||||
|
orgname text;
|
||||||
|
errors text[];
|
||||||
|
geoms record;
|
||||||
|
BEGIN
|
||||||
|
errors := (ARRAY[])::TEXT[];
|
||||||
|
FOR geoms IN
|
||||||
|
EXECUTE FORMAT('SELECT ST_GeometryType(the_geom) as geom_type,
|
||||||
|
bool_and(st_isvalid(the_geom)) as valid,
|
||||||
|
avg(st_npoints(the_geom)) as avg_vertex
|
||||||
|
FROM (%s) as _source GROUP BY ST_GeometryType(the_geom)', source_query)
|
||||||
|
LOOP
|
||||||
|
IF geoms.geom_type NOT IN ('ST_Polygon', 'ST_MultiPolygon', 'ST_Point') THEN
|
||||||
|
errors := array_append(errors, format($data$'Geometry type %s not supported'$data$, geoms.geom_type));
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
IF geoms.valid IS FALSE THEN
|
||||||
|
errors := array_append(errors, 'There are invalid geometries in the input data, please review them');
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
-- 1000 vertex for a geometry is a limit we have in the obs_getdata function. You can check here
|
||||||
|
-- https://github.com/CartoDB/observatory-extension/blob/1.6.0/src/pg/sql/41_observatory_augmentation.sql#L813
|
||||||
|
IF geoms.avg_vertex > 1000 THEN
|
||||||
|
errors := array_append(errors, 'The average number of geometries vertex is greater than 1000, please try to simplify them');
|
||||||
|
END IF;
|
||||||
|
END LOOP;
|
||||||
|
|
||||||
|
IF CARDINALITY(errors) > 0 THEN
|
||||||
|
RAISE EXCEPTION '%', format('%s', errors);
|
||||||
|
END IF;
|
||||||
|
|
||||||
|
RETURN TRUE;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE 'plpgsql';
|
@ -1,2 +1,3 @@
|
|||||||
GRANT EXECUTE ON FUNCTION cdb_dataservices_client._DST_PrepareTableOBS_GetMeasure(output_table_name text, params json) TO publicuser;
|
GRANT EXECUTE ON FUNCTION cdb_dataservices_client._DST_PrepareTableOBS_GetMeasure(output_table_name text, params json) TO publicuser;
|
||||||
GRANT EXECUTE ON FUNCTION cdb_dataservices_client._DST_PopulateTableOBS_GetMeasure(table_name text, output_table_name text, params json) TO publicuser;
|
GRANT EXECUTE ON FUNCTION cdb_dataservices_client._DST_PopulateTableOBS_GetMeasure(table_name text, output_table_name text, params json) TO publicuser;
|
||||||
|
GRANT EXECUTE ON FUNCTION cdb_dataservices_client._OBS_PreCheck(source_query text, params JSONB) TO publicuser;
|
||||||
|
Loading…
Reference in New Issue
Block a user