123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591 |
- 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>
|