blob: 28ffe5f41c1a82d909f38ad95f0314f3cc879d10 [file] [log] [blame]
--
-- Test using functions with EXECUTE ON options in utility mode.
--
-- First, create test functions with different EXECUTE ON options
create function srf_on_master () returns setof text as $$
begin /* in func */
return next 'foo ' || current_setting('gp_contentid'); /* in func */
return next 'bar ' || current_setting('gp_contentid'); /* in func */
end; /* in func */
$$ language plpgsql EXECUTE ON COORDINATOR;
create function srf_on_all_segments () returns setof text as $$
begin /* in func */
return next 'foo ' || current_setting('gp_contentid'); /* in func */
return next 'bar ' || current_setting('gp_contentid'); /* in func */
end; /* in func */
$$ language plpgsql EXECUTE ON ALL SEGMENTS;
create function srf_on_any () returns setof text as $$
begin /* in func */
return next 'foo ' || current_setting('gp_contentid'); /* in func */
return next 'bar ' || current_setting('gp_contentid'); /* in func */
end; /* in func */
$$ language plpgsql EXECUTE ON ANY IMMUTABLE;
create function srf_on_initplan () returns setof text as $$
begin /* in func */
return next 'foo ' || current_setting('gp_contentid'); /* in func */
return next 'bar ' || current_setting('gp_contentid'); /* in func */
end; /* in func */
$$ language plpgsql EXECUTE ON INITPLAN;
-- Now try executing them in utility mode, in the master node and on a
-- segment. The expected behavior is that the function runs on the node
-- we're connected to, ignoring the EXECUTE ON directives.
--
-- Join with a table, to give the planner something more exciting to do
-- than just create the FunctionScan plan.
create table fewrows (t text) distributed by (t);
insert into fewrows select g from generate_series(1, 10) g;
-1U: select * from srf_on_master() as srf (x) left join fewrows on x = t;
-1U: select * from srf_on_all_segments() as srf (x) left join fewrows on x = t;
-1U: select * from srf_on_any() as srf (x) left join fewrows on x = t;
-1U: select * from srf_on_initplan() as srf (x) left join fewrows on x = t;
1U: select * from srf_on_master(), fewrows;
1U: select * from srf_on_all_segments(), fewrows;
1U: select * from srf_on_any(), fewrows;
1U: select * from srf_on_initplan(), fewrows;