From bb629dfe4b5f14a4e27529ca7c3b6eb52b54093b Mon Sep 17 00:00:00 2001 From: Mario de Frutos Date: Tue, 26 Jan 2016 15:53:18 +0100 Subject: [PATCH] Change the signature name for the geocoder street point function --- client/cdb_geocoder_client--0.0.1--0.1.0.sql | 10 +- client/cdb_geocoder_client--0.1.0--0.0.1.sql | 7 +- client/test/0.1.0/expected/60_street_test.out | 101 ++++++++++++++++++ .../test/0.1.0/expected/60_street_v2_test.out | 101 ------------------ .../0.1.0/expected/90_permissions_test.out | 16 +-- client/test/0.1.0/sql/60_street_test.sql | 24 +++++ client/test/0.1.0/sql/60_street_v2_test.sql | 24 ----- client/test/0.1.0/sql/90_permissions_test.sql | 4 +- interface_0.1.0.yaml | 2 +- .../cdb_geocoder_server--0.0.1--0.1.0.sql | 3 +- .../cdb_geocoder_server--0.1.0--0.0.1.sql | 25 ++++- .../extension/sql/0.1.0/20_geocode_street.sql | 2 +- .../test/0.1.0/expected/20_street_test.out | 2 +- .../test/0.1.0/sql/20_street_test.sql | 4 +- test/integration/test_street_functions.py | 4 +- 15 files changed, 178 insertions(+), 151 deletions(-) create mode 100644 client/test/0.1.0/expected/60_street_test.out delete mode 100644 client/test/0.1.0/expected/60_street_v2_test.out create mode 100644 client/test/0.1.0/sql/60_street_test.sql delete mode 100644 client/test/0.1.0/sql/60_street_v2_test.sql diff --git a/client/cdb_geocoder_client--0.0.1--0.1.0.sql b/client/cdb_geocoder_client--0.0.1--0.1.0.sql index 76032ad..338eeb5 100644 --- a/client/cdb_geocoder_client--0.0.1--0.1.0.sql +++ b/client/cdb_geocoder_client--0.0.1--0.1.0.sql @@ -31,7 +31,7 @@ BEGIN END; $$ LANGUAGE 'plpgsql' SECURITY DEFINER; -CREATE OR REPLACE FUNCTION cdb_geocoder_client.cdb_geocode_street_point_v2 (searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) +CREATE OR REPLACE FUNCTION cdb_geocoder_client.cdb_geocode_street_point (searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) RETURNS Geometry AS $$ DECLARE ret Geometry; @@ -46,15 +46,15 @@ BEGIN IF username IS NULL OR username = '' OR username = '""' THEN RAISE EXCEPTION 'Username is a mandatory argument, check it out'; END IF; - SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country) INTO ret; + SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country) INTO ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' SECURITY DEFINER; -CREATE OR REPLACE FUNCTION cdb_geocoder_client._cdb_geocode_street_point_v2 (username text, organization_name text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) +CREATE OR REPLACE FUNCTION cdb_geocoder_client._cdb_geocode_street_point (username text, organization_name text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) RETURNS Geometry AS $$ CONNECT cdb_geocoder_client._server_conn_str(); - SELECT cdb_geocoder_server.cdb_geocode_street_point_v2 (username, organization_name, searchtext, city, state_province, country); + SELECT cdb_geocoder_server.cdb_geocode_street_point (username, organization_name, searchtext, city, state_province, country); $$ LANGUAGE plproxy; -GRANT EXECUTE ON FUNCTION cdb_geocoder_client.cdb_geocode_street_point_v2(searchtext text, city text, state_province text, country text) TO publicuser; \ No newline at end of file +GRANT EXECUTE ON FUNCTION cdb_geocoder_client.cdb_geocode_street_point(searchtext text, city text, state_province text, country text) TO publicuser; diff --git a/client/cdb_geocoder_client--0.1.0--0.0.1.sql b/client/cdb_geocoder_client--0.1.0--0.0.1.sql index c10a677..c9f3f45 100644 --- a/client/cdb_geocoder_client--0.1.0--0.0.1.sql +++ b/client/cdb_geocoder_client--0.1.0--0.0.1.sql @@ -1,5 +1,8 @@ +DROP FUNCTION IF EXISTS cdb_geocoder_client.cdb_geocode_street_point (text, text, text, text); +DROP FUNCTION IF EXISTS cdb_geocoder_client._cdb_geocode_street_point (text, text, text, text); +-- This functions could exists due a first deploy with this name DROP FUNCTION IF EXISTS cdb_geocoder_client.cdb_geocode_street_point_v2 (text, text, text, text); -DROP FUNCTION IF EXISTS cdb_geocoder_client._cdb_geocode_street_point_v2 (text, text, text, text); +DROP FUNCTION IF EXISTS cdb_geocoder_client._cdb_geocode_street_point_v2 (text, text, text, text, text, text); -- -- Get entity config function @@ -32,4 +35,4 @@ BEGIN result.organization_name = organization_name; RETURN result; END; -$$ LANGUAGE 'plpgsql' SECURITY DEFINER; \ No newline at end of file +$$ LANGUAGE 'plpgsql' SECURITY DEFINER; diff --git a/client/test/0.1.0/expected/60_street_test.out b/client/test/0.1.0/expected/60_street_test.out new file mode 100644 index 0000000..443fde1 --- /dev/null +++ b/client/test/0.1.0/expected/60_street_test.out @@ -0,0 +1,101 @@ +-- Add to the search path the schema +SET search_path TO public,cartodb,cdb_geocoder_client; +-- Mock the server functions +CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point (username text, orgname text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) +RETURNS Geometry AS $$ +BEGIN + RAISE NOTICE 'cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (%, %, %, %, %, %)', username, orgname, searchtext, city, state_province, country; + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; +-- Exercise the public and the proxied function +SELECT cdb_geocode_street_point('One street, 1'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, 1, , , ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, , ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city', 'state'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, state, ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city', 'state', 'country'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, state, country) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city', NULL, 'country'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, , country) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street, 1'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, 1, , , ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, , ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city', 'state'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, state, ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city', 'state', 'country'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, state, country) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + +SELECT cdb_geocode_street_point('One street', 'city', NULL, 'country'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , One street, city, , country) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- + +(1 row) + diff --git a/client/test/0.1.0/expected/60_street_v2_test.out b/client/test/0.1.0/expected/60_street_v2_test.out deleted file mode 100644 index 6750855..0000000 --- a/client/test/0.1.0/expected/60_street_v2_test.out +++ /dev/null @@ -1,101 +0,0 @@ --- Add to the search path the schema -SET search_path TO public,cartodb,cdb_geocoder_client; --- Mock the server functions -CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point_v2 (username text, orgname text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) -RETURNS Geometry AS $$ -BEGIN - RAISE NOTICE 'cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (%, %, %, %, %, %)', username, orgname, searchtext, city, state_province, country; - RETURN NULL; -END; -$$ LANGUAGE 'plpgsql'; --- Exercise the public and the proxied function -SELECT cdb_geocode_street_point_v2('One street, 1'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, 1, , , ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, , ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, state, ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state', 'country'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, state, country) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city', NULL, 'country'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, , country) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street, 1'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, 1, , , ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, , ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, state, ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state', 'country'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, state, country) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - -SELECT cdb_geocode_street_point_v2('One street', 'city', NULL, 'country'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , One street, city, , country) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ - -(1 row) - diff --git a/client/test/0.1.0/expected/90_permissions_test.out b/client/test/0.1.0/expected/90_permissions_test.out index 7569760..c7c69da 100644 --- a/client/test/0.1.0/expected/90_permissions_test.out +++ b/client/test/0.1.0/expected/90_permissions_test.out @@ -85,12 +85,12 @@ PL/pgSQL function cdb_geocode_ipaddress_point(text) line 15 at SQL statement (1 row) -SELECT cdb_geocode_street_point_v2('one street, 1'); -NOTICE: cdb_geocoder_client._cdb_geocode_street_point_v2(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (test_user, , one street, 1, , , ) -CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point_v2(username, orgname, searchtext, city, state_province, country)" -PL/pgSQL function cdb_geocode_street_point_v2(text,text,text,text) line 15 at SQL statement - cdb_geocode_street_point_v2 ------------------------------ +SELECT cdb_geocode_street_point('one street, 1'); +NOTICE: cdb_geocoder_client._cdb_geocode_street_point(6): [contrib_regression] REMOTE NOTICE: cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (test_user, , one street, 1, , , ) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._cdb_geocode_street_point(username, orgname, searchtext, city, state_province, country)" +PL/pgSQL function cdb_geocode_street_point(text,text,text,text) line 15 at SQL statement + cdb_geocode_street_point +-------------------------- (1 row) @@ -113,5 +113,5 @@ SELECT _cdb_geocode_postalcode_point('evil_user', 'evil_orgname', '66666', 'Hell ERROR: permission denied for function _cdb_geocode_postalcode_point SELECT _cdb_geocode_ipaddress_point('evil_user', 'evil_orgname', '8.8.8.8'); ERROR: permission denied for function _cdb_geocode_ipaddress_point -SELECT _cdb_geocode_street_point_v2('evil_user', 'evil_orgname', 'one street, 1'); -ERROR: permission denied for function _cdb_geocode_street_point_v2 +SELECT _cdb_geocode_street_point('evil_user', 'evil_orgname', 'one street, 1'); +ERROR: permission denied for function _cdb_geocode_street_point diff --git a/client/test/0.1.0/sql/60_street_test.sql b/client/test/0.1.0/sql/60_street_test.sql new file mode 100644 index 0000000..349816d --- /dev/null +++ b/client/test/0.1.0/sql/60_street_test.sql @@ -0,0 +1,24 @@ +-- Add to the search path the schema +SET search_path TO public,cartodb,cdb_geocoder_client; + +-- Mock the server functions +CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point (username text, orgname text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) +RETURNS Geometry AS $$ +BEGIN + RAISE NOTICE 'cdb_geocoder_server.cdb_geocode_geocoder_street_point invoked with params (%, %, %, %, %, %)', username, orgname, searchtext, city, state_province, country; + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; + + +-- Exercise the public and the proxied function +SELECT cdb_geocode_street_point('One street, 1'); +SELECT cdb_geocode_street_point('One street', 'city'); +SELECT cdb_geocode_street_point('One street', 'city', 'state'); +SELECT cdb_geocode_street_point('One street', 'city', 'state', 'country'); +SELECT cdb_geocode_street_point('One street', 'city', NULL, 'country'); +SELECT cdb_geocode_street_point('One street, 1'); +SELECT cdb_geocode_street_point('One street', 'city'); +SELECT cdb_geocode_street_point('One street', 'city', 'state'); +SELECT cdb_geocode_street_point('One street', 'city', 'state', 'country'); +SELECT cdb_geocode_street_point('One street', 'city', NULL, 'country'); diff --git a/client/test/0.1.0/sql/60_street_v2_test.sql b/client/test/0.1.0/sql/60_street_v2_test.sql deleted file mode 100644 index 99078c9..0000000 --- a/client/test/0.1.0/sql/60_street_v2_test.sql +++ /dev/null @@ -1,24 +0,0 @@ --- Add to the search path the schema -SET search_path TO public,cartodb,cdb_geocoder_client; - --- Mock the server functions -CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point_v2 (username text, orgname text, searchtext text, city text DEFAULT NULL, state_province text DEFAULT NULL, country text DEFAULT NULL) -RETURNS Geometry AS $$ -BEGIN - RAISE NOTICE 'cdb_geocoder_server.cdb_geocode_geocoder_street_point_v2 invoked with params (%, %, %, %, %, %)', username, orgname, searchtext, city, state_province, country; - RETURN NULL; -END; -$$ LANGUAGE 'plpgsql'; - - --- Exercise the public and the proxied function -SELECT cdb_geocode_street_point_v2('One street, 1'); -SELECT cdb_geocode_street_point_v2('One street', 'city'); -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state'); -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state', 'country'); -SELECT cdb_geocode_street_point_v2('One street', 'city', NULL, 'country'); -SELECT cdb_geocode_street_point_v2('One street, 1'); -SELECT cdb_geocode_street_point_v2('One street', 'city'); -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state'); -SELECT cdb_geocode_street_point_v2('One street', 'city', 'state', 'country'); -SELECT cdb_geocode_street_point_v2('One street', 'city', NULL, 'country'); \ No newline at end of file diff --git a/client/test/0.1.0/sql/90_permissions_test.sql b/client/test/0.1.0/sql/90_permissions_test.sql index 675867f..946936e 100644 --- a/client/test/0.1.0/sql/90_permissions_test.sql +++ b/client/test/0.1.0/sql/90_permissions_test.sql @@ -15,7 +15,7 @@ SELECT cdb_geocode_namedplace_point('Elx', 'Valencia', 'Spain'); SELECT cdb_geocode_postalcode_polygon('03204', 'Spain'); SELECT cdb_geocode_postalcode_point('03204', 'Spain'); SELECT cdb_geocode_ipaddress_point('8.8.8.8'); -SELECT cdb_geocode_street_point_v2('one street, 1'); +SELECT cdb_geocode_street_point('one street, 1'); -- Check the regular user has no permissions on private functions SELECT _cdb_geocode_admin0_polygon('evil_user', 'evil_orgname', 'Hell'); @@ -27,4 +27,4 @@ SELECT _cdb_geocode_namedplace_point('evil_user', 'evil_orgname', 'Sheol', 'Hell SELECT _cdb_geocode_postalcode_polygon('evil_user', 'evil_orgname', '66666', 'Hell'); SELECT _cdb_geocode_postalcode_point('evil_user', 'evil_orgname', '66666', 'Hell'); SELECT _cdb_geocode_ipaddress_point('evil_user', 'evil_orgname', '8.8.8.8'); -SELECT _cdb_geocode_street_point_v2('evil_user', 'evil_orgname', 'one street, 1'); +SELECT _cdb_geocode_street_point('evil_user', 'evil_orgname', 'one street, 1'); diff --git a/interface_0.1.0.yaml b/interface_0.1.0.yaml index d5e6fed..e64c504 100644 --- a/interface_0.1.0.yaml +++ b/interface_0.1.0.yaml @@ -51,7 +51,7 @@ params: - { name: ip_address, type: text} -- name: cdb_geocode_street_point_v2 +- name: cdb_geocode_street_point return_type: Geometry params: - { name: searchtext, type: text} diff --git a/server/extension/cdb_geocoder_server--0.0.1--0.1.0.sql b/server/extension/cdb_geocoder_server--0.0.1--0.1.0.sql index d52a46e..79be992 100644 --- a/server/extension/cdb_geocoder_server--0.0.1--0.1.0.sql +++ b/server/extension/cdb_geocoder_server--0.0.1--0.1.0.sql @@ -75,7 +75,8 @@ RETURNS boolean AS $$ $$ LANGUAGE plpythonu SECURITY DEFINER; -- Geocodes a street address given a searchtext and a state and/or country -CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point_v2(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) +DROP FUNCTION IF EXISTS cdb_geocoder_server.cdb_geocode_street_point(TEXT, TEXT, TEXT, TEXT); +CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) RETURNS Geometry AS $$ plpy.execute("SELECT cdb_geocoder_server._connect_to_redis('{0}')".format(username)) redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection'] diff --git a/server/extension/cdb_geocoder_server--0.1.0--0.0.1.sql b/server/extension/cdb_geocoder_server--0.1.0--0.0.1.sql index f626887..b8b3f26 100644 --- a/server/extension/cdb_geocoder_server--0.1.0--0.0.1.sql +++ b/server/extension/cdb_geocoder_server--0.1.0--0.0.1.sql @@ -1,6 +1,29 @@ DROP FUNCTION IF EXISTS cdb_geocoder_server._get_redis_conf_v2(text); DROP FUNCTION IF EXISTS cdb_geocoder_server._connect_to_redis(text); DROP FUNCTION IF EXISTS cdb_geocoder_server._get_geocoder_config(text, text); +DROP FUNCTION IF EXISTS cdb_geocoder_server.cdb_geocode_street_point(TEXT, TEXT, TEXT, TEXT, TEXT, TEXT); DROP FUNCTION IF EXISTS cdb_geocoder_server.cdb_geocode_street_point_v2(TEXT, TEXT, TEXT, TEXT, TEXT, TEXT); DROP FUNCTION IF EXISTS cdb_geocoder_server._cdb_here_geocode_street_point(TEXT, TEXT, TEXT, TEXT, TEXT, TEXT); -DROP FUNCTION IF EXISTS cdb_geocoder_server._cdb_google_geocode_street_point(TEXT, TEXT, TEXT, TEXT, TEXT, TEXT); \ No newline at end of file +DROP FUNCTION IF EXISTS cdb_geocoder_server._cdb_google_geocode_street_point(TEXT, TEXT, TEXT, TEXT, TEXT, TEXT); + +CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point(searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) + RETURNS Geometry +AS $$ + import json + from heremaps import heremapsgeocoder + + heremaps_conf = json.loads(plpy.execute("SELECT cdb_geocoder_server._get_conf('heremaps')", 1)[0]['get_conf']) + + app_id = heremaps_conf['geocoder']['app_id'] + app_code = heremaps_conf['geocoder']['app_code'] + + geocoder = heremapsgeocoder.Geocoder(app_id, app_code) + + results = geocoder.geocode_address(searchtext=searchtext, city=city, state=state_province, country=country) + coordinates = geocoder.extract_lng_lat_from_result(results[0]) + + plan = plpy.prepare("SELECT ST_SetSRID(ST_MakePoint($1, $2), 4326); ", ["double precision", "double precision"]) + point = plpy.execute(plan, [coordinates[0], coordinates[1]], 1)[0] + + return point['st_setsrid'] +$$ LANGUAGE plpythonu; diff --git a/server/extension/sql/0.1.0/20_geocode_street.sql b/server/extension/sql/0.1.0/20_geocode_street.sql index b396ef3..03ae6d0 100644 --- a/server/extension/sql/0.1.0/20_geocode_street.sql +++ b/server/extension/sql/0.1.0/20_geocode_street.sql @@ -1,5 +1,5 @@ -- Geocodes a street address given a searchtext and a state and/or country -CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point_v2(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) +CREATE OR REPLACE FUNCTION cdb_geocoder_server.cdb_geocode_street_point(username TEXT, orgname TEXT, searchtext TEXT, city TEXT DEFAULT NULL, state_province TEXT DEFAULT NULL, country TEXT DEFAULT NULL) RETURNS Geometry AS $$ plpy.execute("SELECT cdb_geocoder_server._connect_to_redis('{0}')".format(username)) redis_conn = GD["redis_connection_{0}".format(username)]['redis_metrics_connection'] diff --git a/server/extension/test/0.1.0/expected/20_street_test.out b/server/extension/test/0.1.0/expected/20_street_test.out index 526cc00..eab5d89 100644 --- a/server/extension/test/0.1.0/expected/20_street_test.out +++ b/server/extension/test/0.1.0/expected/20_street_test.out @@ -3,7 +3,7 @@ SELECT exists(SELECT * FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid) WHERE ns.nspname = 'cdb_geocoder_server' - AND proname = 'cdb_geocode_street_point_v2' + AND proname = 'cdb_geocode_street_point' AND oidvectortypes(p.proargtypes) = 'text, text, text, text, text, text'); exists -------- diff --git a/server/extension/test/0.1.0/sql/20_street_test.sql b/server/extension/test/0.1.0/sql/20_street_test.sql index 7613f5b..7483919 100644 --- a/server/extension/test/0.1.0/sql/20_street_test.sql +++ b/server/extension/test/0.1.0/sql/20_street_test.sql @@ -3,5 +3,5 @@ SELECT exists(SELECT * FROM pg_proc p INNER JOIN pg_namespace ns ON (p.pronamespace = ns.oid) WHERE ns.nspname = 'cdb_geocoder_server' - AND proname = 'cdb_geocode_street_point_v2' - AND oidvectortypes(p.proargtypes) = 'text, text, text, text, text, text'); \ No newline at end of file + AND proname = 'cdb_geocode_street_point' + AND oidvectortypes(p.proargtypes) = 'text, text, text, text, text, text'); diff --git a/test/integration/test_street_functions.py b/test/integration/test_street_functions.py index 510bf71..e4b1adf 100644 --- a/test/integration/test_street_functions.py +++ b/test/integration/test_street_functions.py @@ -15,7 +15,7 @@ class TestStreetFunctions(TestCase): ) def test_if_select_with_street_point_is_ok(self): - query = "SELECT cdb_geocode_street_point_v2(street) " \ + query = "SELECT cdb_geocode_street_point(street) " \ "as geometry FROM {0} LIMIT 1&api_key={1}".format( self.env_variables['table_name'], self.env_variables['api_key']) @@ -23,7 +23,7 @@ class TestStreetFunctions(TestCase): assert_not_equal(geometry, None) def test_if_select_with_street_without_api_key_raise_error(self): - query = "SELECT cdb_geocode_street_point_v2(street) " \ + query = "SELECT cdb_geocode_street_point(street) " \ "as geometry FROM {0} LIMIT 1".format( self.env_variables['table_name']) try: