diff options
| author | David E. Wheeler | 2012-02-25 21:03:49 +0000 |
|---|---|---|
| committer | David E. Wheeler | 2012-02-25 21:03:49 +0000 |
| commit | ebbe8790e45ae819a59be95e03fd5291dc4ca314 (patch) | |
| tree | 65bc017fa18073ca084bc4cb73feb8f270fa905e /sql | |
| parent | a577692e08076dd47c1dfbae4cb3fff92a4e291d (diff) | |
Move tests to test subdirectory.
Diffstat (limited to 'sql')
| -rw-r--r-- | sql/plproxy_clustermap.sql | 56 | ||||
| -rw-r--r-- | sql/plproxy_dynamic_record.sql | 41 | ||||
| -rw-r--r-- | sql/plproxy_encoding.sql | 161 | ||||
| -rw-r--r-- | sql/plproxy_errors.sql | 63 | ||||
| -rw-r--r-- | sql/plproxy_init.sql | 82 | ||||
| -rw-r--r-- | sql/plproxy_many.sql | 63 | ||||
| -rw-r--r-- | sql/plproxy_select.sql | 121 | ||||
| -rw-r--r-- | sql/plproxy_split.sql | 103 | ||||
| -rw-r--r-- | sql/plproxy_sqlmed.sql | 80 | ||||
| -rw-r--r-- | sql/plproxy_target.sql | 45 | ||||
| -rw-r--r-- | sql/plproxy_test.sql | 291 |
11 files changed, 0 insertions, 1106 deletions
diff --git a/sql/plproxy_clustermap.sql b/sql/plproxy_clustermap.sql deleted file mode 100644 index b4715bd..0000000 --- a/sql/plproxy_clustermap.sql +++ /dev/null @@ -1,56 +0,0 @@ -create or replace function plproxy.get_cluster_version(cluster_name text) -returns integer as $$ -begin - if cluster_name = 'testcluster' then - return 6; - elsif cluster_name = 'map0' then - return 1; - elsif cluster_name = 'map1' then - return 1; - elsif cluster_name = 'map2' then - return 1; - elsif cluster_name = 'map3' then - return 1; - end if; - raise exception 'no such cluster: %', cluster_name; -end; $$ language plpgsql; - -create or replace function plproxy.get_cluster_partitions(cluster_name text) -returns setof text as $$ -begin - if cluster_name = 'testcluster' then - return next 'host=127.0.0.1 dbname=test_part0'; - return next 'host=127.0.0.1 dbname=test_part1'; - return next 'host=127.0.0.1 dbname=test_part2'; - return next 'host=127.0.0.1 dbname=test_part3'; - elsif cluster_name = 'map0' then - return next 'host=127.0.0.1 dbname=test_part0'; - elsif cluster_name = 'map1' then - return next 'host=127.0.0.1 dbname=test_part1'; - elsif cluster_name = 'map2' then - return next 'host=127.0.0.1 dbname=test_part2'; - elsif cluster_name = 'map3' then - return next 'host=127.0.0.1 dbname=test_part3'; - else - raise exception 'no such cluster: %', cluster_name; - end if; - return; -end; $$ language plpgsql; - -create function map_cluster(part integer) returns text as $$ -begin - return 'map' || part; -end; -$$ language plpgsql; - -create function test_clustermap(part integer) returns setof text as $$ - cluster map_cluster(part); - run on 0; - select current_database(); -$$ language plproxy; - -select * from test_clustermap(0); -select * from test_clustermap(1); -select * from test_clustermap(2); -select * from test_clustermap(3); - diff --git a/sql/plproxy_dynamic_record.sql b/sql/plproxy_dynamic_record.sql deleted file mode 100644 index 5581d88..0000000 --- a/sql/plproxy_dynamic_record.sql +++ /dev/null @@ -1,41 +0,0 @@ --- dynamic query support testing -create or replace function dynamic_query(q text) -returns setof record as $x$ - cluster 'map0'; - run on all; -$x$ language plproxy; - -\c test_part0 -create or replace function dynamic_query(q text) -returns setof record as $x$ -declare - ret record; -begin - for ret in execute q loop - return next ret; - end loop; - return; -end; -$x$ language plpgsql; -create table dynamic_query_test ( - id integer, - username text, - other text -); -insert into dynamic_query_test values ( 1, 'user1', 'blah'); -insert into dynamic_query_test values ( 2, 'user2', 'foo'); - -\c regression -select * from dynamic_query('select * from dynamic_query_test') as (id integer, username text, other text); -select * from dynamic_query('select id, username from dynamic_query_test') as foo(id integer, username text); - - --- test errors -create or replace function dynamic_query_select() -returns setof record as $x$ - cluster 'map0'; - run on all; - select id, username from dynamic_query_test; -$x$ language plproxy; -select * from dynamic_query_select() as (id integer, username text); - diff --git a/sql/plproxy_encoding.sql b/sql/plproxy_encoding.sql deleted file mode 100644 index 1da4d40..0000000 --- a/sql/plproxy_encoding.sql +++ /dev/null @@ -1,161 +0,0 @@ - -------------------------------------------------- --- encoding tests -------------------------------------------------- - -set client_encoding = 'utf8'; - --- google translate says: --- column: コラム --- table: テーブル --- client data: クライアント側のデータ --- proxy data: プロキシデータ --- remote data: リモートデータ --- argument: 引数 - - -set client_min_messages = 'warning'; -drop database if exists test_enc_proxy; -drop database if exists test_enc_part; -create database test_enc_proxy with encoding 'euc_jp' template template0; -create database test_enc_part with encoding 'utf-8' template template0; - --- initialize proxy db -\c test_enc_proxy -set client_encoding = 'utf-8'; -set client_min_messages = 'fatal'; -create language plpgsql; -set client_min_messages = 'warning'; -\set ECHO none -\i plproxy.sql -\set ECHO all -create schema plproxy; -create or replace function plproxy.get_cluster_version(cluster_name text) -returns integer as $$ begin return 1; end; $$ language plpgsql; -create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text) -returns setof record as $$ begin return; end; $$ language plpgsql; -create or replace function plproxy.get_cluster_partitions(cluster_name text) -returns setof text as $$ begin - return next 'host=127.0.0.1 dbname=test_enc_part'; return; -end; $$ language plpgsql; - -create table intl_data (id int4, "コラム" text); -create function test_encoding() returns setof intl_data as $$ - cluster 'testcluster'; run on 0; select * from intl_data order by 1; -$$ language plproxy; -create function test_encoding2(text) returns setof intl_data as $$ - cluster 'testcluster'; run on 0; - select 0 as id, $1 as "コラム"; -$$ language plproxy; -create function test_encoding3(text) returns setof intl_data as $$ - cluster 'testcluster'; run on 0; -$$ language plproxy; --- initialize part db -\c test_enc_part -set client_min_messages = 'fatal'; -create language plpgsql; -set client_min_messages = 'warning'; -set client_encoding = 'utf8'; -create table intl_data (id int4, "コラム" text); -insert into intl_data values (1, 'リモートデータ'); -create function test_encoding3(text) -returns setof intl_data as $$ -declare rec intl_data%rowtype; -begin - raise notice 'got: %', $1; - rec := (3, $1); - return next rec; return; -end; $$ language plpgsql; - -set client_encoding = 'sjis'; -select * from intl_data order by 1; -set client_encoding = 'euc_jp'; -select * from intl_data order by 1; -set client_encoding = 'utf-8'; -select * from intl_data order by 1; - --- test -\c test_enc_proxy -set client_encoding = 'sjis'; -select * from test_encoding(); -set client_encoding = 'euc_jp'; -select * from test_encoding(); -set client_encoding = 'utf8'; -select * from test_encoding(); -select * from test_encoding2('クライアント側のデータ'); -select * from test_encoding3('クライアント側のデータ'); - -\c template1 -set client_min_messages = 'warning'; -drop database if exists test_enc_proxy; -drop database if exists test_enc_part; -create database test_enc_proxy with encoding 'utf-8' template template0; -create database test_enc_part with encoding 'euc_jp' template template0; - --- initialize proxy db -\c test_enc_proxy -set client_min_messages = 'fatal'; -create language plpgsql; -set client_min_messages = 'warning'; -\set ECHO none -\i plproxy.sql -\set ECHO all -set client_encoding = 'utf8'; -create schema plproxy; -create or replace function plproxy.get_cluster_version(cluster_name text) -returns integer as $$ begin return 1; end; $$ language plpgsql; -create or replace function plproxy.get_cluster_config(cluster_name text, out key text, out val text) -returns setof record as $$ begin return; end; $$ language plpgsql; -create or replace function plproxy.get_cluster_partitions(cluster_name text) -returns setof text as $$ begin - return next 'host=127.0.0.1 dbname=test_enc_part'; return; -end; $$ language plpgsql; - -create table intl_data (id int4, "コラム" text); -create function test_encoding() returns setof intl_data as $$ - cluster 'testcluster'; run on 0; select * from intl_data order by 1; -$$ language plproxy; -create function test_encoding2(text) returns setof intl_data as $$ - cluster 'testcluster'; run on 0; - select 0 as id, $1 as "コラム"; -$$ language plproxy; -create function test_encoding3(text) returns setof intl_data as $$ - cluster 'testcluster'; run on 0; -$$ language plproxy; - --- initialize part db -\c test_enc_part -set client_min_messages = 'fatal'; -create language plpgsql; -set client_min_messages = 'warning'; -set client_encoding = 'utf8'; -create table intl_data (id int4, "コラム" text); -insert into intl_data values (1, 'リモートデータ'); -create function test_encoding3(text) -returns setof intl_data as $$ -declare rec intl_data%rowtype; -begin - raise notice 'got: %', $1; - rec := (3, $1); - return next rec; return; -end; $$ language plpgsql; -set client_encoding = 'sjis'; -select * from intl_data order by 1; -set client_encoding = 'euc_jp'; -select * from intl_data order by 1; -set client_encoding = 'utf-8'; -select * from intl_data order by 1; - --- test -\c test_enc_proxy -set client_encoding = 'utf8'; -set client_encoding = 'sjis'; -select * from test_encoding(); -set client_encoding = 'euc_jp'; -select * from test_encoding(); -set client_encoding = 'utf-8'; -select * from test_encoding(); -select * from test_encoding2('クライアント側のデータ'); -select * from test_encoding3('クライアント側のデータ'); - - diff --git a/sql/plproxy_errors.sql b/sql/plproxy_errors.sql deleted file mode 100644 index 09bdf81..0000000 --- a/sql/plproxy_errors.sql +++ /dev/null @@ -1,63 +0,0 @@ - --- test bad arg -create function test_err1(dat text) -returns text as $$ - cluster 'testcluster'; - run on hashtext(username); -$$ language plproxy; -select * from test_err1('dat'); - -create function test_err2(dat text) -returns text as $$ - cluster 'testcluster'; - run on hashtext($2); -$$ language plproxy; -select * from test_err2('dat'); - -create function test_err3(dat text) -returns text as $$ - cluster 'nonexists'; - run on hashtext($1); -$$ language plproxy; -select * from test_err3('dat'); - --- should work -create function test_err_none(dat text) -returns text as $$ - cluster 'testcluster'; - run on hashtext($1); - select 'ok'; -$$ language plproxy; -select * from test_err_none('dat'); - ---- result map errors -create function test_map_err1(dat text) -returns text as $$ cluster 'testcluster'; run on 0; - select dat as "foo", 'asd' as "bar"; -$$ language plproxy; -select * from test_map_err1('dat'); - -create function test_map_err2(dat text, out res1 text, out res2 text) -returns record as $$ cluster 'testcluster'; run on 0; - select dat as res1; -$$ language plproxy; -select * from test_map_err2('dat'); - -create function test_map_err3(dat text, out res1 text, out res2 text) -returns record as $$ cluster 'testcluster'; run on 0; - select dat as res1, 'foo' as res_none; -$$ language plproxy; -select * from test_map_err3('dat'); - -create function test_map_err4(dat text, out res1 text, out res2 text) -returns record as $$ - --cluster 'testcluster'; - run on hashtext(dat); - select dat as res2, 'foo' as res1; -$$ language plproxy; -select * from test_map_err4('dat'); - - - - - diff --git a/sql/plproxy_init.sql b/sql/plproxy_init.sql deleted file mode 100644 index 12390e4..0000000 --- a/sql/plproxy_init.sql +++ /dev/null @@ -1,82 +0,0 @@ - -\set ECHO none - -set client_min_messages = 'warning'; - -\i plproxy.sql - -set client_min_messages = 'fatal'; -create language plpgsql; -set client_min_messages = 'warning'; - --- create cluster info functions -create schema plproxy; -create or replace function plproxy.get_cluster_version(cluster_name text) -returns integer as $$ -begin - if cluster_name = 'testcluster' then - return 5; - end if; - if cluster_name = 'badcluster' then - return 5; - end if; - raise exception 'no such cluster: %', cluster_name; -end; $$ language plpgsql; - -create or replace function -plproxy.get_cluster_partitions(cluster_name text) -returns setof text as $$ -begin - if cluster_name = 'testcluster' then - return next 'host=127.0.0.1 dbname=test_part'; - return; - end if; - if cluster_name = 'badcluster' then - return next 'host=127.0.0.1 dbname=nonex_db'; - return; - end if; - raise exception 'no such cluster: %', cluster_name; -end; $$ language plpgsql; - -create or replace function -plproxy.get_cluster_config(cluster_name text, out key text, out val text) -returns setof record as $$ -begin - key = 'keepalive_idle'; val = '240'; return next; - key = 'keepalive_interval'; val = '15'; return next; - key = 'keepalive_count'; val = '4'; return next; - return; -end; $$ language plpgsql; - -------------------------------------------------- --- intialize part -------------------------------------------------- -drop database if exists test_part; -drop database if exists test_part0; -drop database if exists test_part1; -drop database if exists test_part2; -drop database if exists test_part3; -create database test_part; -create database test_part0; -create database test_part1; -create database test_part2; -create database test_part3; - -drop database if exists test_enc_proxy; -drop database if exists test_enc_part; - -\c test_part -set client_min_messages = 'fatal'; -create language plpgsql; -\c test_part0 -set client_min_messages = 'fatal'; -create language plpgsql; -\c test_part1 -set client_min_messages = 'fatal'; -create language plpgsql; -\c test_part2 -set client_min_messages = 'fatal'; -create language plpgsql; -\c test_part3 -set client_min_messages = 'fatal'; -create language plpgsql; diff --git a/sql/plproxy_many.sql b/sql/plproxy_many.sql deleted file mode 100644 index c1d2305..0000000 --- a/sql/plproxy_many.sql +++ /dev/null @@ -1,63 +0,0 @@ -create or replace function plproxy.get_cluster_version(cluster_name text) -returns integer as $$ -begin - if cluster_name = 'testcluster' then - return 6; - end if; - raise exception 'no such cluster: %', cluster_name; -end; $$ language plpgsql; - -create or replace function plproxy.get_cluster_partitions(cluster_name text) -returns setof text as $$ -begin - if cluster_name = 'testcluster' then - return next 'host=127.0.0.1 dbname=test_part0'; - return next 'host=127.0.0.1 dbname=test_part1'; - return next 'host=127.0.0.1 dbname=test_part2'; - return next 'host=127.0.0.1 dbname=test_part3'; - return; - end if; - raise exception 'no such cluster: %', cluster_name; -end; $$ language plpgsql; - -\c test_part0 -create function test_multi(part integer, username text) -returns integer as $$ begin return 0; end; $$ language plpgsql; -\c test_part1 -create function test_multi(part integer, username text) -returns integer as $$ begin return 1; end; $$ language plpgsql; -\c test_part2 -create function test_multi(part integer, username text) -returns integer as $$ begin return 2; end; $$ language plpgsql; -\c test_part3 -create function test_multi(part integer, username text) -returns integer as $$ begin return 3; end; $$ language plpgsql; - -\c regression -create function test_multi(part integer, username text) -returns integer as $$ cluster 'testcluster'; run on int4(part); $$ language plproxy; -select test_multi(0, 'foo'); -select test_multi(1, 'foo'); -select test_multi(2, 'foo'); -select test_multi(3, 'foo'); - --- test RUN ON ALL -drop function test_multi(integer, text); -create function test_multi(part integer, username text) -returns setof integer as $$ cluster 'testcluster'; run on all; $$ language plproxy; -select test_multi(0, 'foo') order by 1; - --- test RUN ON 2 -drop function test_multi(integer, text); -create function test_multi(part integer, username text) -returns setof integer as $$ cluster 'testcluster'; run on 2; $$ language plproxy; -select test_multi(0, 'foo'); - --- test RUN ON RANDOM -drop function test_multi(integer, text); -create function test_multi(part integer, username text) -returns setof integer as $$ cluster 'testcluster'; run on any; $$ language plproxy; --- expect that 20 calls use all partitions -select distinct test_multi(0, 'foo') from generate_series(1,20) order by 1; - - diff --git a/sql/plproxy_select.sql b/sql/plproxy_select.sql deleted file mode 100644 index 2d724c9..0000000 --- a/sql/plproxy_select.sql +++ /dev/null @@ -1,121 +0,0 @@ - --- test regular sql -create function test_select(xuser text, tmp boolean) -returns integer as $x$ - cluster 'testcluster'; - run on hashtext(xuser); - select /********* - junk ; - ********** ****/ id from sel_test where username = xuser - and ';' <> 'as;d''a ; sd' - and $tmp$ ; 'a' $tmp$ <> 'as;d''a ; sd' - and $tmp$ $ $$ $foo$tmp$ <> 'x'; -$x$ language plproxy; - -\c test_part -create table sel_test ( - id integer, - username text -); -insert into sel_test values ( 1, 'user'); - -\c regression -select * from test_select('user', true); -select * from test_select('xuser', false); - - --- test errors -create function test_select_err(xuser text, tmp boolean) -returns integer as $$ - cluster 'testcluster'; - run on hashtext(xuser); - select id from sel_test where username = xuser; - select id from sel_test where username = xuser; -$$ language plproxy; - -select * from test_select_err('user', true); - - -create function get_zero() -returns setof integer as $x$ - cluster 'testcluster'; - run on all; - select (0*0); -$x$ language plproxy; - -select * from get_zero(); - -\c test_part -create table numbers ( - num int, - name text -); -insert into numbers values (1, 'one'); -insert into numbers values (2, 'two'); - -create function ret_numtuple(int) -returns numbers as $x$ - select num, name from numbers where num = $1; -$x$ language sql; - -\c regression -create type numbers_type as (num int, name text); - -create function get_one() -returns setof numbers_type as $x$ - cluster 'testcluster'; - run on all; - select (ret_numtuple(1)).num, (ret_numtuple(1)).name; -$x$ language plproxy; - -select * from get_one(); - - -\c test_part -create function remote_func(a varchar, b varchar, c varchar) -returns void as $$ -begin - return; -end; -$$ language plpgsql; - -\c regression -CREATE OR REPLACE FUNCTION test1(x integer, a varchar, b varchar, c varchar) -RETURNS void AS $$ -CLUSTER 'testcluster'; -RUN ON 0; -SELECT * FROM remote_func(a, b, c); -$$ LANGUAGE plproxy; - -select * from test1(1, 'a', NULL,NULL); -select * from test1(1, NULL, NULL,NULL); - -CREATE OR REPLACE FUNCTION test2(a varchar, b varchar, c varchar) -RETURNS void AS $$ -CLUSTER 'testcluster'; -RUN ON 0; -SELECT * FROM remote_func(a, b, c); -$$ LANGUAGE plproxy; - -select * from test2(NULL, NULL, NULL); -select * from test2('a', NULL, NULL); - - -CREATE OR REPLACE FUNCTION test3(a varchar, b varchar, c varchar) -RETURNS void AS $$ -CLUSTER 'testcluster'; -RUN ON 0; -SELECT * FROM remote_func(a, c, b); -$$ LANGUAGE plproxy; - -select * from test3(NULL,NULL, 'a'); -select * from test3('a', NULL,NULL); - - - - - - - - - diff --git a/sql/plproxy_split.sql b/sql/plproxy_split.sql deleted file mode 100644 index d65edf2..0000000 --- a/sql/plproxy_split.sql +++ /dev/null @@ -1,103 +0,0 @@ --- partition functions -\c test_part0 -create or replace function test_array(a text[], b text[], c text) returns text as -$$ -select current_database() || ' $1:' || array_to_string($1, ',') - || ' $2:' || array_to_string($2, ',') - || ' $3:' || $3; -$$ language sql; -\c test_part1 -create or replace function test_array(a text[], b text[], c text) returns text as -$$ -select current_database() || ' $1:' || array_to_string($1, ',') - || ' $2:' || array_to_string($2, ',') - || ' $3:' || $3; -$$ language sql; -\c test_part2 -create or replace function test_array(a text[], b text[], c text) returns text as -$$ -select current_database() || ' $1:' || array_to_string($1, ',') - || ' $2:' || array_to_string($2, ',') - || ' $3:' || $3; -$$ language sql; -\c test_part3 -create or replace function test_array(a text[], b text[], c text) returns text as -$$ -select current_database() || ' $1:' || array_to_string($1, ',') - || ' $2:' || array_to_string($2, ',') - || ' $3:' || $3; -$$ language sql; - -\c regression - --- invalid arg reference -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split $4; cluster 'testcluster'; run on 0;$$ language plproxy; -select * from test_array(array['a'], array['g'], 'foo'); - --- invalid arg name -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split x; cluster 'testcluster'; run on 0; $$ language plproxy; -select * from test_array(array['a'], array['b', 'c'], 'foo'); - --- cannot split more than once -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split a, b, b; cluster 'testcluster'; run on 0; $$ language plproxy; -select * from test_array(array['a'], array['b', 'c'], 'foo'); - --- attempt to split non-array -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split $3; cluster 'testcluster'; run on 0;$$ language plproxy; -select * from test_array(array['a'], array['g'], 'foo'); - --- array size/dimensions mismatch -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split a, b; cluster 'testcluster'; run on 0; $$ language plproxy; -select * from test_array(array['a'], array['b', 'c'], 'foo'); -select * from test_array(array['a','b','c','d'], null, 'foo'); -select * from test_array(null, array['e','f','g','h'], 'foo'); -select * from test_array(array[array['a1'],array['a2']], array[array['b1'],array['b2']], 'foo'); - --- run on array hash, split one array -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split a; cluster 'testcluster'; run on ascii(a);$$ language plproxy; -select * from test_array(array['a','b','c','d'], array['e','f','g','h'], 'foo'); - --- run on text hash, split two arrays (nop split) -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split a, b; cluster 'testcluster'; run on ascii(c);$$ language plproxy; -select * from test_array(array['a','b','c','d'], array['e','f','g','h'], 'foo'); - --- run on array hash, split two arrays -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split a, b; cluster 'testcluster'; run on ascii(a);$$ language plproxy; -select * from test_array(array['a','b','c','d'], array['e','f','g','h'], 'foo'); -select * from test_array(null, null, null); -select * from test_array('{}'::text[], '{}'::text[], 'foo'); - --- run on text hash, split all arrays -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split all; cluster 'testcluster'; run on ascii(c);$$ language plproxy; -select * from test_array(array['a','b','c','d'], array['e','f','g','h'], 'foo'); - --- run on text hash, attempt to split all arrays but none are present -create or replace function test_nonarray_split(a text, b text, c text) returns setof text as -$$ split all; cluster 'testcluster'; run on ascii(a); select * from test_array(array[a], array[b], c); -$$ language plproxy; -select * from test_nonarray_split('a', 'b', 'c'); - --- run on array hash, split all arrays -create or replace function test_array(a text[], b text[], c text) returns setof text as -$$ split all; cluster 'testcluster'; run on ascii(a);$$ language plproxy; -select * from test_array(array['a','b','c','d'], array['e','f','g','h'], 'foo'); - --- run on arg -create or replace function test_array_direct(a integer[], b text[], c text) returns setof text as -$$ split a; cluster 'testcluster'; run on a; select test_array('{}'::text[], b, c);$$ language plproxy; - -select * from test_array_direct(array[2,3], array['a','b','c','d'], 'foo'); - -create or replace function test_array_direct(a integer[], b text[], c text) returns setof text as -$$ split a, b; cluster 'testcluster'; run on a; select test_array('{}'::text[], b, c);$$ language plproxy; - -select * from test_array_direct(array[0,1,2,3], array['a','b','c','d'], 'foo'); diff --git a/sql/plproxy_sqlmed.sql b/sql/plproxy_sqlmed.sql deleted file mode 100644 index 3898ace..0000000 --- a/sql/plproxy_sqlmed.sql +++ /dev/null @@ -1,80 +0,0 @@ - -set client_min_messages = 'warning'; - -drop foreign data wrapper if exists plproxy cascade; -create foreign data wrapper plproxy; - -create server sqlmedcluster foreign data wrapper plproxy - options ( partition_0 'dbname=test_part3 host=localhost', - partition_1 'dbname=test_part2 host=localhost', - partition_2 'dbname=test_part1 host=localhost', - partition_3 'dbname=test_part0 host=localhost'); - -create or replace function sqlmed_test1() returns setof text as $$ - cluster 'sqlmedcluster'; - run on 0; - select 'plproxy: user=' || current_user || ' dbname=' || current_database(); -$$ language plproxy; - -drop user if exists test_user_bob; -create user test_user_bob password 'secret'; - --- no user mapping -set session authorization test_user_bob; -select * from sqlmed_test1(); -reset session authorization; - --- add a public user mapping -create user mapping for public server sqlmedcluster - options ( user 'test_user_bob', - password 'secret1'); - --- no access to foreign server -set session authorization test_user_bob; -select * from sqlmed_test1(); -reset session authorization; - --- ok, access granted -grant usage on foreign server sqlmedcluster to test_user_bob; -set session authorization test_user_bob; -select * from sqlmed_test1(); -reset session authorization; - --- cluster definition validation - --- partition numbers must be consecutive -alter server sqlmedcluster options (drop partition_2); -select * from sqlmed_test1(); - --- invalid partition count -alter server sqlmedcluster options - (drop partition_3, - add partition_2 'dbname=test_part1 host=localhost'); -select * from sqlmed_test1(); - --- switching betweem SQL/MED and compat mode - -create or replace function sqlmed_compat_test() returns setof text as $$ - cluster 'testcluster'; - run on 0; - select 'plproxy: part=' || current_database(); -$$ language plproxy; - --- testcluster -select * from sqlmed_compat_test(); - --- override the test cluster with a SQL/MED definition -drop server if exists testcluster cascade; -create server testcluster foreign data wrapper plproxy - options (partition_0 'dbname=regression host=localhost'); -create user mapping for public server testcluster; - --- sqlmed testcluster -select * from sqlmed_compat_test(); - --- now drop the SQL/MED testcluster, and test fallback -drop server testcluster cascade; - --- back on testcluster again -select * from sqlmed_compat_test(); - diff --git a/sql/plproxy_target.sql b/sql/plproxy_target.sql deleted file mode 100644 index 7bee249..0000000 --- a/sql/plproxy_target.sql +++ /dev/null @@ -1,45 +0,0 @@ - --- test target clause - -create function test_target(xuser text, tmp boolean) -returns text as $$ - cluster 'testcluster'; - run on 0; - target test_target_dst; -$$ language plproxy; - -\c test_part0 - -create function test_target_dst(xuser text, tmp boolean) -returns text as $$ -begin - return 'dst'; -end; -$$ language plpgsql; - -\c regression - -select * from test_target('foo', true); - --- test errors - -create function test_target_err1(xuser text) -returns text as $$ - cluster 'testcluster'; - run on 0; - target test_target_dst; - target test_target_dst; -$$ language plproxy; - -select * from test_target_err1('asd'); - -create function test_target_err2(xuser text) -returns text as $$ - cluster 'testcluster'; - run on 0; - target test_target_dst; - select 1; -$$ language plproxy; - -select * from test_target_err2('asd'); - diff --git a/sql/plproxy_test.sql b/sql/plproxy_test.sql deleted file mode 100644 index 7eac7bc..0000000 --- a/sql/plproxy_test.sql +++ /dev/null @@ -1,291 +0,0 @@ - --- test normal function -create function testfunc(username text, id integer, data text) -returns text as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function testfunc(username text, id integer, data text) -returns text as $$ begin return 'username=' || username; end; $$ language plpgsql; -\c regression -select * from testfunc('user', 1, 'foo'); -select * from testfunc('user', 1, 'foo'); -select * from testfunc('user', 1, 'foo'); - - --- test setof text -create function test_set(username text, num integer) -returns setof text as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function test_set(username text, num integer) -returns setof text as $$ -declare i integer; -begin - i := 0; - while i < num loop - return next 'username=' || username || ' row=' || i; - i := i + 1; - end loop; - return; -end; $$ language plpgsql; -\c regression -select * from test_set('user', 1); -select * from test_set('user', 0); -select * from test_set('user', 3); - --- test record -create type ret_test_rec as ( id integer, dat text); -create function test_record(username text, num integer) -returns ret_test_rec as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create type ret_test_rec as ( id integer, dat text); -create function test_record(username text, num integer) -returns ret_test_rec as $$ -declare ret ret_test_rec%rowtype; -begin - ret := (num, username); - return ret; -end; $$ language plpgsql; -\c regression -select * from test_record('user', 3); - --- test setof record -create function test_record_set(username text, num integer) -returns setof ret_test_rec as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function test_record_set(username text, num integer) -returns setof ret_test_rec as $$ -declare ret ret_test_rec%rowtype; i integer; -begin - i := 0; - while i < num loop - ret := (i, username); - i := i + 1; - return next ret; - end loop; - return; -end; $$ language plpgsql; -\c regression -select * from test_record_set('user', 1); -select * from test_record_set('user', 0); -select * from test_record_set('user', 3); - - --- test void -create function test_void(username text, num integer) -returns void as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function test_void(username text, num integer) -returns void as $$ -begin - return; -end; $$ language plpgsql; --- look what void actually looks -select * from test_void('void', 2); -select test_void('void', 2); -\c regression -select * from test_void('user', 1); -select * from test_void('user', 3); -select test_void('user', 3); -select test_void('user', 3); - - --- test normal outargs -create function test_out1(username text, id integer, out data text) -as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function test_out1(username text, id integer, out data text) -returns text as $$ begin data := 'username=' || username; return; end; $$ language plpgsql; -\c regression -select * from test_out1('user', 1); - --- test complicated outargs -create function test_out2(username text, id integer, out out_id integer, xdata text, inout xdata2 text, out odata text) -as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function test_out2(username text, id integer, out out_id integer, xdata text, inout xdata2 text, out odata text) -as $$ begin - out_id = id; - xdata2 := xdata2 || xdata; - odata := 'username=' || username; - return; -end; $$ language plpgsql; -\c regression -select * from test_out2('user', 1, 'xdata', 'xdata2'); - --- test various types -create function test_types(username text, inout vbool boolean, inout xdate timestamp, inout bin bytea) -as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create function test_types(username text, inout vbool boolean, inout xdate timestamp, inout bin bytea) -as $$ begin return; end; $$ language plpgsql; - -\c regression -select 1 from (select set_config(name, 'escape', false) as ignore - from pg_settings where name = 'bytea_output') x -where x.ignore = 'foo'; -select * from test_types('types', true, '2009-11-04 12:12:02', E'a\\000\\001\\002b'); -select * from test_types('types', NULL, NULL, NULL); - - --- test user defined types -create domain posint as int4 check (value > 0); -create type struct as (id int4, data text); - -create function test_types2(username text, inout v_posint posint, inout v_struct struct, inout arr int8[]) -as $$ cluster 'testcluster'; $$ language plproxy; - -\c test_part -create domain posint as int4 check (value > 0); -create type struct as (id int4, data text); -create function test_types2(username text, inout v_posint posint, inout v_struct struct, inout arr int8[]) -as $$ begin return; end; $$ language plpgsql; -\c regression -select * from test_types2('types', 4, (2, 'asd'), array[1,2,3]); -select * from test_types2('types', NULL, NULL, NULL); - --- test CONNECT -create function test_connect1() returns text -as $$ connect 'dbname=test_part'; select current_database(); $$ language plproxy; -select * from test_connect1(); - --- test CONNECT $argument -create function test_connect2(connstr text) returns text -as $$ connect connstr; select current_database(); $$ language plproxy; -select * from test_connect2('dbname=test_part'); - --- test CONNECT function($argument) -create function test_connect3(connstr text) returns text -as $$ connect text(connstr); select current_database(); $$ language plproxy; -select * from test_connect3('dbname=test_part'); - --- test quoting function -create type "RetWeird" as ( - "ColId" int4, - "ColData" text -); - -create function "testQuoting"(username text, id integer, data text) -returns "RetWeird" as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create type "RetWeird" as ( - "ColId" int4, - "ColData" text -); -create function "testQuoting"(username text, id integer, data text) -returns "RetWeird" as $$ select 1::int4, 'BazOoka'::text $$ language sql; -\c regression -select * from "testQuoting"('user', '1', 'dat'); - --- test arg type quoting -create domain "bad type" as text; -create function test_argq(username text, "some arg" integer, "other arg" "bad type", - out "bad out" text, out "bad out2" "bad type") -as $$ cluster 'testcluster'; run on hashtext(username); $$ language plproxy; -\c test_part -create domain "bad type" as text; -create function test_argq(username text, "some arg" integer, "other arg" "bad type", - out "bad out" text, out "bad out2" "bad type") - as $$ begin return; end; $$ language plpgsql; -\c regression -select * from test_argq('user', 1, 'q'); - --- test hash types function -create or replace function t_hash16(int4) returns int2 as $$ -declare - res int2; -begin - res = $1::int2; - return res; -end; -$$ language plpgsql; - -create or replace function t_hash64(int4) returns int8 as $$ -declare - res int8; -begin - res = $1; - return res; -end; -$$ language plpgsql; - -create function test_hash16(id integer, data text) -returns text as $$ cluster 'testcluster'; run on t_hash16(id); select data; $$ language plproxy; -select * from test_hash16('0', 'hash16'); - -create function test_hash64(id integer, data text) -returns text as $$ cluster 'testcluster'; run on t_hash64(id); select data; $$ language plproxy; -select * from test_hash64('0', 'hash64'); - --- test argument difference -\c test_part -create function test_difftypes(username text, out val1 int2, out val2 float8) -as $$ begin val1 = 1; val2 = 3;return; end; $$ language plpgsql; -\c regression -create function test_difftypes(username text, out val1 int4, out val2 float4) -as $$ cluster 'testcluster'; run on 0; $$ language plproxy; -select * from test_difftypes('types'); - --- test simple hash -\c test_part -create function test_simple(partno int4) returns int4 -as $$ begin return $1; end; $$ language plpgsql; -\c regression -create function test_simple(partno int4) returns int4 -as $$ - cluster 'testcluster'; - run on $1; -$$ language plproxy; -select * from test_simple(0); -drop function test_simple(int4); - -create function test_simple(partno int4) returns int4 -as $$ - cluster 'testcluster'; - run on partno; -$$ language plproxy; -select * from test_simple(0); - --- test error passing -\c test_part -create function test_error1() returns int4 -as $$ -begin - select line2err; - return 0; -end; -$$ language plpgsql; -\c regression -create function test_error1() returns int4 -as $$ - cluster 'testcluster'; - run on 0; -$$ language plproxy; -select * from test_error1(); - -create function test_error2() returns int4 -as $$ - cluster 'testcluster'; - run on 0; - select err; -$$ language plproxy; -select * from test_error2(); - -create function test_error3() returns int4 -as $$ - connect 'dbname=test_part'; -$$ language plproxy; -select * from test_error3(); - --- test invalid db -create function test_bad_db() returns int4 -as $$ - cluster 'badcluster'; -$$ language plproxy; -select * from test_bad_db(); - -create function test_bad_db2() returns int4 -as $$ - connect 'dbname=wrong_name_db'; -$$ language plproxy; -select * from test_bad_db2(); - - |
