diff --git a/scripts-available/CDB_FederatedServerDiagnostics.sql b/scripts-available/CDB_FederatedServerDiagnostics.sql index 7b16263..2f727ea 100644 --- a/scripts-available/CDB_FederatedServerDiagnostics.sql +++ b/scripts-available/CDB_FederatedServerDiagnostics.sql @@ -1,12 +1,38 @@ +-------------------------------------------------------------------------------- +-- Private functions +-------------------------------------------------------------------------------- + +CREATE OR REPLACE FUNCTION @extschema@.__CDB_FS_Server_Diagnostics_PG(server_internal name) +RETURNS jsonb +AS $$ +BEGIN + RETURN '{}'::jsonb; +END +$$ +LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; + + + -------------------------------------------------------------------------------- -- Public functions -------------------------------------------------------------------------------- +-- +-- TODO: function documentation +-- CREATE OR REPLACE FUNCTION @extschema@.CDB_Federated_Server_Diagnostics(server TEXT) -RETURNS json -- TODO decide if json or jsonb +RETURNS jsonb AS $$ +DECLARE + server_internal name := @extschema@.__CDB_FS_Generate_Server_Name(input_name => server, check_existence => true); + server_type name := @extschema@.__CDB_FS_server_type(server_internal); BEGIN - RETURN '{}'::json; + CASE server_type + WHEN 'postgres_fdw' THEN + RETURN @extschema@.__CDB_FS_Server_Diagnostics_PG(server_internal); + ELSE + RAISE EXCEPTION 'Not implemented server type % for remote server %', server_type, server; + END CASE; END $$ LANGUAGE PLPGSQL VOLATILE PARALLEL UNSAFE; diff --git a/test/CDB_FederatedServerDiagnostics.sql b/test/CDB_FederatedServerDiagnostics.sql index d0af580..0c1097e 100644 --- a/test/CDB_FederatedServerDiagnostics.sql +++ b/test/CDB_FederatedServerDiagnostics.sql @@ -1,2 +1,50 @@ +-- =================================================================== +-- create FDW objects +-- =================================================================== +\set QUIET on +SET client_min_messages TO error; +\set VERBOSITY terse +CREATE EXTENSION postgres_fdw; + +CREATE ROLE cdb_fs_tester LOGIN PASSWORD 'cdb_fs_passwd'; +GRANT CONNECT ON DATABASE contrib_regression TO cdb_fs_tester; + +-- Create database to be used as remote +CREATE DATABASE cdb_fs_tester OWNER cdb_fs_tester; + +SELECT 'C1', cartodb.CDB_Federated_Server_Register_PG(server => 'loopback'::text, config => '{ + "server": { + "host": "localhost", + "port": @@PGPORT@@ + }, + "credentials": { + "username": "cdb_fs_tester", + "password": "cdb_fs_passwd" + } +}'::jsonb); +\set QUIET off + + +-- =================================================================== +-- Test server diagnostics function(s) +-- =================================================================== \echo '%% It raises an error if the server does not exist' SELECT '1.1', cartodb.CDB_Federated_Server_Diagnostics(server => 'doesNotExist'); + +\echo '%% It returns a jsonb object' +SELECT '1.2', pg_typeof(cartodb.CDB_Federated_Server_Diagnostics(server => 'loopback')); + + +-- =================================================================== +-- Cleanup +-- =================================================================== +\set QUIET on +SELECT 'D1', cartodb.CDB_Federated_Server_Unregister(server => 'loopback'::text); +DROP DATABASE cdb_fs_tester; + +-- Drop role +REVOKE CONNECT ON DATABASE contrib_regression FROM cdb_fs_tester; +DROP ROLE cdb_fs_tester; + +DROP EXTENSION postgres_fdw; +\set QUIET off diff --git a/test/CDB_FederatedServerDiagnostics_expect b/test/CDB_FederatedServerDiagnostics_expect index ea8ac49..b8ffd9e 100644 --- a/test/CDB_FederatedServerDiagnostics_expect +++ b/test/CDB_FederatedServerDiagnostics_expect @@ -1,2 +1,6 @@ +C1| %% It raises an error if the server does not exist -1.1|{} +ERROR: Server "doesNotExist" does not exist +%% It returns a jsonb object +1.2|jsonb +D1|