Registering pre-existing tables int4_tbl INT4_TBL tenk1 text_tbl VARCHAR_TBL float8_tbl CHAR_TBL TEXT_TBL FLOAT8_TBL varchar_tbl int8_tbl -- -- UNION (also INTERSECT, EXCEPT) -- -- Simple UNION constructs SELECT 1 AS two UNION SELECT 2 ORDER BY 1; SELECT 1 AS one UNION SELECT 1 ORDER BY 1; SELECT 1 AS two UNION ALL SELECT 2; SELECT 1 AS two UNION ALL SELECT 1; SELECT 1 AS three UNION SELECT 2 UNION SELECT 3 ORDER BY 1; SELECT 1 AS two UNION SELECT 2 UNION SELECT 2 ORDER BY 1; SELECT 1 AS three UNION SELECT 2 UNION ALL SELECT 2 ORDER BY 1; SELECT 1.1 AS two UNION SELECT 2.2 ORDER BY 1; -- Mixed types SELECT 1.1 AS two UNION SELECT 2 ORDER BY 1; SELECT 1 AS two UNION SELECT 2.2 ORDER BY 1; SELECT 1 AS one UNION SELECT 1.0::float8 ORDER BY 1; SELECT 1.1 AS two UNION ALL SELECT 2 ORDER BY 1; SELECT 1.0::float8 AS two UNION ALL SELECT 1 ORDER BY 1; SELECT 1.1 AS three UNION SELECT 2 UNION SELECT 3 ORDER BY 1; SELECT 1.1::float8 AS two UNION SELECT 2 UNION SELECT 2.0::float8 ORDER BY 1; SELECT 1.1 AS three UNION SELECT 2 UNION ALL SELECT 2 ORDER BY 1; SELECT 1.1 AS two UNION (SELECT 2 UNION ALL SELECT 2) ORDER BY 1; -- -- Try testing from tables... -- SELECT f1 AS five FROM FLOAT8_TBL UNION SELECT f1 FROM FLOAT8_TBL ORDER BY 1; SELECT f1 AS ten FROM FLOAT8_TBL UNION ALL SELECT f1 FROM FLOAT8_TBL; SELECT f1 AS nine FROM FLOAT8_TBL UNION SELECT f1 FROM INT4_TBL ORDER BY 1; SELECT f1 AS ten FROM FLOAT8_TBL UNION ALL SELECT f1 FROM INT4_TBL; SELECT f1 AS five FROM FLOAT8_TBL WHERE f1 BETWEEN -1e6 AND 1e6 UNION SELECT f1 FROM INT4_TBL WHERE f1 BETWEEN 0 AND 1000000 ORDER BY 1; -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect SELECT f1 AS five FROM FLOAT8_TBL ^ -stdin-:
: Error: At function: PgSetItem -stdin-:
:1:1: Error: At function: PgWhere SELECT f1 AS five FROM FLOAT8_TBL ^ -stdin-:
:2:12: Error: At function: PgBetween WHERE f1 BETWEEN -1e6 AND 1e6 ^ -stdin-:
:2:12: Error: Mismatch of type of between elements: float8 and numeric WHERE f1 BETWEEN -1e6 AND 1e6 ^ SELECT CAST(f1 AS char(4)) AS three FROM VARCHAR_TBL UNION SELECT f1 FROM CHAR_TBL ORDER BY 1; SELECT f1 AS three FROM VARCHAR_TBL UNION SELECT CAST(f1 AS varchar) FROM CHAR_TBL ORDER BY 1; SELECT f1 AS eight FROM VARCHAR_TBL UNION ALL SELECT f1 FROM CHAR_TBL; SELECT f1 AS five FROM TEXT_TBL UNION SELECT f1 FROM VARCHAR_TBL UNION SELECT TRIM(TRAILING FROM f1) FROM CHAR_TBL ORDER BY 1; -- -- INTERSECT and EXCEPT -- SELECT q2 FROM int8_tbl INTERSECT SELECT q1 FROM int8_tbl ORDER BY 1; SELECT q2 FROM int8_tbl INTERSECT ALL SELECT q1 FROM int8_tbl ORDER BY 1; SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1; SELECT q2 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl ORDER BY 1; SELECT q2 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q1 FROM int8_tbl ORDER BY 1; SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY 1; SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q2 FROM int8_tbl ORDER BY 1; SELECT q1 FROM int8_tbl EXCEPT ALL SELECT DISTINCT q2 FROM int8_tbl ORDER BY 1; SELECT q1 FROM int8_tbl EXCEPT ALL SELECT q1 FROM int8_tbl FOR NO KEY UPDATE; -- nested cases (SELECT 1,2,3 UNION SELECT 4,5,6) INTERSECT SELECT 4,5,6; (SELECT 1,2,3 UNION SELECT 4,5,6 ORDER BY 1,2) INTERSECT SELECT 4,5,6; (SELECT 1,2,3 UNION SELECT 4,5,6) EXCEPT SELECT 4,5,6; (SELECT 1,2,3 UNION SELECT 4,5,6 ORDER BY 1,2) EXCEPT SELECT 4,5,6; -- exercise both hashed and sorted implementations of UNION/INTERSECT/EXCEPT set enable_hashagg to on; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg -- exercise both hashed and sorted implementations of UNION/INTERSECT/EXCEPT ^ explain (costs off) select count(*) from ( select unique1 from tenk1 union select fivethous from tenk1 ) ss; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select count(*) from ( select unique1 from tenk1 union select fivethous from tenk1 ) ss; explain (costs off) select count(*) from ( select unique1 from tenk1 intersect select fivethous from tenk1 ) ss; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select count(*) from ( select unique1 from tenk1 intersect select fivethous from tenk1 ) ss; explain (costs off) select unique1 from tenk1 except select unique2 from tenk1 where unique2 != 10; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select unique1 from tenk1 except select unique2 from tenk1 where unique2 != 10; set enable_hashagg to off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg set enable_hashagg to off; ^ explain (costs off) select count(*) from ( select unique1 from tenk1 union select fivethous from tenk1 ) ss; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select count(*) from ( select unique1 from tenk1 union select fivethous from tenk1 ) ss; explain (costs off) select count(*) from ( select unique1 from tenk1 intersect select fivethous from tenk1 ) ss; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select count(*) from ( select unique1 from tenk1 intersect select fivethous from tenk1 ) ss; explain (costs off) select unique1 from tenk1 except select unique2 from tenk1 where unique2 != 10; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select unique1 from tenk1 except select unique2 from tenk1 where unique2 != 10; reset enable_hashagg; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_hashagg; ^ -- non-hashable type set enable_hashagg to on; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg -- non-hashable type ^ explain (costs off) select x from (values (100::money), (200::money)) _(x) union select x from (values (100::money), (300::money)) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ set enable_hashagg to off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg set enable_hashagg to off; ^ explain (costs off) select x from (values (100::money), (200::money)) _(x) union select x from (values (100::money), (300::money)) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ reset enable_hashagg; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_hashagg; ^ -- arrays set enable_hashagg to on; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg -- arrays ^ explain (costs off) select x from (values (array[1, 2]), (array[1, 3])) _(x) union select x from (values (array[1, 2]), (array[1, 4])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (array[1, 2]), (array[1, 3])) _(x) union select x from (values (array[1, 2]), (array[1, 4])) _(x); explain (costs off) select x from (values (array[1, 2]), (array[1, 3])) _(x) intersect select x from (values (array[1, 2]), (array[1, 4])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (array[1, 2]), (array[1, 3])) _(x) intersect select x from (values (array[1, 2]), (array[1, 4])) _(x); explain (costs off) select x from (values (array[1, 2]), (array[1, 3])) _(x) except select x from (values (array[1, 2]), (array[1, 4])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (array[1, 2]), (array[1, 3])) _(x) except select x from (values (array[1, 2]), (array[1, 4])) _(x); -- non-hashable type explain (costs off) select x from (values (array[100::money]), (array[200::money])) _(x) union select x from (values (array[100::money]), (array[300::money])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 -- non-hashable type ^ select x from (values (array[100::money]), (array[200::money])) _(x) union select x from (values (array[100::money]), (array[300::money])) _(x); -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: AssumeColumnOrder, At function: AssumeColumnOrder, At function: OrderedMap, At function: OrderedFilter, At function: CountedAggregateAll select x from (values (array[100::money]), (array[200::money])) _(x) union select x from (values (array[100::money]), (array[300::money])) _(x); ^ -stdin-:
:1:1: Error: Expected hashable and equatable type for key column: x, but got: _pgmoney select x from (values (array[100::money]), (array[200::money])) _(x) union select x from (values (array[100::money]), (array[300::money])) _(x); ^ set enable_hashagg to off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg set enable_hashagg to off; ^ explain (costs off) select x from (values (array[1, 2]), (array[1, 3])) _(x) union select x from (values (array[1, 2]), (array[1, 4])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (array[1, 2]), (array[1, 3])) _(x) union select x from (values (array[1, 2]), (array[1, 4])) _(x); explain (costs off) select x from (values (array[1, 2]), (array[1, 3])) _(x) intersect select x from (values (array[1, 2]), (array[1, 4])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (array[1, 2]), (array[1, 3])) _(x) intersect select x from (values (array[1, 2]), (array[1, 4])) _(x); explain (costs off) select x from (values (array[1, 2]), (array[1, 3])) _(x) except select x from (values (array[1, 2]), (array[1, 4])) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (array[1, 2]), (array[1, 3])) _(x) except select x from (values (array[1, 2]), (array[1, 4])) _(x); reset enable_hashagg; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_hashagg; ^ -- records set enable_hashagg to on; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg -- records ^ explain (costs off) select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ explain (costs off) select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ explain (costs off) select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -- non-hashable type -- With an anonymous row type, the typcache does not report that the -- type is hashable. (Otherwise, this would fail at execution time.) explain (costs off) select x from (values (row(100::money)), (row(200::money))) _(x) union select x from (values (row(100::money)), (row(300::money))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 -- non-hashable type ^ select x from (values (row(100::money)), (row(200::money))) _(x) union select x from (values (row(100::money)), (row(300::money))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(100::money)), (row(200::money))) _(x) union select x from (values (row(100::money)), (row(300::money))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(100::money)), (row(200::money))) _(x) union select x from (values (row(100::money)), (row(300::money))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(100::money)), (row(200::money))) _(x) union select x from (values (row(100::money)), (row(300::money))) _(x); ^ -- With a defined row type, the typcache can inspect the type's fields -- for hashability. create type ct1 as (f1 money); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 314 -- With a defined row type, the typcache can inspect the type's fields ^ explain (costs off) select x from (values (row(100::money)::ct1), (row(200::money)::ct1)) _(x) union select x from (values (row(100::money)::ct1), (row(300::money)::ct1)) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(100::money)::ct1), (row(200::money)::ct1)) _(x) union select x from (values (row(100::money)::ct1), (row(300::money)::ct1)) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:41: Error: alternative is not implemented yet : 138 select x from (values (row(100::money)::ct1), (row(200::money)::ct1)) _(x) union select x from (values (row(100::money)::ct1), (row(300::money)::ct1)) _(x); ^ -stdin-:
:1:122: Error: alternative is not implemented yet : 138 select x from (values (row(100::money)::ct1), (row(200::money)::ct1)) _(x) union select x from (values (row(100::money)::ct1), (row(300::money)::ct1)) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(100::money)::ct1), (row(200::money)::ct1)) _(x) union select x from (values (row(100::money)::ct1), (row(300::money)::ct1)) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(100::money)::ct1), (row(200::money)::ct1)) _(x) union select x from (values (row(100::money)::ct1), (row(300::money)::ct1)) _(x); ^ drop type ct1; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: DropStmt: alternative is not implemented yet : 373 drop type ct1; ^ set enable_hashagg to off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg set enable_hashagg to off; ^ explain (costs off) select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(1, 2)), (row(1, 3))) _(x) union select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ explain (costs off) select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(1, 2)), (row(1, 3))) _(x) intersect select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ explain (costs off) select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 138 select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term select x from (values (row(1, 2)), (row(1, 3))) _(x) except select x from (values (row(1, 2)), (row(1, 4))) _(x); ^ reset enable_hashagg; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_hashagg; ^ -- -- Mixed types -- SELECT f1 FROM float8_tbl INTERSECT SELECT f1 FROM int4_tbl ORDER BY 1; SELECT f1 FROM float8_tbl EXCEPT SELECT f1 FROM int4_tbl ORDER BY 1; -- -- Operator precedence and (((((extra))))) parentheses -- SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl ORDER BY 1; SELECT q1 FROM int8_tbl INTERSECT (((SELECT q2 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) ORDER BY 1; (((SELECT q1 FROM int8_tbl INTERSECT SELECT q2 FROM int8_tbl ORDER BY 1))) UNION ALL SELECT q2 FROM int8_tbl; SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1; SELECT q1 FROM int8_tbl UNION ALL (((SELECT q2 FROM int8_tbl EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1))); (((SELECT q1 FROM int8_tbl UNION ALL SELECT q2 FROM int8_tbl))) EXCEPT SELECT q1 FROM int8_tbl ORDER BY 1; -- -- Subqueries with ORDER BY & LIMIT clauses -- -- In this syntax, ORDER BY/LIMIT apply to the result of the EXCEPT SELECT q1,q2 FROM int8_tbl EXCEPT SELECT q2,q1 FROM int8_tbl ORDER BY q2,q1; -- This should fail, because q2 isn't a name of an EXCEPT output column SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1; -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect -- This should fail, because q2 isn't a name of an EXCEPT output column ^ -stdin-:
:2:65: Error: No such column: q2 SELECT q1 FROM int8_tbl EXCEPT SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1; ^ -- But this should work: SELECT q1 FROM int8_tbl EXCEPT (((SELECT q2 FROM int8_tbl ORDER BY q2 LIMIT 1))) ORDER BY 1; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: sortClause should be used only on top -- But this should work: ^ -- -- New syntaxes (7.1) permit new tests -- (((((select * from int8_tbl))))); -- -- Check behavior with empty select list (allowed since 9.4) -- select union select; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty -- ^ select intersect select; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select intersect select; ^ select except select; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select except select; ^ -- check hashed implementation set enable_hashagg = true; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg -- check hashed implementation ^ set enable_sort = false; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_sort set enable_sort = false; ^ explain (costs off) select from generate_series(1,5) union select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ explain (costs off) select from generate_series(1,5) intersect select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select from generate_series(1,5) union select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) union select from generate_series(1,3); ^ select from generate_series(1,5) union all select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) union all select from generate_series(1,3); ^ select from generate_series(1,5) intersect select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) intersect select from generate_series(1,3); ^ select from generate_series(1,5) intersect all select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) intersect all select from generate_series(1,3); ^ select from generate_series(1,5) except select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) except select from generate_series(1,3); ^ select from generate_series(1,5) except all select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) except all select from generate_series(1,3); ^ -- check sorted implementation set enable_hashagg = false; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_hashagg -- check sorted implementation ^ set enable_sort = true; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_sort set enable_sort = true; ^ explain (costs off) select from generate_series(1,5) union select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ explain (costs off) select from generate_series(1,5) intersect select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select from generate_series(1,5) union select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) union select from generate_series(1,3); ^ select from generate_series(1,5) union all select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) union all select from generate_series(1,3); ^ select from generate_series(1,5) intersect select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) intersect select from generate_series(1,3); ^ select from generate_series(1,5) intersect all select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) intersect all select from generate_series(1,3); ^ select from generate_series(1,5) except select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) except select from generate_series(1,3); ^ select from generate_series(1,5) except all select from generate_series(1,3); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: SelectStmt: both values_list and target_list are not allowed to be empty select from generate_series(1,5) except all select from generate_series(1,3); ^ reset enable_hashagg; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_hashagg; ^ reset enable_sort; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_sort; ^ -- -- Check handling of a case with unknown constants. We don't guarantee -- an undecorated constant will work in all cases, but historically this -- usage has worked, so test we don't break it. -- SELECT a.f1 FROM (SELECT 'test' AS f1 FROM varchar_tbl) a UNION SELECT b.f1 FROM (SELECT f1 FROM varchar_tbl) b ORDER BY 1; -- This should fail, but it should produce an error cursor SELECT '3.4'::numeric UNION SELECT 'foo'; -stdin-:
: Fatal: Execution -stdin-:
:1:1: Fatal: Execution of node: Result -- This should fail, but it should produce an error cursor ^ -stdin-:
:1:1: Fatal: ERROR: invalid input syntax for type numeric: "foo" -- This should fail, but it should produce an error cursor ^ -- -- Test that expression-index constraints can be pushed down through -- UNION or UNION ALL -- CREATE TEMP TABLE t1 (a text, b text); CREATE INDEX t1_ab_idx on t1 ((a || b)); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: index expression is not supported yet CREATE INDEX t1_ab_idx on t1 ((a || b)); ^ CREATE TEMP TABLE t2 (ab text primary key); INSERT INTO t1 VALUES ('a', 'b'), ('x', 'y'); INSERT INTO t2 VALUES ('ab'), ('xy'); set enable_seqscan = off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_seqscan set enable_seqscan = off; ^ set enable_indexscan = on; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_indexscan set enable_indexscan = on; ^ set enable_bitmapscan = off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_bitmapscan set enable_bitmapscan = off; ^ explain (costs off) SELECT * FROM (SELECT a || b AS ab FROM t1 UNION ALL SELECT * FROM t2) t WHERE ab = 'ab'; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ explain (costs off) SELECT * FROM (SELECT a || b AS ab FROM t1 UNION SELECT * FROM t2) t WHERE ab = 'ab'; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ -- -- Test that ORDER BY for UNION ALL can be pushed down to inheritance -- children. -- CREATE TEMP TABLE t1c (b text, a text); ALTER TABLE t1c INHERIT t1; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: alternative is not implemented yet : 245 ALTER TABLE t1c INHERIT t1; ^ CREATE TEMP TABLE t2c (primary key (ab)) INHERITS (t2); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: table inheritance not supported CREATE TEMP TABLE t2c (primary key (ab)) INHERITS (t2); ^ INSERT INTO t1c VALUES ('v', 'w'), ('c', 'd'), ('m', 'n'), ('e', 'f'); INSERT INTO t2c VALUES ('vw'), ('cd'), ('mn'), ('ef'); -stdin-:
: Fatal: Table metadata loading -stdin-:
: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.t2c CREATE INDEX t1c_ab_idx on t1c ((a || b)); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: index expression is not supported yet CREATE INDEX t1c_ab_idx on t1c ((a || b)); ^ set enable_seqscan = on; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_seqscan set enable_seqscan = on; ^ set enable_indexonlyscan = off; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported name: enable_indexonlyscan set enable_indexonlyscan = off; ^ explain (costs off) SELECT * FROM (SELECT a || b AS ab FROM t1 UNION ALL SELECT ab FROM t2) t ORDER BY 1 LIMIT 8; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ SELECT * FROM (SELECT a || b AS ab FROM t1 UNION ALL SELECT ab FROM t2) t ORDER BY 1 LIMIT 8; reset enable_seqscan; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_seqscan; ^ reset enable_indexscan; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_indexscan; ^ reset enable_bitmapscan; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_bitmapscan; ^ -- This simpler variant of the above test has been observed to fail differently create table events (event_id int primary key); create table other_events (event_id int primary key); create table events_child () inherits (events); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: table inheritance not supported create table events_child () inherits (events); ^ explain (costs off) select event_id from (select event_id from events union all select event_id from other_events) ss order by event_id; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ drop table events_child, events, other_events; reset enable_indexonlyscan; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: VariableSetStmt, not supported kind: 4 reset enable_indexonlyscan; ^ -- Test constraint exclusion of UNION ALL subqueries explain (costs off) SELECT * FROM (SELECT 1 AS t, * FROM tenk1 a UNION ALL SELECT 2 AS t, * FROM tenk1 b) c WHERE t = 2; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 -- Test constraint exclusion of UNION ALL subqueries ^ -- Test that we push quals into UNION sub-selects only when it's safe explain (costs off) SELECT * FROM (SELECT 1 AS t, 2 AS x UNION SELECT 2 AS t, 4 AS x) ss WHERE x < 4 ORDER BY x; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 -- Test that we push quals into UNION sub-selects only when it's safe ^ SELECT * FROM (SELECT 1 AS t, 2 AS x UNION SELECT 2 AS t, 4 AS x) ss WHERE x < 4 ORDER BY x; explain (costs off) SELECT * FROM (SELECT 1 AS t, generate_series(1,10) AS x UNION SELECT 2 AS t, 4 AS x) ss WHERE x < 4 ORDER BY x; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ SELECT * FROM (SELECT 1 AS t, generate_series(1,10) AS x UNION SELECT 2 AS t, 4 AS x) ss WHERE x < 4 ORDER BY x; -stdin-:
: Error: Parse Sql -stdin-:
:2:19: Error: Generator functions are not allowed in: SELECT (SELECT 1 AS t, generate_series(1,10) AS x ^ -stdin-:
: Error: Type annotation -stdin-:
:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect SELECT * FROM ^ -stdin-:
:1:1: Error: Recursive query does not have the form non-recursive-term UNION [ALL] recursive-term SELECT * FROM ^ explain (costs off) SELECT * FROM (SELECT 1 AS t, (random()*3)::int AS x UNION SELECT 2 AS t, 4 AS x) ss WHERE x > 3 ORDER BY x; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ SELECT * FROM (SELECT 1 AS t, (random()*3)::int AS x UNION SELECT 2 AS t, 4 AS x) ss WHERE x > 3 ORDER BY x; -- Test cases where the native ordering of a sub-select has more pathkeys -- than the outer query cares about explain (costs off) select distinct q1 from (select distinct * from int8_tbl i81 union all select distinct * from int8_tbl i82) ss where q2 = q2; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 -- Test cases where the native ordering of a sub-select has more pathkeys ^ select distinct q1 from (select distinct * from int8_tbl i81 union all select distinct * from int8_tbl i82) ss where q2 = q2; explain (costs off) select distinct q1 from (select distinct * from int8_tbl i81 union all select distinct * from int8_tbl i82) ss where -q1 = q2; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select distinct q1 from (select distinct * from int8_tbl i81 union all select distinct * from int8_tbl i82) ss where -q1 = q2; -- Test proper handling of parameterized appendrel paths when the -- potential join qual is expensive create function expensivefunc(int) returns int language plpgsql immutable strict cost 10000 as $$begin return $1; end$$; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 261 -- Test proper handling of parameterized appendrel paths when the ^ create temp table t3 as select generate_series(-1000,1000) as x; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 277 create temp table t3 as select generate_series(-1000,1000) as x; ^ create index t3i on t3 (expensivefunc(x)); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: index expression is not supported yet create index t3i on t3 (expensivefunc(x)); ^ analyze t3; -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 275 analyze t3; ^ explain (costs off) select * from (select * from t3 a union all select * from t3 b) ss join int4_tbl on f1 = expensivefunc(x); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 explain (costs off) ^ select * from (select * from t3 a union all select * from t3 b) ss join int4_tbl on f1 = expensivefunc(x); -stdin-:
: Fatal: Table metadata loading -stdin-:
: Fatal: ydb/library/yql/providers/yt/gateway/file/yql_yt_file_services.cpp:44: Table not found: plato.t3 drop table t3; drop function expensivefunc(int); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: DropStmt: alternative is not implemented yet : 386 drop function expensivefunc(int); ^ -- Test handling of appendrel quals that const-simplify into an AND explain (costs off) select * from (select *, 0 as x from int8_tbl a union all select *, 1 as x from int8_tbl b) ss where (x = 0) or (q1 >= q2 and q1 <= q2); -stdin-:
: Error: Parse Sql -stdin-:
:1:1: Error: RawStmt: alternative is not implemented yet : 276 -- Test handling of appendrel quals that const-simplify into an AND ^ select * from (select *, 0 as x from int8_tbl a union all select *, 1 as x from int8_tbl b) ss where (x = 0) or (q1 >= q2 and q1 <= q2);