aboutsummaryrefslogtreecommitdiff
path: root/src/backend/commands/define.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/commands/define.c')
-rw-r--r--src/backend/commands/define.c36
1 files changed, 29 insertions, 7 deletions
diff --git a/src/backend/commands/define.c b/src/backend/commands/define.c
index c7dc7d3ad1c..509d5026d30 100644
--- a/src/backend/commands/define.c
+++ b/src/backend/commands/define.c
@@ -9,7 +9,7 @@
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.34 1999/07/17 20:16:52 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.35 1999/09/28 04:34:40 momjian Exp $
*
* DESCRIPTION
* The "DefineFoo" routines take the parse tree and pick out the
@@ -178,23 +178,45 @@ compute_full_attributes(const List *parameters, int32 *byte_pct_p,
}
+/*
+ * For a dynamically linked C language object, the form of the clause is
+ *
+ * AS <object file name> [, <link symbol name> ]
+ *
+ * In all other cases
+ *
+ * AS <object reference, or sql code>
+ *
+ */
static void
-interpret_AS_clause(const char *languageName, const char *as,
+interpret_AS_clause(const char *languageName, const List *as,
char **prosrc_str_p, char **probin_str_p)
{
+ Assert(as != NIL);
if (strcmp(languageName, "C") == 0)
{
- /* For "C" language, store the given string in probin */
- *prosrc_str_p = "-";
- *probin_str_p = (char *) as;
+
+ /*
+ * For "C" language, store the file name in probin and, when
+ * given, the link symbol name in prosrc.
+ */
+ *probin_str_p = strVal(lfirst(as));
+ if (lnext(as) == NULL)
+ *prosrc_str_p = "-";
+ else
+ *prosrc_str_p = strVal(lsecond(as));
}
else
{
- /* Everything else wants the given string in prosrc */
- *prosrc_str_p = (char *) as;
+ /* Everything else wants the given string in prosrc. */
+ *prosrc_str_p = strVal(lfirst(as));
*probin_str_p = "-";
+
+ if (lnext(as) != NULL)
+ elog(ERROR, "CREATE FUNCTION: parse error in 'AS %s, %s'.",
+ strVal(lfirst(as)), strVal(lsecond(as)));
}
}