1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
\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
$$;
|