Registering pre-existing tables
date_tbl
--
-- 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;
-- current_time / localtime
SELECT now()::timetz::text = current_time::text;
SELECT now()::timetz(4)::text = current_time(4)::text;
SELECT now()::time::text = localtime::text;
-stdin-:: Error: Parse Sql
-stdin-::1:28: Error: Usupported SQLValueFunction: 5
SELECT now()::time::text = localtime::text;
^
SELECT now()::time(3)::text = localtime(3)::text;
-stdin-:: Error: Parse Sql
-stdin-::1:31: Error: Usupported SQLValueFunction: 6
SELECT now()::time(3)::text = localtime(3)::text;
^
-- current_timestamp / localtimestamp (always matches because of transactional behaviour)
SELECT current_timestamp = NOW();
-- precision
SELECT length(current_timestamp::text) >= length(current_timestamp(0)::text);
-- localtimestamp
SELECT now()::timestamp::text = localtimestamp::text;
-stdin-:: Error: Parse Sql
-stdin-::2:33: Error: Usupported SQLValueFunction: 7
SELECT now()::timestamp::text = localtimestamp::text;
^
-- current_role/user/user is tested in rolnames.sql
-- current database / catalog
SELECT current_catalog = current_database();
-- current_schema
SELECT current_schema;
SET search_path = 'notme';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: VariableSetStmt, search path supports only 'information_schema', 'public', 'pg_catalog', '' but got: 'notme'
SET search_path = 'notme';
^
SELECT current_schema;
SET search_path = 'pg_catalog';
SELECT current_schema;
RESET search_path;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: VariableSetStmt, not supported kind: 4
RESET search_path;
^
--
-- Tests for BETWEEN
--
explain (costs off)
select count(*) from date_tbl
where f1 between '1997-01-01' and '1998-01-01';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
--
^
select count(*) from date_tbl
where f1 between '1997-01-01' and '1998-01-01';
-stdin-:: Error: Type annotation
-stdin-::1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
select count(*) from date_tbl
^
-stdin-::1:22: Error: At function: PgReadTable!
select count(*) from date_tbl
^
-stdin-::1:22: Error: Unsupported table: date_tbl
select count(*) from date_tbl
^
explain (costs off)
select count(*) from date_tbl
where f1 not between '1997-01-01' and '1998-01-01';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
explain (costs off)
^
select count(*) from date_tbl
where f1 not between '1997-01-01' and '1998-01-01';
-stdin-:: Error: Type annotation
-stdin-::1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
select count(*) from date_tbl
^
-stdin-::1:22: Error: At function: PgReadTable!
select count(*) from date_tbl
^
-stdin-::1:22: Error: Unsupported table: date_tbl
select count(*) from date_tbl
^
explain (costs off)
select count(*) from date_tbl
where f1 between symmetric '1997-01-01' and '1998-01-01';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
explain (costs off)
^
select count(*) from date_tbl
where f1 between symmetric '1997-01-01' and '1998-01-01';
-stdin-:: Error: Type annotation
-stdin-::1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
select count(*) from date_tbl
^
-stdin-::1:22: Error: At function: PgReadTable!
select count(*) from date_tbl
^
-stdin-::1:22: Error: Unsupported table: date_tbl
select count(*) from date_tbl
^
explain (costs off)
select count(*) from date_tbl
where f1 not between symmetric '1997-01-01' and '1998-01-01';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
explain (costs off)
^
select count(*) from date_tbl
where f1 not between symmetric '1997-01-01' and '1998-01-01';
-stdin-:: Error: Type annotation
-stdin-::1:1: Error: At function: RemovePrefixMembers, At function: PgSelect, At function: PgSetItem
select count(*) from date_tbl
^
-stdin-::1:22: Error: At function: PgReadTable!
select count(*) from date_tbl
^
-stdin-::1:22: Error: Unsupported table: date_tbl
select count(*) from date_tbl
^
--
-- Test parsing of a no-op cast to a type with unspecified typmod
--
begin;
create table numeric_tbl (f1 numeric(18,3), f2 numeric);
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;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: expected at least one target column
create view numeric_view as
^
\d+ numeric_view
Metacommand \d+ numeric_view is not supported
explain (verbose, costs off) select * from numeric_view;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
explain (verbose, costs off) select * from numeric_view;
^
-- bpchar, lacking planner support for its length coercion function,
-- could behave differently
create table bpchar_tbl (f1 character(16) unique, f2 bpchar);
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;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: expected at least one target column
create view bpchar_view as
^
\d+ bpchar_view
Metacommand \d+ bpchar_view is not supported
explain (verbose, costs off) select * from bpchar_view
where f1::bpchar = 'foo';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
explain (verbose, costs off) select * from bpchar_view
^
rollback;
--
-- 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);
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
--
^
explain (verbose, costs off)
select random()::int IN (1, 4, 8.0);
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 276
explain (verbose, costs off)
^
-- 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));
-stdin-:: Error: Type annotation
-stdin-::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-::6:23: Error: At function: PgIn
select '(0,0)'::point in ('(0,0,0,0)'::box, point(0,0));
^
-stdin-::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));
^
--
-- 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;
create function return_int_input(int) returns int as $$
begin
return $1;
end;
$$ language plpgsql stable;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 261
create function return_int_input(int) returns int as $$
^
create function return_text_input(text) returns text as $$
begin
return $1;
end;
$$ language plpgsql stable;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 261
create function return_text_input(text) returns text as $$
^
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
-stdin-:: Error: Type annotation
-stdin-::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-::1:28: Error: At function: PgIn
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
^
-stdin-::1:8: Error: At function: PgCall
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
^
-stdin-::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);
^
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
-stdin-:: Error: Type annotation
-stdin-::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-::1:28: Error: At function: PgIn
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
^
-stdin-::1:8: Error: At function: PgCall
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
^
-stdin-::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);
^
select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
-stdin-:: Error: Type annotation
-stdin-::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-::1:28: Error: At function: PgIn
select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
^
-stdin-::1:8: Error: At function: PgCall
select return_int_input(1) in (null, null, null, null, null, null, null, null, null, null, null);
^
-stdin-::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);
^
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
-stdin-:: Error: Type annotation
-stdin-::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-::1:28: Error: At function: PgIn
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
^
-stdin-::1:8: Error: At function: PgCall
select return_int_input(1) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1, null);
^
-stdin-::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);
^
select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
-stdin-:: Error: Type annotation
-stdin-::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-::1:36: Error: At function: PgIn
select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
^
-stdin-::1:8: Error: At function: PgCall
select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, 1);
^
-stdin-::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);
^
select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
-stdin-:: Error: Type annotation
-stdin-::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-::1:36: Error: At function: PgIn
select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
^
-stdin-::1:8: Error: At function: PgCall
select return_int_input(null::int) in (10, 9, 2, 8, 3, 7, 4, 6, 5, null);
^
-stdin-::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);
^
select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
-stdin-:: Error: Type annotation
-stdin-::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-::1:31: Error: At function: PgIn
select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
^
-stdin-::1:8: Error: At function: PgCall
select return_text_input('a') in ('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j');
^
-stdin-::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');
^
rollback;
-- Test with non-strict equality function.
-- We need to create our own type for this.
begin;
create type myint;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 255
create type myint;
^
create function myintin(cstring) returns myint strict immutable language
internal as 'int4in';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 261
create function myintin(cstring) returns myint strict immutable language
^
create function myintout(myint) returns cstring strict immutable language
internal as 'int4out';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 261
create function myintout(myint) returns cstring strict immutable language
^
create function myinthash(myint) returns integer strict immutable language
internal as 'hashint4';
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 261
create function myinthash(myint) returns integer strict immutable language
^
create type myint (input = myintin, output = myintout, like = int4);
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 255
create type myint (input = myintin, output = myintout, like = int4);
^
create cast (int4 as myint) without function;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 297
create cast (int4 as myint) without function;
^
create cast (myint as int4) without function;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 297
create cast (myint as int4) without function;
^
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;
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 261
create function myinteq(myint, myint) returns bool as $$
^
create operator = (
leftarg = myint,
rightarg = myint,
commutator = =,
negator = <>,
procedure = myinteq,
restrict = eqsel,
join = eqjoinsel,
merges
);
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 255
create operator = (
^
create operator class myint_ops
default for type myint using hash as
operator 1 = (myint, myint),
function 1 myinthash(myint);
-stdin-:: Error: Parse Sql
-stdin-::1:1: Error: RawStmt: alternative is not implemented yet : 298
create operator class myint_ops
^
create table inttest (a myint);
insert into inttest values(1::myint),(null);
-stdin-:: Error: Parse Sql
-stdin-::1:31: Error: Unknown type: myint
insert into inttest values(1::myint),(null);
^
-- 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);
-stdin-:: Error: Parse Sql
-stdin-::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);
^
-- 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);
-stdin-:: Error: Parse Sql
-stdin-::3:38: Error: Unknown type: myint
select * from inttest where a in (1::myint,2::myint,3::myint,4::myint,5::myint, null);
^
rollback;