CREATE OR REPLACE FUNCTION wait_for_gms_debug_extension()
RETURNS BOOLEAN AS $$
DECLARE
extension_exists BOOLEAN;
BEGIN
extension_exists := FALSE;
WHILE NOT extension_exists LOOP
PERFORM 1 FROM pg_extension WHERE extname = 'gms_debug';
IF FOUND THEN
extension_exists := TRUE;
ELSE
PERFORM pg_sleep(1);
END IF;
END LOOP;
RETURN extension_exists;
END;
$$ LANGUAGE plpgsql;
DO $$
BEGIN
IF wait_for_gms_debug_extension() THEN
END IF;
END $$;
set search_path = gms_debugger_test1;
set behavior_compat_options='proc_outparam_override';
CREATE or REPLACE FUNCTION gms_breakpoint(funcname text, lineno int)
returns void as $$
declare
pro_info gms_debug.program_info;
bkline binary_integer;
ret binary_integer;
begin
pro_info.name := funcname;
ret := gms_debug.set_breakpoint(pro_info, lineno, bkline,1,1);
RAISE NOTICE 'ret= %', ret;
RAISE NOTICE 'ret= %', bkline;
end;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION gms_continue()
returns void as $$
declare
run_info gms_debug.runtime_info;
ret binary_integer;
begin
ret := gms_debug.continue(run_info, gms_debug.break_any_return, 2);
RAISE NOTICE 'breakpoint= %', run_info.breakpoint;
RAISE NOTICE 'stackdepth= %', run_info.stackdepth;
RAISE NOTICE 'line= %', run_info.line#;
RAISE NOTICE 'reason= %', run_info.reason;
RAISE NOTICE 'ret= %',ret;
end;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION gms_next()
returns void as $$
declare
run_info gms_debug.runtime_info;
ret binary_integer;
begin
ret := gms_debug.continue(run_info, gms_debug.break_next_line, 2);
RAISE NOTICE 'breakpoint= %', run_info.breakpoint;
RAISE NOTICE 'stackdepth= %', run_info.stackdepth;
RAISE NOTICE 'line= %', run_info.line#;
RAISE NOTICE 'reason= %', run_info.reason;
RAISE NOTICE 'ret= %',ret;
end;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION gms_step()
returns void as $$
declare
run_info gms_debug.runtime_info;
ret binary_integer;
begin
ret := gms_debug.continue(run_info, gms_debug.break_any_call, 2);
RAISE NOTICE 'breakpoint= %', run_info.breakpoint;
RAISE NOTICE 'stackdepth= %', run_info.stackdepth;
RAISE NOTICE 'line= %', run_info.line#;
RAISE NOTICE 'reason= %', run_info.reason;
RAISE NOTICE 'ret= %',ret;
end;
$$ LANGUAGE plpgsql;
CREATE or REPLACE FUNCTION gms_info()
returns void as $$
declare
run_info gms_debug.runtime_info;
ret binary_integer;
begin
ret := gms_debug.get_runtime_info(1, run_info);
RAISE NOTICE 'breakpoint= %', run_info.breakpoint;
RAISE NOTICE 'stackdepth= %', run_info.stackdepth;
RAISE NOTICE 'line= %', run_info.line#;
RAISE NOTICE 'reason= %', run_info.reason;
RAISE NOTICE 'ret= %',ret;
end;
$$ LANGUAGE plpgsql;
select * from gms_debug.attach_session('datanode1-0', 1);
select pg_sleep(3);
select gms_breakpoint('test_debug', 0);
select gms_breakpoint('test_debug', 15);
select gms_breakpoint('test_debug', 17);
select gms_breakpoint('test_debug', 22);
select gms_breakpoint('test_debug', 15);
select gms_next();
select gms_next();
select gms_next();
select gms_next();
select gms_continue();
select gms_continue();
select gms_debug.detach_session();