mirror of https://github.com/postgres/postgres
parent
092bc49653
commit
a1d2e16550
@ -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) |
||||
|
||||
@ -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