mirror of
https://git.postgresql.org/git/postgresql.git
synced 2025-01-30 19:00:29 +08:00
Add test case for CREATE CAST.
This commit is contained in:
parent
092bc49653
commit
a1d2e16550
74
src/test/regress/expected/create_cast.out
Normal file
74
src/test/regress/expected/create_cast.out
Normal file
@ -0,0 +1,74 @@
|
||||
--
|
||||
-- CREATE_CAST
|
||||
--
|
||||
-- Create some types to test with
|
||||
CREATE TYPE casttesttype;
|
||||
CREATE FUNCTION casttesttype_in(cstring)
|
||||
RETURNS casttesttype
|
||||
AS 'textin'
|
||||
LANGUAGE internal STRICT;
|
||||
NOTICE: return type casttesttype is only a shell
|
||||
CREATE FUNCTION casttesttype_out(casttesttype)
|
||||
RETURNS cstring
|
||||
AS 'textout'
|
||||
LANGUAGE internal STRICT;
|
||||
NOTICE: argument type casttesttype is only a shell
|
||||
CREATE TYPE casttesttype (
|
||||
internallength = variable,
|
||||
input = casttesttype_in,
|
||||
output = casttesttype_out,
|
||||
alignment = int4
|
||||
);
|
||||
-- a dummy function to test with
|
||||
CREATE FUNCTION casttestfunc(casttesttype) RETURNS int4 LANGUAGE SQL AS
|
||||
$$ SELECT 1; $$;
|
||||
SELECT casttestfunc('foo'::text); -- fails, as there's no cast
|
||||
ERROR: function casttestfunc(text) does not exist
|
||||
LINE 1: SELECT casttestfunc('foo'::text);
|
||||
^
|
||||
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
|
||||
-- Try binary coercion cast
|
||||
CREATE CAST (text AS casttesttype) WITHOUT FUNCTION;
|
||||
SELECT casttestfunc('foo'::text); -- doesn't work, as the cast is explicit
|
||||
ERROR: function casttestfunc(text) does not exist
|
||||
LINE 1: SELECT casttestfunc('foo'::text);
|
||||
^
|
||||
HINT: No function matches the given name and argument types. You might need to add explicit type casts.
|
||||
SELECT casttestfunc('foo'::text::casttesttype); -- should work
|
||||
casttestfunc
|
||||
--------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
DROP CAST (text AS casttesttype); -- cleanup
|
||||
-- Try IMPLICIT binary coercion cast
|
||||
CREATE CAST (text AS casttesttype) WITHOUT FUNCTION AS IMPLICIT;
|
||||
SELECT casttestfunc('foo'::text); -- Should work now
|
||||
casttestfunc
|
||||
--------------
|
||||
1
|
||||
(1 row)
|
||||
|
||||
-- Try I/O conversion cast.
|
||||
SELECT 1234::int4::casttesttype; -- No cast yet, should fail
|
||||
ERROR: cannot cast type integer to casttesttype
|
||||
LINE 1: SELECT 1234::int4::casttesttype;
|
||||
^
|
||||
CREATE CAST (int4 AS casttesttype) WITH INOUT;
|
||||
SELECT 1234::int4::casttesttype; -- Should work now
|
||||
casttesttype
|
||||
--------------
|
||||
1234
|
||||
(1 row)
|
||||
|
||||
DROP CAST (int4 AS casttesttype);
|
||||
-- Try cast with a function
|
||||
CREATE FUNCTION int4_casttesttype(int4) RETURNS casttesttype LANGUAGE SQL AS
|
||||
$$ SELECT ('foo'::text || $1::text)::casttesttype; $$;
|
||||
CREATE CAST (int4 AS casttesttype) WITH FUNCTION int4_casttesttype(int4) AS IMPLICIT;
|
||||
SELECT 1234::int4::casttesttype; -- Should work now
|
||||
casttesttype
|
||||
--------------
|
||||
foo1234
|
||||
(1 row)
|
||||
|
@ -1,5 +1,5 @@
|
||||
# ----------
|
||||
# $PostgreSQL: pgsql/src/test/regress/parallel_schedule,v 1.49 2008/10/04 21:56:55 tgl Exp $
|
||||
# $PostgreSQL: pgsql/src/test/regress/parallel_schedule,v 1.50 2008/10/31 09:17:16 heikki Exp $
|
||||
#
|
||||
# By convention, we put no more than twenty tests in any one parallel group;
|
||||
# this limits the number of connections needed to run the tests.
|
||||
@ -47,7 +47,7 @@ test: copy copyselect
|
||||
# ----------
|
||||
# Another group of parallel tests
|
||||
# ----------
|
||||
test: constraints triggers create_misc create_aggregate create_operator inherit vacuum drop_if_exists
|
||||
test: constraints triggers create_misc create_aggregate create_operator inherit vacuum drop_if_exists create_cast
|
||||
|
||||
# Depends on the above
|
||||
test: create_index create_view
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.46 2008/10/04 21:56:55 tgl Exp $
|
||||
# $PostgreSQL: pgsql/src/test/regress/serial_schedule,v 1.47 2008/10/31 09:17:16 heikki Exp $
|
||||
# This should probably be in an order similar to parallel_schedule.
|
||||
test: boolean
|
||||
test: char
|
||||
@ -48,6 +48,7 @@ test: create_function_1
|
||||
test: create_type
|
||||
test: create_table
|
||||
test: create_function_2
|
||||
test: create_cast
|
||||
test: copy
|
||||
test: copyselect
|
||||
test: constraints
|
||||
|
54
src/test/regress/sql/create_cast.sql
Normal file
54
src/test/regress/sql/create_cast.sql
Normal file
@ -0,0 +1,54 @@
|
||||
--
|
||||
-- CREATE_CAST
|
||||
--
|
||||
|
||||
-- Create some types to test with
|
||||
CREATE TYPE casttesttype;
|
||||
|
||||
CREATE FUNCTION casttesttype_in(cstring)
|
||||
RETURNS casttesttype
|
||||
AS 'textin'
|
||||
LANGUAGE internal STRICT;
|
||||
CREATE FUNCTION casttesttype_out(casttesttype)
|
||||
RETURNS cstring
|
||||
AS 'textout'
|
||||
LANGUAGE internal STRICT;
|
||||
|
||||
CREATE TYPE casttesttype (
|
||||
internallength = variable,
|
||||
input = casttesttype_in,
|
||||
output = casttesttype_out,
|
||||
alignment = int4
|
||||
);
|
||||
|
||||
-- a dummy function to test with
|
||||
CREATE FUNCTION casttestfunc(casttesttype) RETURNS int4 LANGUAGE SQL AS
|
||||
$$ SELECT 1; $$;
|
||||
|
||||
SELECT casttestfunc('foo'::text); -- fails, as there's no cast
|
||||
|
||||
-- Try binary coercion cast
|
||||
CREATE CAST (text AS casttesttype) WITHOUT FUNCTION;
|
||||
SELECT casttestfunc('foo'::text); -- doesn't work, as the cast is explicit
|
||||
SELECT casttestfunc('foo'::text::casttesttype); -- should work
|
||||
DROP CAST (text AS casttesttype); -- cleanup
|
||||
|
||||
-- Try IMPLICIT binary coercion cast
|
||||
CREATE CAST (text AS casttesttype) WITHOUT FUNCTION AS IMPLICIT;
|
||||
SELECT casttestfunc('foo'::text); -- Should work now
|
||||
|
||||
-- Try I/O conversion cast.
|
||||
SELECT 1234::int4::casttesttype; -- No cast yet, should fail
|
||||
|
||||
CREATE CAST (int4 AS casttesttype) WITH INOUT;
|
||||
SELECT 1234::int4::casttesttype; -- Should work now
|
||||
|
||||
DROP CAST (int4 AS casttesttype);
|
||||
|
||||
-- Try cast with a function
|
||||
|
||||
CREATE FUNCTION int4_casttesttype(int4) RETURNS casttesttype LANGUAGE SQL AS
|
||||
$$ SELECT ('foo'::text || $1::text)::casttesttype; $$;
|
||||
|
||||
CREATE CAST (int4 AS casttesttype) WITH FUNCTION int4_casttesttype(int4) AS IMPLICIT;
|
||||
SELECT 1234::int4::casttesttype; -- Should work now
|
Loading…
Reference in New Issue
Block a user