diff options
author | Robert Haas <rhaas@postgresql.org> | 2012-04-24 09:20:53 -0400 |
---|---|---|
committer | Robert Haas <rhaas@postgresql.org> | 2012-04-24 09:20:53 -0400 |
commit | 3ce7f18e92e9687308ed5d9e516eb7e2f0decadb (patch) | |
tree | f4a22b79b2e5bd859e1b2c9689da043fa85e11c0 /src | |
parent | e4f06b70c9ac1473591d705990a8b601915ce4bd (diff) | |
download | postgresql-3ce7f18e92e9687308ed5d9e516eb7e2f0decadb.tar.gz postgresql-3ce7f18e92e9687308ed5d9e516eb7e2f0decadb.zip |
Casts to or from a domain type are ignored; warn and document.
Prohibiting this outright would break dumps taken from older versions
that contain such casts, which would create far more pain than is
justified here.
Per report by Jaime Casanova and subsequent discussion.
Diffstat (limited to 'src')
-rw-r--r-- | src/backend/commands/functioncmds.c | 11 | ||||
-rw-r--r-- | src/test/regress/expected/privileges.out | 1 |
2 files changed, 12 insertions, 0 deletions
diff --git a/src/backend/commands/functioncmds.c b/src/backend/commands/functioncmds.c index 4125b97e89e..5f1c19eb375 100644 --- a/src/backend/commands/functioncmds.c +++ b/src/backend/commands/functioncmds.c @@ -1517,6 +1517,17 @@ CreateCast(CreateCastStmt *stmt) aclcheck_error(aclresult, ACL_KIND_TYPE, format_type_be(targettypeid)); + /* Domains are allowed for historical reasons, but we warn */ + if (sourcetyptype == TYPTYPE_DOMAIN) + ereport(WARNING, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cast will be ignored because the source data type is a domain"))); + + else if (targettyptype == TYPTYPE_DOMAIN) + ereport(WARNING, + (errcode(ERRCODE_WRONG_OBJECT_TYPE), + errmsg("cast will be ignored because the target data type is a domain"))); + /* Detemine the cast method */ if (stmt->func != NULL) castmethod = COERCION_METHOD_FUNCTION; diff --git a/src/test/regress/expected/privileges.out b/src/test/regress/expected/privileges.out index a816cce1b11..dfaf3a7a7e0 100644 --- a/src/test/regress/expected/privileges.out +++ b/src/test/regress/expected/privileges.out @@ -571,6 +571,7 @@ CREATE DOMAIN testdomain2b AS testdomain1; CREATE DOMAIN testdomain3b AS int; CREATE FUNCTION castfunc(int) RETURNS testdomain3b AS $$ SELECT $1::testdomain3b $$ LANGUAGE SQL; CREATE CAST (testdomain1 AS testdomain3b) WITH FUNCTION castfunc(int); +WARNING: cast will be ignored because the source data type is a domain CREATE FUNCTION testfunc5b(a testdomain1) RETURNS int LANGUAGE SQL AS $$ SELECT $1 $$; CREATE FUNCTION testfunc6b(b int) RETURNS testdomain1 LANGUAGE SQL AS $$ SELECT $1::testdomain1 $$; CREATE OPERATOR !! (PROCEDURE = testfunc5b, RIGHTARG = testdomain1); |