From c10da16d55e74d6baede7990814438d10e7e2a68 Mon Sep 17 00:00:00 2001 From: Stuart Lynn Date: Wed, 20 Apr 2016 17:24:07 -0400 Subject: [PATCH 1/5] adding _OBS_GetRelatedColumn function --- src/pg/sql/40_observatory_utility.sql | 22 ++++++++++ .../expected/40_observatory_utility_test.out | 41 +++++++++++++------ .../test/sql/40_observatory_utility_test.sql | 10 +++++ 3 files changed, 60 insertions(+), 13 deletions(-) diff --git a/src/pg/sql/40_observatory_utility.sql b/src/pg/sql/40_observatory_utility.sql index d1b1f3b..22948a7 100644 --- a/src/pg/sql/40_observatory_utility.sql +++ b/src/pg/sql/40_observatory_utility.sql @@ -151,3 +151,25 @@ BEGIN END; $$ LANGUAGE plpgsql; + +CREATE OR REPLACE FUNCTION cdb_observatory._GetRelatedColumn(columns_ids text[], reltype text ) +RETURNS TEXT[] +AS $$ +DECLARE + result TEXT[]; +BEGIN + EXECUTE ' + With ids as ( + select row_number() over() as no, id from (select unnest($1) as id) t + ) + select array_agg(target_id order by no) + FROM ids + LEFT JOIN observatory.obs_column_to_column + on source_id = id + where reltype = $2 or reltype is null + ' + INTO result + using columns_ids, reltype; + return result; +END; +$$ LANGUAGE plpgsql; diff --git a/src/pg/test/expected/40_observatory_utility_test.out b/src/pg/test/expected/40_observatory_utility_test.out index a0dca1f..9b54718 100644 --- a/src/pg/test/expected/40_observatory_utility_test.out +++ b/src/pg/test/expected/40_observatory_utility_test.out @@ -29,7 +29,7 @@ SELECT CDB_LatLng(40.7128,-74.0059), '"us.census.tiger".census_tract' ); - _obs_geomtable + _obs_geomtable ---------------------------------------------- obs_a92e1111ad3177676471d66bb8036e6d057f271b (1 row) @@ -41,9 +41,9 @@ SELECT CDB_LatLng(40.7128,-74.0059), '"us.census.tiger".nonexistant_id' -- not in catalog ); - _obs_geomtable + _obs_geomtable ---------------- - + (1 row) -- future test: give back nulls when geometry doesn't intersect @@ -65,11 +65,11 @@ SELECT '2009 - 2013' ))).* ORDER BY colname, tablename ASC; - colname | tablename | aggregate + colname | tablename | aggregate -----------+----------------------------------------------+----------- - geoid | obs_11ee8b82c877c073438bc935a91d3dfccef875d1 | - geoid | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | - geoid | obs_d34555209878e8c4b37cf0b2b3d072ff129ec470 | + geoid | obs_11ee8b82c877c073438bc935a91d3dfccef875d1 | + geoid | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | + geoid | obs_d34555209878e8c4b37cf0b2b3d072ff129ec470 | total_pop | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | sum (4 rows) @@ -81,7 +81,7 @@ SELECT '2009 - 2013' ))).* ORDER BY 1 ASC; - colname | tablename | aggregate + colname | tablename | aggregate ---------+-----------+----------- (0 rows) @@ -91,7 +91,7 @@ SELECT cdb_observatory._OBS_LookupCensusHuman( Array['gini_index'] ); - _obs_lookupcensushuman + _obs_lookupcensushuman --------------------------------- {"\"us.census.acs\".B19083001"} (1 row) @@ -101,9 +101,9 @@ SELECT cdb_observatory._OBS_LookupCensusHuman( Array['cookies'] ); - _obs_lookupcensushuman + _obs_lookupcensushuman ------------------------ - + (1 row) -- OBS_BuildSnapshotQuery @@ -112,7 +112,7 @@ SELECT cdb_observatory._OBS_BuildSnapshotQuery( Array['total_pop','male_pop','female_pop','median_age'] ); - _obs_buildsnapshotquery + _obs_buildsnapshotquery ------------------------------------------------------------------------------------------------- SELECT vals[1] As total_pop, vals[2] As male_pop, vals[3] As female_pop, vals[4] As median_age (1 row) @@ -122,11 +122,26 @@ SELECT cdb_observatory._OBS_BuildSnapshotQuery( Array['mandarin_orange'] ); - _obs_buildsnapshotquery + _obs_buildsnapshotquery ------------------------------------ SELECT vals[1] As mandarin_orange (1 row) +-- should give back "\"es.ine\".total_pop",NULL,"\"us.census.acs\".B01001001"} +SELECT + select * from cdb_observatory._GetRelatedColumn( + Array[ + '"es.ine".pop_0_4', + '"us.census.acs".B01001001', + '"us.census.acs".B01001002' + ], + 'denominator' + ); + _getrelatedcolumn +------------------------------------------------------------- +{"\"es.ine\".total_pop",NULL,"\"us.census.acs\".B01001001"} +(1 row) + \i test/sql/drop_fixtures.sql SET client_min_messages TO NOTICE; \set ECHO none diff --git a/src/pg/test/sql/40_observatory_utility_test.sql b/src/pg/test/sql/40_observatory_utility_test.sql index 9067f8e..677c369 100644 --- a/src/pg/test/sql/40_observatory_utility_test.sql +++ b/src/pg/test/sql/40_observatory_utility_test.sql @@ -75,4 +75,14 @@ SELECT Array['mandarin_orange'] ); +SELECT + select * from cdb_observatory._GetRelatedColumn( + Array[ + '"es.ine".pop_0_4', + '"us.census.acs".B01001001', + '"us.census.acs".B01001002' + ], + 'denominator' + ); + \i test/sql/drop_fixtures.sql From 6684c67e6168d21057b539f637bc1d8291c1bf01 Mon Sep 17 00:00:00 2001 From: Stuart Lynn Date: Thu, 21 Apr 2016 12:14:30 -0400 Subject: [PATCH 2/5] updating function name --- src/pg/sql/40_observatory_utility.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pg/sql/40_observatory_utility.sql b/src/pg/sql/40_observatory_utility.sql index 22948a7..6eb22c1 100644 --- a/src/pg/sql/40_observatory_utility.sql +++ b/src/pg/sql/40_observatory_utility.sql @@ -152,7 +152,7 @@ BEGIN END; $$ LANGUAGE plpgsql; -CREATE OR REPLACE FUNCTION cdb_observatory._GetRelatedColumn(columns_ids text[], reltype text ) +CREATE OR REPLACE FUNCTION cdb_observatory._OBS_GetRelatedColumn(columns_ids text[], reltype text ) RETURNS TEXT[] AS $$ DECLARE From b8148768b8282501ff06252c472d053bd6b68767 Mon Sep 17 00:00:00 2001 From: John Krauss Date: Thu, 21 Apr 2016 12:22:20 -0400 Subject: [PATCH 3/5] fix whitespace and bug in test call --- .../expected/40_observatory_utility_test.out | 20 +++++++++---------- .../test/sql/40_observatory_utility_test.sql | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/pg/test/expected/40_observatory_utility_test.out b/src/pg/test/expected/40_observatory_utility_test.out index 9b54718..04978c3 100644 --- a/src/pg/test/expected/40_observatory_utility_test.out +++ b/src/pg/test/expected/40_observatory_utility_test.out @@ -29,7 +29,7 @@ SELECT CDB_LatLng(40.7128,-74.0059), '"us.census.tiger".census_tract' ); - _obs_geomtable + _obs_geomtable ---------------------------------------------- obs_a92e1111ad3177676471d66bb8036e6d057f271b (1 row) @@ -41,7 +41,7 @@ SELECT CDB_LatLng(40.7128,-74.0059), '"us.census.tiger".nonexistant_id' -- not in catalog ); - _obs_geomtable + _obs_geomtable ---------------- (1 row) @@ -54,7 +54,7 @@ SELECT -- ); -- OBS_GetColumnData -- should give back: --- colname | tablename | aggregate +-- colname | tablename | aggregate -- -----------|-----------------|----------- -- geoid | obs_{hex table} | null -- total_pop | obs_{hex table} | sum @@ -65,7 +65,7 @@ SELECT '2009 - 2013' ))).* ORDER BY colname, tablename ASC; - colname | tablename | aggregate + colname | tablename | aggregate -----------+----------------------------------------------+----------- geoid | obs_11ee8b82c877c073438bc935a91d3dfccef875d1 | geoid | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | @@ -81,7 +81,7 @@ SELECT '2009 - 2013' ))).* ORDER BY 1 ASC; - colname | tablename | aggregate + colname | tablename | aggregate ---------+-----------+----------- (0 rows) @@ -91,7 +91,7 @@ SELECT cdb_observatory._OBS_LookupCensusHuman( Array['gini_index'] ); - _obs_lookupcensushuman + _obs_lookupcensushuman --------------------------------- {"\"us.census.acs\".B19083001"} (1 row) @@ -101,7 +101,7 @@ SELECT cdb_observatory._OBS_LookupCensusHuman( Array['cookies'] ); - _obs_lookupcensushuman + _obs_lookupcensushuman ------------------------ (1 row) @@ -112,7 +112,7 @@ SELECT cdb_observatory._OBS_BuildSnapshotQuery( Array['total_pop','male_pop','female_pop','median_age'] ); - _obs_buildsnapshotquery + _obs_buildsnapshotquery ------------------------------------------------------------------------------------------------- SELECT vals[1] As total_pop, vals[2] As male_pop, vals[3] As female_pop, vals[4] As median_age (1 row) @@ -122,7 +122,7 @@ SELECT cdb_observatory._OBS_BuildSnapshotQuery( Array['mandarin_orange'] ); - _obs_buildsnapshotquery + _obs_buildsnapshotquery ------------------------------------ SELECT vals[1] As mandarin_orange (1 row) @@ -137,7 +137,7 @@ SELECT ], 'denominator' ); - _getrelatedcolumn + _getrelatedcolumn ------------------------------------------------------------- {"\"es.ine\".total_pop",NULL,"\"us.census.acs\".B01001001"} (1 row) diff --git a/src/pg/test/sql/40_observatory_utility_test.sql b/src/pg/test/sql/40_observatory_utility_test.sql index 677c369..6fbcb45 100644 --- a/src/pg/test/sql/40_observatory_utility_test.sql +++ b/src/pg/test/sql/40_observatory_utility_test.sql @@ -76,7 +76,7 @@ SELECT ); SELECT - select * from cdb_observatory._GetRelatedColumn( + select cdb_observatory._OBS_GetRelatedColumn( Array[ '"es.ine".pop_0_4', '"us.census.acs".B01001001', From 90a944070dac417e72cc799cdc23a6c678e2f886 Mon Sep 17 00:00:00 2001 From: John Krauss Date: Thu, 21 Apr 2016 12:26:55 -0400 Subject: [PATCH 4/5] more test and whitespace fixes --- src/pg/test/expected/40_observatory_utility_test.out | 12 ++++++------ src/pg/test/sql/40_observatory_utility_test.sql | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/pg/test/expected/40_observatory_utility_test.out b/src/pg/test/expected/40_observatory_utility_test.out index 04978c3..f70d64f 100644 --- a/src/pg/test/expected/40_observatory_utility_test.out +++ b/src/pg/test/expected/40_observatory_utility_test.out @@ -43,7 +43,7 @@ SELECT ); _obs_geomtable ---------------- - + (1 row) -- future test: give back nulls when geometry doesn't intersect @@ -54,7 +54,7 @@ SELECT -- ); -- OBS_GetColumnData -- should give back: --- colname | tablename | aggregate +-- colname | tablename | aggregate -- -----------|-----------------|----------- -- geoid | obs_{hex table} | null -- total_pop | obs_{hex table} | sum @@ -67,9 +67,9 @@ SELECT ORDER BY colname, tablename ASC; colname | tablename | aggregate -----------+----------------------------------------------+----------- - geoid | obs_11ee8b82c877c073438bc935a91d3dfccef875d1 | - geoid | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | - geoid | obs_d34555209878e8c4b37cf0b2b3d072ff129ec470 | + geoid | obs_11ee8b82c877c073438bc935a91d3dfccef875d1 | + geoid | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | + geoid | obs_d34555209878e8c4b37cf0b2b3d072ff129ec470 | total_pop | obs_ab038198aaab3f3cb055758638ee4de28ad70146 | sum (4 rows) @@ -103,7 +103,7 @@ SELECT ); _obs_lookupcensushuman ------------------------ - + (1 row) -- OBS_BuildSnapshotQuery diff --git a/src/pg/test/sql/40_observatory_utility_test.sql b/src/pg/test/sql/40_observatory_utility_test.sql index 6fbcb45..37f0648 100644 --- a/src/pg/test/sql/40_observatory_utility_test.sql +++ b/src/pg/test/sql/40_observatory_utility_test.sql @@ -75,8 +75,7 @@ SELECT Array['mandarin_orange'] ); -SELECT - select cdb_observatory._OBS_GetRelatedColumn( +SELECT cdb_observatory._OBS_GetRelatedColumn( Array[ '"es.ine".pop_0_4', '"us.census.acs".B01001001', From afd1be30b52e822151a5b91aba7736f310c6ca28 Mon Sep 17 00:00:00 2001 From: John Krauss Date: Thu, 21 Apr 2016 12:30:50 -0400 Subject: [PATCH 5/5] fixing whitespace --- src/pg/test/expected/40_observatory_utility_test.out | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/pg/test/expected/40_observatory_utility_test.out b/src/pg/test/expected/40_observatory_utility_test.out index f70d64f..5fb3a2f 100644 --- a/src/pg/test/expected/40_observatory_utility_test.out +++ b/src/pg/test/expected/40_observatory_utility_test.out @@ -127,9 +127,7 @@ SELECT SELECT vals[1] As mandarin_orange (1 row) --- should give back "\"es.ine\".total_pop",NULL,"\"us.census.acs\".B01001001"} -SELECT - select * from cdb_observatory._GetRelatedColumn( +SELECT cdb_observatory._OBS_GetRelatedColumn( Array[ '"es.ine".pop_0_4', '"us.census.acs".B01001001', @@ -137,9 +135,9 @@ SELECT ], 'denominator' ); - _getrelatedcolumn + _obs_getrelatedcolumn ------------------------------------------------------------- -{"\"es.ine\".total_pop",NULL,"\"us.census.acs\".B01001001"} + {"\"es.ine\".total_pop",NULL,"\"us.census.acs\".B01001001"} (1 row) \i test/sql/drop_fixtures.sql