diff options
author | Alexander Smirnov <alex@ydb.tech> | 2024-11-20 11:14:58 +0000 |
---|---|---|
committer | Alexander Smirnov <alex@ydb.tech> | 2024-11-20 11:14:58 +0000 |
commit | 31773f157bf8164364649b5f470f52dece0a4317 (patch) | |
tree | 33d0f7eef45303ab68cf08ab381ce5e5e36c5240 /yql/essentials/tests/postgresql/cases/expressions.err | |
parent | 2c7938962d8689e175574fc1e817c05049f27905 (diff) | |
parent | eff600952d5dfe17942f38f510a8ac2b203bb3a5 (diff) | |
download | ydb-31773f157bf8164364649b5f470f52dece0a4317.tar.gz |
Merge branch 'rightlib' into mergelibs-241120-1113
Diffstat (limited to 'yql/essentials/tests/postgresql/cases/expressions.err')
-rw-r--r-- | yql/essentials/tests/postgresql/cases/expressions.err | 591 |
1 files changed, 591 insertions, 0 deletions
diff --git a/yql/essentials/tests/postgresql/cases/expressions.err b/yql/essentials/tests/postgresql/cases/expressions.err new file mode 100644 index 0000000000..c5ca77c1ab --- /dev/null +++ b/yql/essentials/tests/postgresql/cases/expressions.err @@ -0,0 +1,591 @@ +Registering pre-existing tables + date_tbl +<sql-statement> +-- +-- expression evaluation tests that don't fit into a more specific file +-- +-- +-- Tests for SQLVAlueFunction +-- +-- current_date (always matches because of transactional behaviour) +SELECT date(now())::text = current_date::text; +</sql-statement> +<sql-statement> +-- current_time / localtime +SELECT now()::timetz::text = current_time::text; +</sql-statement> +<sql-statement> +SELECT now()::timetz(4)::text = current_time(4)::text; +</sql-statement> +<sql-statement> +SELECT now()::time::text = localtime::text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:28: Error: Usupported SQLValueFunction: 5 + SELECT now()::time::text = localtime::text; + ^ +<sql-statement> +SELECT now()::time(3)::text = localtime(3)::text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:31: Error: Usupported SQLValueFunction: 6 + SELECT now()::time(3)::text = localtime(3)::text; + ^ +<sql-statement> +-- current_timestamp / localtimestamp (always matches because of transactional behaviour) +SELECT current_timestamp = NOW(); +</sql-statement> +<sql-statement> +-- precision +SELECT length(current_timestamp::text) >= length(current_timestamp(0)::text); +</sql-statement> +<sql-statement> +-- localtimestamp +SELECT now()::timestamp::text = localtimestamp::text; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:33: Error: Usupported SQLValueFunction: 7 + SELECT now()::timestamp::text = localtimestamp::text; + ^ +<sql-statement> +-- current_role/user/user is tested in rolnames.sql +-- current database / catalog +SELECT current_catalog = current_database(); +</sql-statement> +<sql-statement> +-- current_schema +SELECT current_schema; +</sql-statement> +<sql-statement> +SET search_path = 'notme'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, search path supports only 'information_schema', 'public', 'pg_catalog', '' but got: 'notme' + SET search_path = 'notme'; + ^ +<sql-statement> +SELECT current_schema; +</sql-statement> +<sql-statement> +SET search_path = 'pg_catalog'; +</sql-statement> +<sql-statement> +SELECT current_schema; +</sql-statement> +<sql-statement> +RESET search_path; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: VariableSetStmt, not supported kind: 4 + RESET search_path; + ^ +<sql-statement> +-- +-- Tests for BETWEEN +-- +explain (costs off) +select count(*) from date_tbl + where f1 between '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +select count(*) from date_tbl + where f1 between '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: At function: PgReadTable! + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: Unsupported table: date_tbl + select count(*) from date_tbl + ^ +<sql-statement> +explain (costs off) +select count(*) from date_tbl + where f1 not between '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +select count(*) from date_tbl + where f1 not between '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: At function: PgReadTable! + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: Unsupported table: date_tbl + select count(*) from date_tbl + ^ +<sql-statement> +explain (costs off) +select count(*) from date_tbl + where f1 between symmetric '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +select count(*) from date_tbl + where f1 between symmetric '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: At function: PgReadTable! + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: Unsupported table: date_tbl + select count(*) from date_tbl + ^ +<sql-statement> +explain (costs off) +select count(*) from date_tbl + where f1 not between symmetric '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (costs off) + ^ +<sql-statement> +select count(*) from date_tbl + where f1 not between symmetric '1997-01-01' and '1998-01-01'; +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: At function: PgReadTable! + select count(*) from date_tbl + ^ + -stdin-:<main>:1:22: Error: Unsupported table: date_tbl + select count(*) from date_tbl + ^ +<sql-statement> +-- +-- Test parsing of a no-op cast to a type with unspecified typmod +-- +begin; +</sql-statement> +<sql-statement> +create table numeric_tbl (f1 numeric(18,3), f2 numeric); +</sql-statement> +<sql-statement> +create view numeric_view as + select + f1, f1::numeric(16,4) as f1164, f1::numeric as f1n, + f2, f2::numeric(16,4) as f2164, f2::numeric as f2n + from numeric_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create view numeric_view as + ^ +<sql-statement> +\d+ numeric_view +</sql-statement> +Metacommand \d+ numeric_view is not supported +<sql-statement> +explain (verbose, costs off) select * from numeric_view; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (verbose, costs off) select * from numeric_view; + ^ +<sql-statement> +-- bpchar, lacking planner support for its length coercion function, +-- could behave differently +create table bpchar_tbl (f1 character(16) unique, f2 bpchar); +</sql-statement> +<sql-statement> +create view bpchar_view as + select + f1, f1::character(14) as f114, f1::bpchar as f1n, + f2, f2::character(14) as f214, f2::bpchar as f2n + from bpchar_tbl; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: expected at least one target column + create view bpchar_view as + ^ +<sql-statement> +\d+ bpchar_view +</sql-statement> +Metacommand \d+ bpchar_view is not supported +<sql-statement> +explain (verbose, costs off) select * from bpchar_view + where f1::bpchar = 'foo'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (verbose, costs off) select * from bpchar_view + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- +-- Ordinarily, IN/NOT IN can be converted to a ScalarArrayOpExpr +-- with a suitably-chosen array type. +-- +explain (verbose, costs off) +select random() IN (1, 4, 8.0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + -- + ^ +<sql-statement> +explain (verbose, costs off) +select random()::int IN (1, 4, 8.0); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 276 + explain (verbose, costs off) + ^ +<sql-statement> +-- However, if there's not a common supertype for the IN elements, +-- we should instead try to produce "x = v1 OR x = v2 OR ...". +-- In most cases that'll fail for lack of all the requisite = operators, +-- but it can succeed sometimes. So this should complain about lack of +-- an = operator, not about cast failure. +select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0)); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + -- However, if there's not a common supertype for the IN elements, + ^ + -stdin-:<main>:6:23: Error: At function: PgIn + select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0)); + ^ + -stdin-:<main>:6:40: Error: Cannot infer common type for types 600 and 603 + select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0)); + ^ +<sql-statement> +-- +-- Tests for ScalarArrayOpExpr with a hashfn +-- +-- create a stable function so that the tests below are not +-- evaluated using the planner's constant folding. +begin; +</sql-statement> +<sql-statement> +create function return_int_input(int) returns int as $$ +begin + return $1; +end; +$$ language plpgsql stable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function return_int_input(int) returns int as $$ + ^ +<sql-statement> +create function return_text_input(text) returns text as $$ +begin + return $1; +end; +$$ language plpgsql stable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function return_text_input(text) returns text as $$ + ^ +<sql-statement> +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ + -stdin-:<main>:1:28: Error: At function: PgIn + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_int_input + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ +<sql-statement> +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ + -stdin-:<main>:1:28: Error: At function: PgIn + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_int_input + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ +<sql-statement> +select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); + ^ + -stdin-:<main>:1:28: Error: At function: PgIn + select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_int_input + select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null); + ^ +<sql-statement> +select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); + ^ + -stdin-:<main>:1:28: Error: At function: PgIn + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_int_input + select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null); + ^ +<sql-statement> +select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ + -stdin-:<main>:1:36: Error: At function: PgIn + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_int_input + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1); + ^ +<sql-statement> +select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ + -stdin-:<main>:1:36: Error: At function: PgIn + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_int_input + select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null); + ^ +<sql-statement> +select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); +</sql-statement> +-stdin-:<main>: Error: Type annotation + + -stdin-:<main>:1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem, At function: PgResultItem + select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + ^ + -stdin-:<main>:1:31: Error: At function: PgIn + select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + ^ + -stdin-:<main>:1:8: Error: At function: PgCall + select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + ^ + -stdin-:<main>:1:8: Error: No such proc: return_text_input + select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'); + ^ +<sql-statement> +rollback; +</sql-statement> +<sql-statement> +-- Test with non-strict equality function. +-- We need to create our own type for this. +begin; +</sql-statement> +<sql-statement> +create type myint; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create type myint; + ^ +<sql-statement> +create function myintin(cstring) returns myint strict immutable language + internal as 'int4in'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function myintin(cstring) returns myint strict immutable language + ^ +<sql-statement> +create function myintout(myint) returns cstring strict immutable language + internal as 'int4out'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function myintout(myint) returns cstring strict immutable language + ^ +<sql-statement> +create function myinthash(myint) returns integer strict immutable language + internal as 'hashint4'; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function myinthash(myint) returns integer strict immutable language + ^ +<sql-statement> +create type myint (input = myintin, output = myintout, like = int4); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create type myint (input = myintin, output = myintout, like = int4); + ^ +<sql-statement> +create cast (int4 as myint) without function; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297 + create cast (int4 as myint) without function; + ^ +<sql-statement> +create cast (myint as int4) without function; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 297 + create cast (myint as int4) without function; + ^ +<sql-statement> +create function myinteq(myint, myint) returns bool as $$ +begin + if $1 is null and $2 is null then + return true; + else + return $1::int = $2::int; + end if; +end; +$$ language plpgsql immutable; +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 261 + create function myinteq(myint, myint) returns bool as $$ + ^ +<sql-statement> +create operator = ( + leftarg = myint, + rightarg = myint, + commutator = =, + negator = <>, + procedure = myinteq, + restrict = eqsel, + join = eqjoinsel, + merges +); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 255 + create operator = ( + ^ +<sql-statement> +create operator class myint_ops +default for type myint using hash as + operator 1 = (myint, myint), + function 1 myinthash(myint); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:1: Error: RawStmt: alternative is not implemented yet : 298 + create operator class myint_ops + ^ +<sql-statement> +create table inttest (a myint); +</sql-statement> +<sql-statement> +insert into inttest values(1::myint),(null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:1:31: Error: Unknown type: myint + insert into inttest values(1::myint),(null); + ^ +<sql-statement> +-- try an array with enough elements to cause hashing +select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:2:38: Error: Unknown type: myint + select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint,6::myint,7::myint,8::myint,9::myint, null); + ^ +<sql-statement> +-- ensure the result matched with the non-hashed version. We simply remove +-- some array elements so that we don't reach the hashing threshold. +select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); +</sql-statement> +-stdin-:<main>: Error: Parse Sql + + -stdin-:<main>:3:38: Error: Unknown type: myint + select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null); + ^ +<sql-statement> +rollback; +</sql-statement> |