default to latest if unspecified timespan/boundary id

This commit is contained in:
John Krauss
2016-05-11 17:55:52 -04:00
parent 011baaacd5
commit b2b34bfe05
3 changed files with 38 additions and 7 deletions

View File

@@ -48,21 +48,43 @@ CREATE OR REPLACE FUNCTION cdb_observatory._OBS_GetColumnData(
RETURNS SETOF JSON
AS $$
BEGIN
-- figure out highest-weight geometry_id/timespan pair for the first data column
-- TODO this should be done for each data column separately
IF geometry_id IS NULL OR timespan IS NULL THEN
EXECUTE '
SELECT data_t.timespan timespan, geom_c.id boundary_id
FROM observatory.obs_table data_t,
observatory.obs_column_table data_ct,
observatory.obs_column data_c,
observatory.obs_column_table geoid_ct,
observatory.obs_column_to_column c2c,
observatory.obs_column geom_c
WHERE data_c.id = $2
AND data_ct.column_id = data_c.id
AND data_ct.table_id = data_t.id
AND geoid_ct.table_id = data_t.id
AND geoid_ct.column_id = c2c.source_id
AND c2c.reltype = ''geom_ref''
AND geom_c.id = c2c.target_id
AND CASE WHEN $3 IS NULL THEN True ELSE $3 = timespan END
AND CASE WHEN $1 IS NULL THEN True ELSE $1 = geom_c.id END
ORDER BY geom_c.weight DESC,
data_t.timespan DESC
LIMIT 1;
' INTO timespan, geometry_id
USING geometry_id, column_ids[1], timespan;
END IF;
RETURN QUERY
EXECUTE '
WITH geomref AS (
SELECT t.table_id id
FROM observatory.OBS_column_to_column c2c,
observatory.OBS_column c,
observatory.OBS_column_table geom_ct,
observatory.OBS_column_table data_ct,
observatory.OBS_table t
observatory.OBS_column_table ct
WHERE c2c.reltype = ''geom_ref''
AND c.column_id = c2c.target_id
AND c2c.target_id = $1
AND c2c.source_id = ct.column_id
ORDER BY weight DESC
LIMIT 1
),
column_ids as (
select row_number() over () as no, a.column_id as column_id from (select unnest($2) as column_id) a