blob: b1c76ee3b3391fe2ae5c3969ce4a1090a3c02664 [file] [log] [blame]
\set ECHO none
\pset format unaligned
/*
* Test for dbms_utility.format_call_stack(char mode).
* Mode is hex.
* The callstack returned is passed to regex_replace function.
* Regex_replace replaces the function oid from the stack with zero.
* This is done to avoid random results due to different oids generated.
* Also the line number and () of the function is removed since it is different
* across different pg version.
*/
CREATE OR REPLACE FUNCTION checkHexCallStack() returns text as $$
DECLARE
stack text;
BEGIN
select * INTO stack from dbms_utility.format_call_stack('o');
select * INTO stack from regexp_replace(stack,'[ 0-9a-fA-F]{4}[0-9a-fA-F]{4}',' 0','g');
select * INTO stack from regexp_replace(stack,'[45()]','','g');
return stack;
END;
$$ LANGUAGE plpgsql;
/*
* Test for dbms_utility.format_call_stack(char mode).
* Mode is integer.
*/
CREATE OR REPLACE FUNCTION checkIntCallStack() returns text as $$
DECLARE
stack text;
BEGIN
select * INTO stack from dbms_utility.format_call_stack('p');
select * INTO stack from regexp_replace(stack,'[ 0-9]{3}[0-9]{5}',' 0','g');
select * INTO stack from regexp_replace(stack,'[45()]','','g');
return stack;
END;
$$ LANGUAGE plpgsql;
/*
* Test for dbms_utility.format_call_stack(char mode).
* Mode is integer with unpadded output.
*/
CREATE OR REPLACE FUNCTION checkIntUnpaddedCallStack() returns text as $$
DECLARE
stack text;
BEGIN
select * INTO stack from dbms_utility.format_call_stack('s');
select * INTO stack from regexp_replace(stack,'[0-9]{5,}','0','g');
select * INTO stack from regexp_replace(stack,'[45()]','','g');
return stack;
END;
$$ LANGUAGE plpgsql;
select * from checkHexCallStack();
select * from checkIntCallStack();
select * from checkIntUnpaddedCallStack();
DROP FUNCTION checkHexCallStack();
DROP FUNCTION checkIntCallStack();
DROP FUNCTION checkIntUnpaddedCallStack();
/*
* Test for dbms_utility.get_time(), the result is rounded
* to have constant result in the regression test.
*/
DO $$
DECLARE
start_time integer;
end_time integer;
BEGIN
start_time := DBMS_UTILITY.GET_TIME();
PERFORM pg_sleep(2);
end_time := DBMS_UTILITY.GET_TIME();
-- clamp long runtime on slow build machines to the 2s the testsuite is expecting
IF end_time BETWEEN start_time + 300 AND start_time + 1000 THEN end_time := start_time + 250; END IF;
RAISE NOTICE 'Execution time: % seconds', trunc((end_time - start_time)::numeric/100);
END
$$;