*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.78 2002/06/20 20:29:27 momjian Exp $
+ * $Header: /cvsroot/pgsql/src/backend/commands/define.c,v 1.79 2002/08/10 19:01:53 tgl Exp $
*
* DESCRIPTION
* The "DefineFoo" routines take the parse tree and pick out the
#include <ctype.h>
#include <math.h>
+#include "catalog/namespace.h"
#include "commands/defrem.h"
#include "parser/parse_type.h"
#include "utils/int8.h"
return strVal(def->arg);
case T_TypeName:
return TypeNameToString((TypeName *) def->arg);
+ case T_List:
+ return NameListToString((List *) def->arg);
default:
elog(ERROR, "Define: cannot interpret argument of \"%s\"",
def->defname);
{
case T_TypeName:
return ((TypeName *) def->arg)->names;
+ case T_List:
+ return (List *) def->arg;
case T_String:
/* Allow quoted name for backwards compatibility */
return makeList1(def->arg);
/*
* Extract a TypeName from a DefElem.
+ *
+ * Note: we do not accept a List arg here, because the parser will only
+ * return a bare List when the name looks like an operator name.
*/
TypeName *
defGetTypeName(DefElem *def)
"variable") == 0)
return -1; /* variable length */
break;
+ case T_List:
+ /* must be an operator name */
+ break;
default:
elog(ERROR, "Define: cannot interpret argument of \"%s\"",
def->defname);
}
- elog(ERROR, "Define: invalid argument for \"%s\"",
- def->defname);
+ elog(ERROR, "Define: invalid argument for \"%s\": \"%s\"",
+ def->defname, defGetString(def));
return 0; /* keep compiler quiet */
}
*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.357 2002/08/06 05:40:45 ishii Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.358 2002/08/10 19:01:53 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
copy_opt_item:
BINARY
{
- $$ = makeNode(DefElem);
- $$->defname = "binary";
- $$->arg = (Node *)makeInteger(TRUE);
+ $$ = makeDefElem("binary", (Node *)makeInteger(TRUE));
}
| OIDS
{
- $$ = makeNode(DefElem);
- $$->defname = "oids";
- $$->arg = (Node *)makeInteger(TRUE);
+ $$ = makeDefElem("oids", (Node *)makeInteger(TRUE));
}
| DELIMITER opt_as Sconst
{
- $$ = makeNode(DefElem);
- $$->defname = "delimiter";
- $$->arg = (Node *)makeString($3);
+ $$ = makeDefElem("delimiter", (Node *)makeString($3));
}
| NULL_P opt_as Sconst
{
- $$ = makeNode(DefElem);
- $$->defname = "null";
- $$->arg = (Node *)makeString($3);
+ $$ = makeDefElem("null", (Node *)makeString($3));
}
;
opt_binary:
BINARY
{
- $$ = makeNode(DefElem);
- $$->defname = "binary";
- $$->arg = (Node *)makeInteger(TRUE);
+ $$ = makeDefElem("binary", (Node *)makeInteger(TRUE));
}
| /*EMPTY*/ { $$ = NULL; }
;
opt_oids:
WITH OIDS
{
- $$ = makeNode(DefElem);
- $$->defname = "oids";
- $$->arg = (Node *)makeInteger(TRUE);
+ $$ = makeDefElem("oids", (Node *)makeInteger(TRUE));
}
| /*EMPTY*/ { $$ = NULL; }
;
/* USING DELIMITERS kept for backward compatibility. 2002-06-15 */
opt_using DELIMITERS Sconst
{
- $$ = makeNode(DefElem);
- $$->defname = "delimiter";
- $$->arg = (Node *)makeString($3);
+ $$ = makeDefElem("delimiter", (Node *)makeString($3));
}
| /*EMPTY*/ { $$ = NULL; }
;
/* Note: any simple identifier will be returned as a type name! */
def_arg: func_return { $$ = (Node *)$1; }
- | all_Op { $$ = (Node *)makeString($1); }
+ | qual_all_Op { $$ = (Node *)$1; }
| NumericOnly { $$ = (Node *)$1; }
| Sconst { $$ = (Node *)makeString($1); }
;
createdb_opt_item:
LOCATION opt_equal Sconst
{
- $$ = makeNode(DefElem);
- $$->defname = "location";
- $$->arg = (Node *)makeString($3);
+ $$ = makeDefElem("location", (Node *)makeString($3));
}
| LOCATION opt_equal DEFAULT
{
- $$ = makeNode(DefElem);
- $$->defname = "location";
- $$->arg = NULL;
+ $$ = makeDefElem("location", NULL);
}
| TEMPLATE opt_equal name
{
- $$ = makeNode(DefElem);
- $$->defname = "template";
- $$->arg = (Node *)makeString($3);
+ $$ = makeDefElem("template", (Node *)makeString($3));
}
| TEMPLATE opt_equal DEFAULT
{
- $$ = makeNode(DefElem);
- $$->defname = "template";
- $$->arg = NULL;
+ $$ = makeDefElem("template", NULL);
}
| ENCODING opt_equal Sconst
{
elog(ERROR, "%s is not a valid encoding name", $3);
encoding = pg_char_to_encoding($3);
- $$ = makeNode(DefElem);
- $$->defname = "encoding";
- $$->arg = (Node *)makeInteger(encoding);
+ $$ = makeDefElem("encoding", (Node *)makeInteger(encoding));
}
| ENCODING opt_equal Iconst
{
if (!strcmp(encoding_name,"") ||
pg_valid_server_encoding(encoding_name) < 0)
elog(ERROR, "%d is not a valid encoding code", $3);
- $$ = makeNode(DefElem);
- $$->defname = "encoding";
- $$->arg = (Node *)makeInteger($3);
+ $$ = makeDefElem("encoding", (Node *)makeInteger($3));
}
| ENCODING opt_equal DEFAULT
{
- $$ = makeNode(DefElem);
- $$->defname = "encoding";
- $$->arg = (Node *)makeInteger(-1);
+ $$ = makeDefElem("encoding", (Node *)makeInteger(-1));
}
| OWNER opt_equal name
{
- $$ = makeNode(DefElem);
- $$->defname = "owner";
- $$->arg = (Node *)makeString($3);
+ $$ = makeDefElem("owner", (Node *)makeString($3));
}
| OWNER opt_equal DEFAULT
{
- $$ = makeNode(DefElem);
- $$->defname = "owner";
- $$->arg = NULL;
+ $$ = makeDefElem("owner", NULL);
}
;