Output: val, val2
(7 rows)
--- should not get FQSed because of DISTINCT clause
+-- should get FQSed because DISTINCT clause contains distkey
select distinct val, val2 from tab1_hash where val2 = 8;
val | val2
-----+------
Filter: (tab1_hash.val2 = 8)
(9 rows)
--- should not get FQSed because of GROUP clause
+-- should get FQSed because GROUP BY clause uses distkey
select val, val2 from tab1_hash where val2 = 8 group by val, val2;
val | val2
-----+------
Output: val, val2
(7 rows)
--- should not get FQSed because of DISTINCT clause
+-- should get FQSed because DISTINCT clause contains distkey
select distinct val, val2 from tab1_modulo where val2 = 8;
val | val2
-----+------
Filter: (tab1_modulo.val2 = 8)
(9 rows)
--- should not get FQSed because of GROUP clause
+-- should get FQSed because GROUP BY clause uses distkey
select val, val2 from tab1_modulo where val2 = 8 group by val, val2;
val | val2
-----+------
-- XC_COPY
--
--- COPY tests for a Postgres-XL cluster
-
-create or replace function pgxc_nodetype() returns varchar as
-$$
-declare
- pgxc_class_entries int;
-begin
- select into pgxc_class_entries count(*) from pgxc_class ;
- if pgxc_class_entries > 0 then
- return ' Node type: C';
- else
- return ' Node type: D';
- end if;
-end $$ language plpgsql;
-
-
-create function deffunc() returns bytea as
-$$
-begin
- return E'\\023\\000\\\\''!|''';
-end $$ language plpgsql;
-
-
-create or replace function deffunc_bytea() returns bytea as
-$$
-begin
- return E'\0123';
-end $$ language plpgsql;
-
-create or replace function deffunc_str() returns varchar as
-$$
-begin
- return E'\\.\\000"\\''!|''\\N' || pgxc_nodetype();
-end $$ language plpgsql;
-
-create or replace function deffunc_str_i() returns varchar immutable as
-$$
-begin
- return E'\\.\\000"\\''!|''' || pgxc_nodetype();
-end $$ language plpgsql;
-
-create or replace function deffunc_nullstring() returns varchar as
-$$
-begin
- return E'\\N';
-end $$ language plpgsql;
-
-create table xccopydef(idseq serial, id1 int,
- def1 bytea default deffunc(),
- def2 bytea default E'\\000'::bytea,
- def3 varchar default deffunc_str(),
- def4 varchar default deffunc_str_i(),
- def5 varchar default deffunc_nullstring(),
- def6 bytea default deffunc_bytea(),
- id2 varchar,
- def7 float default length(deffunc_str()) + 0.433);
-
-
-copy xccopydef (id1, id2) from stdin (delimiter '|');
-3 | \\\\x135
-\N| abcd
-\.
-
-copy xccopydef (id1, id2) from stdin (format 'csv');
-3 , \\\\x135
-, abcd
-\.
-
-
-insert into xccopydef (id1, id2) values (NULL, NULL);
-insert into xccopydef (id1) values (4567);
-
-select * from xccopydef order by idseq;
-
-copy xccopydef (id1, id2) to '@abs_builddir@/results/copydefout.data' (format 'binary');
-
-truncate xccopydef;
-
-copy xccopydef (id1, id2) from '@abs_builddir@/results/copydefout.data' (format 'binary');
-
-select * from xccopydef order by idseq;
-
-drop table xccopydef;
-drop function pgxc_nodetype();
-drop function deffunc();
-drop function deffunc_bytea();
-drop function deffunc_str();
-drop function deffunc_str_i();
-drop function deffunc_nullstring();
-
-- Tests related to COPY for a Postgres-XL cluster
-- Create a table not using the first node of cluster
SELECT create_table_nodes('xc_copy_1(a int, b int)', '{2}'::int[], 'replication', NULL);
--- /dev/null
+--
+-- XC_COPY
+--
+
+-- COPY tests for a Postgres-XL cluster
+
+create or replace function pgxc_nodetype() returns varchar as
+$$
+declare
+ pgxc_class_entries int;
+begin
+ select into pgxc_class_entries count(*) from pgxc_class ;
+ if pgxc_class_entries > 0 then
+ return ' Node type: C';
+ else
+ return ' Node type: D';
+ end if;
+end $$ language plpgsql;
+
+
+create function deffunc() returns bytea as
+$$
+begin
+ return E'\\023\\000\\\\''!|''';
+end $$ language plpgsql;
+
+
+create or replace function deffunc_bytea() returns bytea as
+$$
+begin
+ return E'\0123';
+end $$ language plpgsql;
+
+create or replace function deffunc_str() returns varchar as
+$$
+begin
+ return E'\\.\\000"\\''!|''\\N' || pgxc_nodetype();
+end $$ language plpgsql;
+
+create or replace function deffunc_str_i() returns varchar immutable as
+$$
+begin
+ return E'\\.\\000"\\''!|''' || pgxc_nodetype();
+end $$ language plpgsql;
+
+create or replace function deffunc_nullstring() returns varchar as
+$$
+begin
+ return E'\\N';
+end $$ language plpgsql;
+
+create table xccopydef(idseq serial, id1 int,
+ def1 bytea default deffunc(),
+ def2 bytea default E'\\000'::bytea,
+ def3 varchar default deffunc_str(),
+ def4 varchar default deffunc_str_i(),
+ def5 varchar default deffunc_nullstring(),
+ def6 bytea default deffunc_bytea(),
+ id2 varchar,
+ def7 float default length(deffunc_str()) + 0.433);
+
+
+copy xccopydef (id1, id2) from stdin (delimiter '|');
+3 | \\\\x135
+\N| abcd
+\.
+
+copy xccopydef (id1, id2) from stdin (format 'csv');
+3 , \\\\x135
+, abcd
+\.
+
+
+insert into xccopydef (id1, id2) values (NULL, NULL);
+insert into xccopydef (id1) values (4567);
+
+select * from xccopydef order by idseq;
+
+copy xccopydef (id1, id2) to '@abs_builddir@/results/copydefout.data' (format 'binary');
+
+truncate xccopydef;
+
+copy xccopydef (id1, id2) from '@abs_builddir@/results/copydefout.data' (format 'binary');
+
+select * from xccopydef order by idseq;
+
+drop table xccopydef;
+drop function pgxc_nodetype();
+drop function deffunc();
+drop function deffunc_bytea();
+drop function deffunc_str();
+drop function deffunc_str_i();
+drop function deffunc_nullstring();
+
--
-- XC_COPY
--
--- COPY tests for a Postgres-XL cluster
-create or replace function pgxc_nodetype() returns varchar as
-$$
-declare
- pgxc_class_entries int;
-begin
- select into pgxc_class_entries count(*) from pgxc_class ;
- if pgxc_class_entries > 0 then
- return ' Node type: C';
- else
- return ' Node type: D';
- end if;
-end $$ language plpgsql;
-create function deffunc() returns bytea as
-$$
-begin
- return E'\\023\\000\\\\''!|''';
-end $$ language plpgsql;
-create or replace function deffunc_bytea() returns bytea as
-$$
-begin
- return E'\0123';
-end $$ language plpgsql;
-create or replace function deffunc_str() returns varchar as
-$$
-begin
- return E'\\.\\000"\\''!|''\\N' || pgxc_nodetype();
-end $$ language plpgsql;
-create or replace function deffunc_str_i() returns varchar immutable as
-$$
-begin
- return E'\\.\\000"\\''!|''' || pgxc_nodetype();
-end $$ language plpgsql;
-create or replace function deffunc_nullstring() returns varchar as
-$$
-begin
- return E'\\N';
-end $$ language plpgsql;
-create table xccopydef(idseq serial, id1 int,
- def1 bytea default deffunc(),
- def2 bytea default E'\\000'::bytea,
- def3 varchar default deffunc_str(),
- def4 varchar default deffunc_str_i(),
- def5 varchar default deffunc_nullstring(),
- def6 bytea default deffunc_bytea(),
- id2 varchar,
- def7 float default length(deffunc_str()) + 0.433);
-copy xccopydef (id1, id2) from stdin (delimiter '|');
-copy xccopydef (id1, id2) from stdin (format 'csv');
-insert into xccopydef (id1, id2) values (NULL, NULL);
-insert into xccopydef (id1) values (4567);
-select * from xccopydef order by idseq;
- idseq | id1 | def1 | def2 | def3 | def4 | def5 | def6 | id2 | def7
--------+------+------------------+------+-----------------------------+---------------------------+------+--------+-----------+--------
- 1 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\x135 | 27.433
- 2 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
- 3 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\\\x135 | 27.433
- 4 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
- 5 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: C | \N | \x0a33 | | 27.433
- 6 | 4567 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: C | \N | \x0a33 | | 27.433
-(6 rows)
-
-copy xccopydef (id1, id2) to '@abs_builddir@/results/copydefout.data' (format 'binary');
-truncate xccopydef;
-copy xccopydef (id1, id2) from '@abs_builddir@/results/copydefout.data' (format 'binary');
-select * from xccopydef order by idseq;
- idseq | id1 | def1 | def2 | def3 | def4 | def5 | def6 | id2 | def7
--------+------+------------------+------+-----------------------------+---------------------------+------+--------+-----------+--------
- 7 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\x135 | 27.433
- 8 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
- 9 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\\\x135 | 27.433
- 10 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
- 11 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | | 27.433
- 12 | 4567 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | | 27.433
-(6 rows)
-
-drop table xccopydef;
-drop function pgxc_nodetype();
-drop function deffunc();
-drop function deffunc_bytea();
-drop function deffunc_str();
-drop function deffunc_str_i();
-drop function deffunc_nullstring();
-- Tests related to COPY for a Postgres-XL cluster
-- Create a table not using the first node of cluster
SELECT create_table_nodes('xc_copy_1(a int, b int)', '{2}'::int[], 'replication', NULL);
--- /dev/null
+--
+-- XC_COPY
+--
+-- COPY tests for a Postgres-XL cluster
+create or replace function pgxc_nodetype() returns varchar as
+$$
+declare
+ pgxc_class_entries int;
+begin
+ select into pgxc_class_entries count(*) from pgxc_class ;
+ if pgxc_class_entries > 0 then
+ return ' Node type: C';
+ else
+ return ' Node type: D';
+ end if;
+end $$ language plpgsql;
+create function deffunc() returns bytea as
+$$
+begin
+ return E'\\023\\000\\\\''!|''';
+end $$ language plpgsql;
+create or replace function deffunc_bytea() returns bytea as
+$$
+begin
+ return E'\0123';
+end $$ language plpgsql;
+create or replace function deffunc_str() returns varchar as
+$$
+begin
+ return E'\\.\\000"\\''!|''\\N' || pgxc_nodetype();
+end $$ language plpgsql;
+create or replace function deffunc_str_i() returns varchar immutable as
+$$
+begin
+ return E'\\.\\000"\\''!|''' || pgxc_nodetype();
+end $$ language plpgsql;
+create or replace function deffunc_nullstring() returns varchar as
+$$
+begin
+ return E'\\N';
+end $$ language plpgsql;
+create table xccopydef(idseq serial, id1 int,
+ def1 bytea default deffunc(),
+ def2 bytea default E'\\000'::bytea,
+ def3 varchar default deffunc_str(),
+ def4 varchar default deffunc_str_i(),
+ def5 varchar default deffunc_nullstring(),
+ def6 bytea default deffunc_bytea(),
+ id2 varchar,
+ def7 float default length(deffunc_str()) + 0.433);
+copy xccopydef (id1, id2) from stdin (delimiter '|');
+copy xccopydef (id1, id2) from stdin (format 'csv');
+insert into xccopydef (id1, id2) values (NULL, NULL);
+insert into xccopydef (id1) values (4567);
+select * from xccopydef order by idseq;
+ idseq | id1 | def1 | def2 | def3 | def4 | def5 | def6 | id2 | def7
+-------+------+------------------+------+-----------------------------+---------------------------+------+--------+-----------+--------
+ 1 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\x135 | 27.433
+ 2 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
+ 3 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\\\x135 | 27.433
+ 4 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
+ 5 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: C | \N | \x0a33 | | 27.433
+ 6 | 4567 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: C | \N | \x0a33 | | 27.433
+(6 rows)
+
+copy xccopydef (id1, id2) to '@abs_builddir@/results/copydefout.data' (format 'binary');
+truncate xccopydef;
+copy xccopydef (id1, id2) from '@abs_builddir@/results/copydefout.data' (format 'binary');
+select * from xccopydef order by idseq;
+ idseq | id1 | def1 | def2 | def3 | def4 | def5 | def6 | id2 | def7
+-------+------+------------------+------+-----------------------------+---------------------------+------+--------+-----------+--------
+ 7 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\x135 | 27.433
+ 8 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
+ 9 | 3 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | \\\\x135 | 27.433
+ 10 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | abcd | 27.433
+ 11 | | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | | 27.433
+ 12 | 4567 | \x13005c27217c27 | \x00 | \.\000"\'!|'\N Node type: C | \.\000"\'!|' Node type: D | \N | \x0a33 | | 27.433
+(6 rows)
+
+drop table xccopydef;
+drop function pgxc_nodetype();
+drop function deffunc();
+drop function deffunc_bytea();
+drop function deffunc_str();
+drop function deffunc_str_i();
+drop function deffunc_nullstring();
test: xl_primary_key xl_foreign_key xl_distribution_column_types xl_alter_table xl_distribution_column_types_modulo xl_plan_pushdown xl_functions xl_limitations xl_user_defined_functions xl_join
#known bugs
+test: xl_bugs
test: xl_known_bugs
-- should not get FQSed because of SORT clause
select * from tab1_hash order by val;
explain (verbose on, nodes off, costs off) select * from tab1_hash order by val;
--- should not get FQSed because of DISTINCT clause
+-- should get FQSed because DISTINCT clause contains distkey
select distinct val, val2 from tab1_hash where val2 = 8;
explain (verbose on, nodes off, costs off) select distinct val, val2 from tab1_hash where val2 = 8;
--- should not get FQSed because of GROUP clause
+-- should get FQSed because GROUP BY clause uses distkey
select val, val2 from tab1_hash where val2 = 8 group by val, val2;
explain (verbose on, nodes off, costs off) select val, val2 from tab1_hash where val2 = 8 group by val, val2;
-- should not get FQSed because of HAVING clause
-- should not get FQSed because of SORT clause
select * from tab1_modulo order by val;
explain (verbose on, nodes off, costs off) select * from tab1_modulo order by val;
--- should not get FQSed because of DISTINCT clause
+-- should get FQSed because DISTINCT clause contains distkey
select distinct val, val2 from tab1_modulo where val2 = 8;
explain (verbose on, nodes off, costs off) select distinct val, val2 from tab1_modulo where val2 = 8;
--- should not get FQSed because of GROUP clause
+-- should get FQSed because GROUP BY clause uses distkey
select val, val2 from tab1_modulo where val2 = 8 group by val, val2;
explain (verbose on, nodes off, costs off) select val, val2 from tab1_modulo where val2 = 8 group by val, val2;
-- should not get FQSed because of HAVING clause