diff options
author | Tom Lane <tgl@sss.pgh.pa.us> | 2003-07-01 00:04:39 +0000 |
---|---|---|
committer | Tom Lane <tgl@sss.pgh.pa.us> | 2003-07-01 00:04:39 +0000 |
commit | d6d07a0eeabc8dfa6f8803193c2896d3e2e53a3c (patch) | |
tree | 72c5bf24d290111ad02b96f470055f9498689a5f /src/backend/optimizer/util/clauses.c | |
parent | 71e9f3b07f2f993492233dc2fff0566acc70eb64 (diff) |
SQL functions can have arguments and results declared ANYARRAY or
ANYELEMENT. The effect is to postpone typechecking of the function
body until runtime. Documentation is still lacking.
Original patch by Joe Conway, modified to postpone type checking
by Tom Lane.
Diffstat (limited to 'src/backend/optimizer/util/clauses.c')
-rw-r--r-- | src/backend/optimizer/util/clauses.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/backend/optimizer/util/clauses.c b/src/backend/optimizer/util/clauses.c index 54f2d7bd69b..3da79cc4957 100644 --- a/src/backend/optimizer/util/clauses.c +++ b/src/backend/optimizer/util/clauses.c @@ -8,7 +8,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.142 2003/06/29 00:33:43 tgl Exp $ + * $Header: /cvsroot/pgsql/src/backend/optimizer/util/clauses.c,v 1.143 2003/07/01 00:04:37 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -1731,6 +1731,7 @@ inline_function(Oid funcid, Oid result_type, List *args, int *usecounts; List *arg; int i; + int j; /* * Forget it if the function is not SQL-language or has other @@ -1742,12 +1743,20 @@ inline_function(Oid funcid, Oid result_type, List *args, funcform->pronargs != length(args)) return NULL; - /* Forget it if declared return type is tuple or void */ + /* Forget it if declared return type is not base or domain */ result_typtype = get_typtype(funcform->prorettype); if (result_typtype != 'b' && result_typtype != 'd') return NULL; + /* Forget it if any declared argument type is polymorphic */ + for (j = 0; j < funcform->pronargs; j++) + { + if (funcform->proargtypes[j] == ANYARRAYOID || + funcform->proargtypes[j] == ANYELEMENTOID) + return NULL; + } + /* Check for recursive function, and give up trying to expand if so */ if (oidMember(funcid, active_fns)) return NULL; |