From b8aad90662980e9dfd50e98b54832a9cc02292bf Mon Sep 17 00:00:00 2001 From: Carla Iriberri Date: Tue, 3 Nov 2015 16:55:31 +0100 Subject: [PATCH] Adds pending build instructions + fixed tests --- .../cdb_geocoder_postalcode--0.0.1.sql | 116 +++++++++++++++++- .../expected/cdb_geocoder_postalcode_test.out | 104 +++++++++++++++- .../sql/cdb_geocoder_postalcode_test.sql | 62 +++++++++- 3 files changed, 278 insertions(+), 4 deletions(-) diff --git a/geocoder/postal-codes/extension/cdb_geocoder_postalcode--0.0.1.sql b/geocoder/postal-codes/extension/cdb_geocoder_postalcode--0.0.1.sql index be91673..8845075 100644 --- a/geocoder/postal-codes/extension/cdb_geocoder_postalcode--0.0.1.sql +++ b/geocoder/postal-codes/extension/cdb_geocoder_postalcode--0.0.1.sql @@ -6,6 +6,7 @@ CREATE TYPE geocode_namedplace_v1 AS (q TEXT, geom GEOMETRY, success BOOLEAN); CREATE TYPE geocode_postalint_country_v1 AS (q TEXT, c TEXT, geom GEOMETRY, success BOOLEAN); CREATE TYPE geocode_namedplace_country_v1 AS (q TEXT, c TEXT, geom GEOMETRY, success BOOLEAN); CREATE TYPE available_services_v1 AS (q text, adm0_a3 text, postal_code_points boolean, postal_code_polygons boolean); +CREATE TYPE geocode_place_country_iso_v1 AS (q text, c text, iso3 text, geom geometry, success boolean); -- Public API functions -- --- Geocoding function --- @@ -391,8 +392,8 @@ CREATE SEQUENCE available_services_cartodb_id_seq NO MAXVALUE CACHE 1; -ALTER SEQUENCE available_services_cartodb_id_seq_cartodb_id_seq OWNED BY available_services.cartodb_id; -ALTER TABLE ONLY available_services ALTER COLUMN cartodb_id SET DEFAULT nextval('available_services_cartodb_id_seq_cartodb_id_seq'::regclass); +ALTER SEQUENCE available_services_cartodb_id_seq OWNED BY available_services.cartodb_id; +ALTER TABLE ONLY available_services ALTER COLUMN cartodb_id SET DEFAULT nextval('available_services_cartodb_id_seq'::regclass); ALTER TABLE ONLY available_services @@ -409,3 +410,114 @@ CREATE INDEX available_services_the_geom_webmercator_idx ON available_services U CREATE TRIGGER track_updates AFTER INSERT OR DELETE OR UPDATE OR TRUNCATE ON available_services FOR EACH STATEMENT EXECUTE PROCEDURE cartodb.cdb_tablemetadata_trigger(); CREATE TRIGGER update_the_geom_webmercator_trigger BEFORE INSERT OR UPDATE OF the_geom ON available_services FOR EACH ROW EXECUTE PROCEDURE cartodb._cdb_update_the_geom_webmercator(); CREATE TRIGGER update_updated_at_trigger BEFORE UPDATE ON available_services FOR EACH ROW EXECUTE PROCEDURE cartodb._cdb_update_updated_at(); + + + +CREATE TABLE country_decoder ( + name text, + nativename text, + tld text, + iso2 text, + ccn3 text, + iso3 text, + currency text, + callingcode text, + capital text, + altspellings text, + relevance text, + region text, + subregion text, + language text, + languagescodes text, + translations text, + population text, + latlng text, + demonym text, + borders text, + the_geom geometry(Geometry,4326), + cartodb_id integer NOT NULL, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + the_geom_webmercator geometry(Geometry,3857), + synbu text[], + synonyms text[], + users double precision +); + + +CREATE SEQUENCE country_decoder_cartodb_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + +ALTER SEQUENCE available_services_cartodb_id_seq OWNED BY country_decoder.cartodb_id; +ALTER TABLE ONLY country_decoder ALTER COLUMN cartodb_id SET DEFAULT nextval('country_decoder_cartodb_id_seq'::regclass); + + +ALTER TABLE ONLY country_decoder + ADD CONSTRAINT country_decoder_cartodb_id_key UNIQUE (cartodb_id); +ALTER TABLE ONLY country_decoder + ADD CONSTRAINT country_decoder_pkey PRIMARY KEY (cartodb_id); + + + +CREATE INDEX country_decoder_the_geom_idx ON country_decoder USING gist (the_geom); +CREATE INDEX country_decoder_the_geom_webmercator_idx ON country_decoder USING gist (the_geom_webmercator); + + +CREATE TRIGGER track_updates AFTER INSERT OR DELETE OR UPDATE OR TRUNCATE ON country_decoder FOR EACH STATEMENT EXECUTE PROCEDURE cartodb.cdb_tablemetadata_trigger(); +CREATE TRIGGER update_the_geom_webmercator_trigger BEFORE INSERT OR UPDATE OF the_geom ON country_decoder FOR EACH ROW EXECUTE PROCEDURE cartodb._cdb_update_the_geom_webmercator(); +CREATE TRIGGER update_updated_at_trigger BEFORE UPDATE ON country_decoder FOR EACH ROW EXECUTE PROCEDURE cartodb._cdb_update_updated_at(); + + +CREATE TABLE admin0_synonyms ( + name text, + rank double precision, + created_at timestamp with time zone DEFAULT now() NOT NULL, + updated_at timestamp with time zone DEFAULT now() NOT NULL, + the_geom geometry(Geometry,4326), + the_geom_webmercator geometry(Geometry,3857), + cartodb_id integer NOT NULL, + adm0_a3 text, + name_ text +); + +CREATE SEQUENCE admin0_synonyms_cartodb_id_seq + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; +ALTER SEQUENCE admin0_synonyms_cartodb_id_seq OWNED BY admin0_synonyms.cartodb_id; +ALTER TABLE ONLY admin0_synonyms ALTER COLUMN cartodb_id SET DEFAULT nextval('admin0_synonyms_cartodb_id_seq'::regclass); + + +ALTER TABLE ONLY admin0_synonyms + ADD CONSTRAINT admin0_synonyms_cartodb_id_key UNIQUE (cartodb_id); +ALTER TABLE ONLY admin0_synonyms + ADD CONSTRAINT admin0_synonyms_pkey PRIMARY KEY (cartodb_id); + + +CREATE INDEX admin0_synonyms_the_geom_idx ON admin0_synonyms USING gist (the_geom); +CREATE INDEX admin0_synonyms_the_geom_webmercator_idx ON admin0_synonyms USING gist (the_geom_webmercator); +CREATE INDEX idx_admin0_synonyms_nam ON admin0_synonyms USING btree (name); +CREATE INDEX idx_admin0_synonyms_name ON admin0_synonyms USING btree (lower(regexp_replace(name, '\W+'::text, ''::text))); +CREATE INDEX idx_admin0_synonyms_name_ ON admin0_synonyms USING btree (name_); +CREATE INDEX idx_admin0_synonyms_name_patt ON admin0_synonyms USING btree (name_ text_pattern_ops); +CREATE INDEX idx_admin0_synonyms_name_rank ON admin0_synonyms USING btree (name_, rank); +CREATE INDEX idx_admin0_synonyms_rank ON admin0_synonyms USING btree (rank); + +-- create trigger function. used in both admin0 and admin1 synonym tables +CREATE OR REPLACE FUNCTION alpha_numeric_identifiers() RETURNS trigger AS $alpha_numeric_identifiers$ + BEGIN + NEW.name_ := lower(regexp_replace(NEW.name, '[^a-zA-Z\u00C0-\u00ff]+', '', 'g')); + RETURN NEW; + END; +$alpha_numeric_identifiers$ LANGUAGE plpgsql; + +CREATE TRIGGER admin0_synonyms_name_update BEFORE INSERT OR UPDATE OF name ON admin0_synonyms FOR EACH ROW EXECUTE PROCEDURE alpha_numeric_identifiers(); +CREATE TRIGGER track_updates AFTER INSERT OR DELETE OR UPDATE OR TRUNCATE ON admin0_synonyms FOR EACH STATEMENT EXECUTE PROCEDURE cartodb.cdb_tablemetadata_trigger(); +CREATE TRIGGER update_the_geom_webmercator_trigger BEFORE INSERT OR UPDATE OF the_geom ON admin0_synonyms FOR EACH ROW EXECUTE PROCEDURE cartodb._cdb_update_the_geom_webmercator(); +CREATE TRIGGER update_updated_at_trigger BEFORE UPDATE ON admin0_synonyms FOR EACH ROW EXECUTE PROCEDURE cartodb._cdb_update_updated_at(); diff --git a/geocoder/postal-codes/extension/expected/cdb_geocoder_postalcode_test.out b/geocoder/postal-codes/extension/expected/cdb_geocoder_postalcode_test.out index 6824cae..83ddaec 100644 --- a/geocoder/postal-codes/extension/expected/cdb_geocoder_postalcode_test.out +++ b/geocoder/postal-codes/extension/expected/cdb_geocoder_postalcode_test.out @@ -3,4 +3,106 @@ CREATE EXTENSION schema_triggers; CREATE EXTENSION plpythonu; CREATE EXTENSION cartodb; CREATE EXTENSION cdb_geocoder_postalcode; --- PENDING +SELECT (geocode_postalcode_polygons(Array['03204'], Array['Spain'])).*; + q | c | geom | success +-------+-------+------+--------- + 03204 | Spain | | f +(1 row) + +SELECT (geocode_postalcode_polygons(Array['03204'], 'ESP')).*; + q | geom | success +-------+------+--------- + 03204 | | f +(1 row) + +SELECT (geocode_postalcode_polygons(Array['03204'])).*; + q | geom | success +-------+------+--------- + 03204 | | f +(1 row) + +SELECT (geocode_postalcode_points(Array['03204'], 'Spain')).*; + q | geom | success +-------+------+--------- + 03204 | | f +(1 row) + +SELECT (geocode_postalcode_points('{03204}', 'Spain')).*; + q | geom | success +-------+------+--------- + 03204 | | f +(1 row) + +SELECT (geocode_postalcode_points(Array['03204'])).*; + q | geom | success +-------+------+--------- + 03204 | | f +(1 row) + +SELECT (geocode_postalcode_points(Array['03204'], Array['Spain'])).*; + q | c | iso3 | geom | success +-------+-------+------+------+--------- + 03204 | Spain | | | f +(1 row) + +SELECT geocode_greatbritain_outward('YO1 721'); + geocode_greatbritain_outward +------------------------------ + +(1 row) + +SELECT (admin0_available_services(Array['Spain'])).*; + q | adm0_a3 | postal_code_points | postal_code_polygons +-------+---------+--------------------+---------------------- + Spain | | | +(1 row) + +-- Mock the varnish invalidation function +CREATE OR REPLACE FUNCTION public.cdb_invalidate_varnish(table_name text) RETURNS void AS $$ +BEGIN + RETURN; +END +$$ +LANGUAGE plpgsql; +-- Insert mock source data +INSERT INTO global_postal_code_points (the_geom, iso3, postal_code, postal_code_num) VALUES ( + '0101000020E61000000000000000E040408036B47414764840', + 'ESP', + '03204', + 3204 +); +INSERT INTO global_postal_code_polygons (the_geom, iso3, postal_code, postal_code_num) VALUES ( + '0106000020E610000001000000010300000001000000040000000000000000E000C01F383D7839B740400000000000E000C0AA3C0EDE220F3B4000000000004812404FB7FCCD04893D400000000000E000C01F383D7839B74040', + 'ESP', + '03204', + 3204 +); +INSERT INTO country_decoder (iso3, synonyms) VALUES ( + 'ESP', + Array['spain', 'Spain', 'ESP'] +); +INSERT INTO available_services (adm0_a3, admin0, postal_code_points, postal_code_polygons) VALUES ( + 'ESP', + 't', + 't', + 't' +); +INSERT INTO admin0_synonyms (adm0_a3, name, name_, rank) VALUES ( + 'ESP', + 'Spain', + 'spain', + 3 +); +INSERT INTO admin0_synonyms (adm0_a3, name, name_, rank) VALUES ( + 'ESP', + 'ESP', + 'esp', + 4 +); +-- Check that the geocoding function is callable, should return success = true +SELECT (geocode_postalcode_polygons(Array['03204'], Array['Spain'])).geom; + geom +-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- + 0106000020E610000001000000010300000001000000040000000000000000E000C01F383D7839B740400000000000E000C0AA3C0EDE220F3B4000000000004812404FB7FCCD04893D400000000000E000C01F383D7839B74040 +(1 row) + diff --git a/geocoder/postal-codes/extension/sql/cdb_geocoder_postalcode_test.sql b/geocoder/postal-codes/extension/sql/cdb_geocoder_postalcode_test.sql index 314eb72..fe4f884 100644 --- a/geocoder/postal-codes/extension/sql/cdb_geocoder_postalcode_test.sql +++ b/geocoder/postal-codes/extension/sql/cdb_geocoder_postalcode_test.sql @@ -4,4 +4,64 @@ CREATE EXTENSION plpythonu; CREATE EXTENSION cartodb; CREATE EXTENSION cdb_geocoder_postalcode; --- PENDING +SELECT (geocode_postalcode_polygons(Array['03204'], Array['Spain'])).*; +SELECT (geocode_postalcode_polygons(Array['03204'], 'ESP')).*; +SELECT (geocode_postalcode_polygons(Array['03204'])).*; +SELECT (geocode_postalcode_points(Array['03204'], 'Spain')).*; +SELECT (geocode_postalcode_points('{03204}', 'Spain')).*; +SELECT (geocode_postalcode_points(Array['03204'])).*; +SELECT (geocode_postalcode_points(Array['03204'], Array['Spain'])).*; +SELECT geocode_greatbritain_outward('YO1 721'); +SELECT (admin0_available_services(Array['Spain'])).*; +-- Mock the varnish invalidation function +CREATE OR REPLACE FUNCTION public.cdb_invalidate_varnish(table_name text) RETURNS void AS $$ +BEGIN + RETURN; +END +$$ +LANGUAGE plpgsql; + +-- Insert mock source data +INSERT INTO global_postal_code_points (the_geom, iso3, postal_code, postal_code_num) VALUES ( + '0101000020E61000000000000000E040408036B47414764840', + 'ESP', + '03204', + 3204 +); + +INSERT INTO global_postal_code_polygons (the_geom, iso3, postal_code, postal_code_num) VALUES ( + '0106000020E610000001000000010300000001000000040000000000000000E000C01F383D7839B740400000000000E000C0AA3C0EDE220F3B4000000000004812404FB7FCCD04893D400000000000E000C01F383D7839B74040', + 'ESP', + '03204', + 3204 +); + +INSERT INTO country_decoder (iso3, synonyms) VALUES ( + 'ESP', + Array['spain', 'Spain', 'ESP'] +); + +INSERT INTO available_services (adm0_a3, admin0, postal_code_points, postal_code_polygons) VALUES ( + 'ESP', + 't', + 't', + 't' +); + +INSERT INTO admin0_synonyms (adm0_a3, name, name_, rank) VALUES ( + 'ESP', + 'Spain', + 'spain', + 3 +); + +INSERT INTO admin0_synonyms (adm0_a3, name, name_, rank) VALUES ( + 'ESP', + 'ESP', + 'esp', + 4 +); + +-- Check that the geocoding function is callable, should return success = true +SELECT (geocode_postalcode_polygons(Array['03204'], Array['Spain'])).geom; +