aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser
diff options
context:
space:
mode:
authorTom Lane <tgl@sss.pgh.pa.us>2000-08-24 03:29:15 +0000
committerTom Lane <tgl@sss.pgh.pa.us>2000-08-24 03:29:15 +0000
commit782c16c6a154e760bf1608d633488538cd52da93 (patch)
tree902da787593da21a979bd2f74b0b44acf9c427b0 /src/backend/parser
parent87523ab8db34859ae3fb980a3fab9f29dfc4c97a (diff)
downloadpostgresql-782c16c6a154e760bf1608d633488538cd52da93.tar.gz
postgresql-782c16c6a154e760bf1608d633488538cd52da93.zip
SQL-language functions are now callable in ordinary fmgr contexts ...
for example, an SQL function can be used in a functional index. (I make no promises about speed, but it'll work ;-).) Clean up and simplify handling of functions returning sets.
Diffstat (limited to 'src/backend/parser')
-rw-r--r--src/backend/parser/parse_func.c16
-rw-r--r--src/backend/parser/parse_node.c19
2 files changed, 9 insertions, 26 deletions
diff --git a/src/backend/parser/parse_func.c b/src/backend/parser/parse_func.c
index 551e7d2b585..bad9401c609 100644
--- a/src/backend/parser/parse_func.c
+++ b/src/backend/parser/parse_func.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.88 2000/08/20 00:44:18 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_func.c,v 1.89 2000/08/24 03:29:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -560,13 +560,13 @@ ParseFuncOrColumn(ParseState *pstate, char *funcname, List *fargs,
{ /* we know all of these fields already */
/*
- * We create a funcnode with a placeholder function SetEval.
- * SetEval() never actually gets executed. When the function
- * evaluation routines see it, they use the funcid projected out
- * from the relation as the actual function to call. Example:
- * retrieve (emp.mgr.name) The plan for this will scan the emp
- * relation, projecting out the mgr attribute, which is a funcid.
- * This function is then called (instead of SetEval) and "name" is
+ * We create a funcnode with a placeholder function seteval().
+ * At runtime, seteval() will execute the function identified
+ * by the funcid it receives as parameter.
+ *
+ * Example: retrieve (emp.mgr.name). The plan for this will scan the
+ * emp relation, projecting out the mgr attribute, which is a funcid.
+ * This function is then called (via seteval()) and "name" is
* projected from its result.
*/
funcid = F_SETEVAL;
diff --git a/src/backend/parser/parse_node.c b/src/backend/parser/parse_node.c
index 2bda101538c..5d363ea3e69 100644
--- a/src/backend/parser/parse_node.c
+++ b/src/backend/parser/parse_node.c
@@ -8,7 +8,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.44 2000/08/08 15:42:04 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/parse_node.c,v 1.45 2000/08/24 03:29:05 tgl Exp $
*
*-------------------------------------------------------------------------
*/
@@ -34,7 +34,6 @@
#include "utils/lsyscache.h"
#include "utils/syscache.h"
-static void disallow_setop(char *op, Type optype, Node *operand);
static bool fitsInFloat(Value *value);
@@ -71,7 +70,6 @@ make_operand(char *opname,
if (tree != NULL)
{
- disallow_setop(opname, target_type, tree);
/* must coerce? */
if (target_typeId != orig_typeId)
result = coerce_type(NULL, tree, orig_typeId, target_typeId, -1);
@@ -96,21 +94,6 @@ make_operand(char *opname,
} /* make_operand() */
-static void
-disallow_setop(char *op, Type optype, Node *operand)
-{
- if (operand == NULL)
- return;
-
- if (nodeTag(operand) == T_Iter)
- {
- elog(ERROR, "An operand to the '%s' operator returns a set of %s,"
- "\n\tbut '%s' takes single values, not sets.",
- op, typeTypeName(optype), op);
- }
-}
-
-
/* make_op()
* Operator construction.
*