diff options
Diffstat (limited to 'src/backend/commands/define.c')
-rw-r--r-- | src/backend/commands/define.c | 36 |
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))); } } |