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_test2;
set behavior_compat_options='proc_outparam_override';
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;
select * from gms_debug.attach_session('datanode1-1');
select pg_sleep(3);
select gms_next();
select gms_next();
select gms_next();
select gms_continue();
select gms_continue();
select gms_debug.detach_session();