From 70eeab574878ba8b3acf794918b467f2196bce46 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Thu, 17 Mar 2016 19:27:51 +0100 Subject: [PATCH 1/4] Tests for revealing issue #211 Test creating overviews for tables with boolean columns --- test/CDB_OverviewsTest.sql | 3 +++ test/overviews/fixtures.sql | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql index 670dfe8..77e9a3e 100644 --- a/test/CDB_OverviewsTest.sql +++ b/test/CDB_OverviewsTest.sql @@ -23,11 +23,14 @@ SELECT CDB_CreateOverviews('polyg_t'::regclass); SELECT CDB_Overviews('base_t'::regclass); SELECT CDB_Overviews(ARRAY['base_t'::regclass, 'base_bare_t'::regclass]); SELECT CDB_Overviews('polyg_t'::regclass); +SELECT CDB_Overviews('column_types_t'::regclass); +SELECT CDB_DropOverviews('column_types_t'::regclass); SELECT CDB_DropOverviews('base_bare_t'::regclass); SELECT CDB_DropOverviews('base_t'::regclass); SELECT count(*) FROM _vovw_5_base_t; +DROP TABLE column_types_t; DROP TABLE base_bare_t; DROP TABLE base_t; DROP TABLE polyg_t; diff --git a/test/overviews/fixtures.sql b/test/overviews/fixtures.sql index 3dc1679..7e08d94 100644 --- a/test/overviews/fixtures.sql +++ b/test/overviews/fixtures.sql @@ -2240,3 +2240,8 @@ INSERT INTO polyg_t VALUES (3, 'C', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), (4, 'D', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), (5, 'E', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)); + +CREATE TABLE column_types_t (cartodb_id integer, the_geom geometry, the_geom_webmercator geometry, odd boolean) +AS SELECT cartodb_id, the_geom, the_geom_webmercator, + (CASE cartodb_id % 2 WHEN 0 THEN 'f' ELSE 't' END)::boolean + FROM base_bare_t; From 0caf6c50ddaba8d4e7237c4805ded1ff8a4925f1 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 21 Mar 2016 12:27:00 +0100 Subject: [PATCH 2/4] Fix the tests for boolean columns and overview creation --- test/CDB_OverviewsTest.sql | 2 ++ test/overviews/fixtures.sql | 10 ++++++---- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/test/CDB_OverviewsTest.sql b/test/CDB_OverviewsTest.sql index 77e9a3e..1a0f924 100644 --- a/test/CDB_OverviewsTest.sql +++ b/test/CDB_OverviewsTest.sql @@ -20,6 +20,8 @@ SELECT count(*) FROM _vovw_5_base_t; SELECT CDB_CreateOverviews('polyg_t'::regclass); +SELECT CDB_CreateOverviews('column_types_t'::regclass); + SELECT CDB_Overviews('base_t'::regclass); SELECT CDB_Overviews(ARRAY['base_t'::regclass, 'base_bare_t'::regclass]); SELECT CDB_Overviews('polyg_t'::regclass); diff --git a/test/overviews/fixtures.sql b/test/overviews/fixtures.sql index 7e08d94..44720c8 100644 --- a/test/overviews/fixtures.sql +++ b/test/overviews/fixtures.sql @@ -2241,7 +2241,9 @@ INSERT INTO polyg_t VALUES (4, 'D', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)), (5, 'E', 'SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, ST_Transform('SRID=4326;POLYGON((9 40,8 39,8.5 40,9 41,9 40))'::geometry, 3857)); -CREATE TABLE column_types_t (cartodb_id integer, the_geom geometry, the_geom_webmercator geometry, odd boolean) -AS SELECT cartodb_id, the_geom, the_geom_webmercator, - (CASE cartodb_id % 2 WHEN 0 THEN 'f' ELSE 't' END)::boolean - FROM base_bare_t; +CREATE TABLE column_types_t +AS SELECT cartodb_id, + the_geom, + the_geom_webmercator, + (CASE cartodb_id % 2 WHEN 0 THEN 'f' ELSE 't' END)::boolean AS is_odd +FROM base_bare_t; From 603b1ceed8f1fe9ddabc4ab186abc3b8cf2133e1 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 21 Mar 2016 12:58:00 +0100 Subject: [PATCH 3/4] Adjust Overviews test expectations --- test/CDB_OverviewsTest_expect | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/CDB_OverviewsTest_expect b/test/CDB_OverviewsTest_expect index d770199..58f2ec1 100644 --- a/test/CDB_OverviewsTest_expect +++ b/test/CDB_OverviewsTest_expect @@ -5,6 +5,7 @@ CREATE TABLE INSERT 0 1114 CREATE TABLE INSERT 0 5 +SELECT 1114 @@ -16,6 +17,7 @@ AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_ {_vovw_5_base_t,_vovw_4_base_t,_vovw_3_base_t,_vovw_2_base_t,_vovw_1_base_t,_vovw_0_base_t} 125 +{_vovw_5_column_types_t,_vovw_4_column_types_t,_vovw_3_column_types_t,_vovw_2_column_types_t,_vovw_1_column_types_t,_vovw_0_column_types_t} (base_t,0,_vovw_0_base_t) (base_t,1,_vovw_1_base_t) (base_t,2,_vovw_2_base_t) @@ -34,6 +36,13 @@ AVG(tab.number)::double precision AS number,AVG(tab.int_number)::integer AS int_ (base_t,3,_vovw_3_base_t) (base_t,4,_vovw_4_base_t) (base_t,5,_vovw_5_base_t) +(column_types_t,0,_vovw_0_column_types_t) +(column_types_t,1,_vovw_1_column_types_t) +(column_types_t,2,_vovw_2_column_types_t) +(column_types_t,3,_vovw_3_column_types_t) +(column_types_t,4,_vovw_4_column_types_t) +(column_types_t,5,_vovw_5_column_types_t) + ERROR: relation "_vovw_5_base_t" does not exist @@ -42,3 +51,4 @@ LINE 1: SELECT count(*) FROM _vovw_5_base_t; DROP TABLE DROP TABLE DROP TABLE +DROP TABLE From 4074173c05a973f4770af1dec851828766b6c944 Mon Sep 17 00:00:00 2001 From: Javier Goizueta Date: Mon, 21 Mar 2016 12:58:29 +0100 Subject: [PATCH 4/4] Add support for boolean columns in overview creation --- scripts-available/CDB_Overviews.sql | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts-available/CDB_Overviews.sql b/scripts-available/CDB_Overviews.sql index 53be511..fe0562c 100644 --- a/scripts-available/CDB_Overviews.sql +++ b/scripts-available/CDB_Overviews.sql @@ -486,6 +486,8 @@ BEGIN -- Using 'string_agg(' || qualified_column || ',''/'')' -- here causes RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; + WHEN 'boolean' THEN + RETURN 'CASE count(*) WHEN 1 THEN BOOL_AND(' || qualified_column || ') ELSE NULL END::' || column_type; ELSE RETURN 'CASE count(*) WHEN 1 THEN MIN(' || qualified_column || ') ELSE NULL END::' || column_type; END CASE;