diff --git a/client/expected/20_admin1_test.out b/client/expected/20_admin1_test.out new file mode 100644 index 0000000..00ee342 --- /dev/null +++ b/client/expected/20_admin1_test.out @@ -0,0 +1,34 @@ +-- Mock the server functions +CREATE OR REPLACE FUNCTION cdb_geocoder_server.geocode_admin1_polygon(user_id name, tx_id bigint, admin1_name text) +RETURNS Geometry AS $$ +BEGIN + RAISE NOTICE 'cbd_geocoder_server.geocode_admin1_polygon invoked with params (%, %, %)', user_id, 'some_transaction_id', admin1_name; + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; +CREATE OR REPLACE FUNCTION cdb_geocoder_server.geocode_admin1_polygon(user_id name, tx_id bigint, admin1_name text, country_name text) +RETURNS Geometry AS $$ +BEGIN + RAISE NOTICE 'cbd_geocoder_server.geocode_admin1_polygon invoked with params (%, %, %, %)', user_id, 'some_transaction_id', admin1_name, country_name; + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; +-- Exercise the public and the proxied function +SELECT cdb_geocoder_client.geocode_admin1_polygon('California'); +NOTICE: cdb_geocoder_client._geocode_admin1_polygon(3): [contrib_regression] REMOTE NOTICE: cbd_geocoder_server.geocode_admin1_polygon invoked with params (postgres, some_transaction_id, California) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._geocode_admin1_polygon(session_user, txid_current(), admin1_name)" +PL/pgSQL function cdb_geocoder_client.geocode_admin1_polygon(text) line 5 at SQL statement + geocode_admin1_polygon +------------------------ + +(1 row) + +SELECT cdb_geocoder_client.geocode_admin1_polygon('California', 'United States'); +NOTICE: cdb_geocoder_client._geocode_admin1_polygon(4): [contrib_regression] REMOTE NOTICE: cbd_geocoder_server.geocode_admin1_polygon invoked with params (postgres, some_transaction_id, California, United States) +CONTEXT: SQL statement "SELECT cdb_geocoder_client._geocode_admin1_polygon(session_user, txid_current(), admin1_name, country_name)" +PL/pgSQL function cdb_geocoder_client.geocode_admin1_polygon(text,text) line 5 at SQL statement + geocode_admin1_polygon +------------------------ + +(1 row) + diff --git a/client/sql/0.0.1/20_admin1.sql b/client/sql/0.0.1/20_admin1.sql new file mode 100644 index 0000000..f7d0088 --- /dev/null +++ b/client/sql/0.0.1/20_admin1.sql @@ -0,0 +1,45 @@ +-- +-- Public geocoder API function +-- +-- These are the only ones with permissions to publicuser role +-- and should also be the only ones with SECURITY DEFINER + +---- geocode_admin1_polygon(admin1_name text) +CREATE OR REPLACE FUNCTION cdb_geocoder_client.geocode_admin1_polygon(admin1_name text) +RETURNS Geometry AS $$ +DECLARE + ret Geometry; +BEGIN + SELECT cdb_geocoder_client._geocode_admin1_polygon(session_user, txid_current(), admin1_name) INTO ret; + RETURN ret; +END; +$$ LANGUAGE 'plpgsql' SECURITY DEFINER; + +---- geocode_admin1_polygon(admin1_name text, country_name text) +CREATE OR REPLACE FUNCTION cdb_geocoder_client.geocode_admin1_polygon(admin1_name text, country_name text) +RETURNS Geometry AS $$ +DECLARE + ret Geometry; +BEGIN + SELECT cdb_geocoder_client._geocode_admin1_polygon(session_user, txid_current(), admin1_name, country_name) INTO ret; + RETURN ret; +END; +$$ LANGUAGE 'plpgsql' SECURITY DEFINER; + +-- TODO: review all permissions stuff [I'd explicitly grant permissions to the public functions] + +-------------------------------------------------------------------------------- + +---- geocode_admin1_polygon(admin1_name text) +CREATE OR REPLACE FUNCTION cdb_geocoder_client._geocode_admin1_polygon(user_id name, tx_id bigint, admin1_name text) +RETURNS Geometry AS $$ + CONNECT cdb_geocoder_client._server_conn_str(); + SELECT cdb_geocoder_server.geocode_admin1_polygon(user_id, tx_id, admin1_name); +$$ LANGUAGE plproxy; + +---- geocode_admin1_polygon(admin1_name text, country_name text) +CREATE OR REPLACE FUNCTION cdb_geocoder_client._geocode_admin1_polygon(user_id name, tx_id bigint, admin1_name text, country_name text) +RETURNS Geometry AS $$ + CONNECT cdb_geocoder_client._server_conn_str(); + SELECT cdb_geocoder_server.geocode_admin1_polygon(user_id, tx_id, admin1_name, country_name); +$$ LANGUAGE plproxy; diff --git a/client/sql/20_admin1_test.sql b/client/sql/20_admin1_test.sql new file mode 100644 index 0000000..3ecbfe6 --- /dev/null +++ b/client/sql/20_admin1_test.sql @@ -0,0 +1,21 @@ +-- Mock the server functions +CREATE OR REPLACE FUNCTION cdb_geocoder_server.geocode_admin1_polygon(user_id name, tx_id bigint, admin1_name text) +RETURNS Geometry AS $$ +BEGIN + RAISE NOTICE 'cbd_geocoder_server.geocode_admin1_polygon invoked with params (%, %, %)', user_id, 'some_transaction_id', admin1_name; + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; + +CREATE OR REPLACE FUNCTION cdb_geocoder_server.geocode_admin1_polygon(user_id name, tx_id bigint, admin1_name text, country_name text) +RETURNS Geometry AS $$ +BEGIN + RAISE NOTICE 'cbd_geocoder_server.geocode_admin1_polygon invoked with params (%, %, %, %)', user_id, 'some_transaction_id', admin1_name, country_name; + RETURN NULL; +END; +$$ LANGUAGE 'plpgsql'; + + +-- Exercise the public and the proxied function +SELECT cdb_geocoder_client.geocode_admin1_polygon('California'); +SELECT cdb_geocoder_client.geocode_admin1_polygon('California', 'United States');