-- ===================================================================
-- create test functions
-- ===================================================================

CREATE FUNCTION initialize_remote_temp_table(cstring, integer)
	RETURNS bool
	AS 'citus'
	LANGUAGE C STRICT;

CREATE FUNCTION count_remote_temp_table_rows(cstring, integer)
	RETURNS integer
	AS 'citus'
	LANGUAGE C STRICT;

CREATE FUNCTION get_and_purge_connection(cstring, integer)
	RETURNS bool
	AS 'citus'
	LANGUAGE C STRICT;

CREATE FUNCTION set_connection_status_bad(cstring, integer)
	RETURNS bool
	AS 'citus'
	LANGUAGE C STRICT;

-- ===================================================================
-- test connection hash functionality
-- ===================================================================

-- worker port number is set in pg_regress_multi.pl
\set worker_port 57638

-- reduce verbosity to squelch chatty warnings
\set VERBOSITY terse

-- connect to non-existent host
SELECT initialize_remote_temp_table('dummy-host-name', 12345);

\set VERBOSITY default

-- try to use hostname over 255 characters
SELECT initialize_remote_temp_table(repeat('a', 256)::cstring, :worker_port);

-- connect to localhost and build a temp table
SELECT initialize_remote_temp_table('localhost', :worker_port);

-- table should still be visible since session is reused
SELECT count_remote_temp_table_rows('localhost', :worker_port);

-- purge existing connection to localhost
SELECT get_and_purge_connection('localhost', :worker_port);

-- squelch WARNINGs that contain worker_port
SET client_min_messages TO ERROR;

-- should not be able to see table anymore
SELECT count_remote_temp_table_rows('localhost', :worker_port);

-- recreate once more
SELECT initialize_remote_temp_table('localhost', :worker_port);

-- set the connection status to bad
SELECT set_connection_status_bad('localhost', :worker_port);

-- should get connection failure (cached connection bad)
SELECT count_remote_temp_table_rows('localhost', :worker_port);

-- should get result failure (reconnected, so no temp table)
SELECT count_remote_temp_table_rows('localhost', :worker_port);

-- purge the connection so that we clean up the bad connection
SELECT get_and_purge_connection('localhost', :worker_port);

SET client_min_messages TO DEFAULT;
