From 317215fc55ae9ead960b3e1e79aa41fd004f7414 Mon Sep 17 00:00:00 2001 From: Tom Lane Date: Fri, 22 Dec 2000 07:07:58 +0000 Subject: [PATCH] Clean up CREATE TYPE/OPERATOR/AGGREGATE productions, so that parser will not accept types named with operator names or vice versa. --- src/backend/parser/gram.y | 55 +++++++++++++++++++++++------------------------ 1 file changed, 27 insertions(+), 28 deletions(-) diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y index 5344a40cb2..371d564b49 100644 --- a/src/backend/parser/gram.y +++ b/src/backend/parser/gram.y @@ -11,7 +11,7 @@ * * * IDENTIFICATION - * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.211 2000/12/03 14:50:54 thomas Exp $ + * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.212 2000/12/22 07:07:58 tgl Exp $ * * HISTORY * AUTHOR DATE MAJOR EVENT @@ -161,7 +161,7 @@ static void doNegateFloat(Value *v); %type TriggerEvents %type TriggerFuncArg -%type relation_name, copy_file_name, copy_delimiter, copy_null, def_name, +%type relation_name, copy_file_name, copy_delimiter, copy_null, database_name, access_method_clause, access_method, attr_name, class, index_name, name, func_name, file_name @@ -206,7 +206,7 @@ static void doNegateFloat(Value *v); opt_with_copy, index_opt_unique, opt_verbose, opt_analyze %type opt_cursor -%type copy_dirn, def_type, direction, reindex_type, drop_type, +%type copy_dirn, direction, reindex_type, drop_type, opt_column, event, comment_type, comment_cl, comment_ag, comment_fn, comment_op, comment_tg @@ -1635,7 +1635,7 @@ IntegerOnly: Iconst *****************************************************************************/ CreatePLangStmt: CREATE PLangTrusted opt_procedural LANGUAGE Sconst - HANDLER def_name LANCOMPILER Sconst + HANDLER func_name LANCOMPILER Sconst { CreatePLangStmt *n = makeNode(CreatePLangStmt); n->plname = $5; @@ -1854,29 +1854,34 @@ DropTrigStmt: DROP TRIGGER name ON relation_name /***************************************************************************** * * QUERY : - * define (type,operator,aggregate) + * define (aggregate,operator,type) * *****************************************************************************/ -DefineStmt: CREATE def_type def_name definition +DefineStmt: CREATE AGGREGATE func_name definition { DefineStmt *n = makeNode(DefineStmt); - n->defType = $2; + n->defType = AGGREGATE; + n->defname = $3; + n->definition = $4; + $$ = (Node *)n; + } + | CREATE OPERATOR all_Op definition + { + DefineStmt *n = makeNode(DefineStmt); + n->defType = OPERATOR; + n->defname = $3; + n->definition = $4; + $$ = (Node *)n; + } + | CREATE TYPE_P name definition + { + DefineStmt *n = makeNode(DefineStmt); + n->defType = TYPE_P; n->defname = $3; n->definition = $4; $$ = (Node *)n; } - ; - -def_type: OPERATOR { $$ = OPERATOR; } - | TYPE_P { $$ = TYPE_P; } - | AGGREGATE { $$ = AGGREGATE; } - ; - -def_name: PROCEDURE { $$ = "procedure"; } - | JOIN { $$ = "join"; } - | all_Op { $$ = $1; } - | ColId { $$ = $1; } ; definition: '(' def_list ')' { $$ = $2; } @@ -1886,24 +1891,18 @@ def_list: def_elem { $$ = makeList1($1); } | def_list ',' def_elem { $$ = lappend($1, $3); } ; -def_elem: def_name '=' def_arg +def_elem: ColLabel '=' def_arg { $$ = makeNode(DefElem); $$->defname = $1; $$->arg = (Node *)$3; } - | def_name + | ColLabel { $$ = makeNode(DefElem); $$->defname = $1; $$->arg = (Node *)NULL; } - | DEFAULT '=' def_arg - { - $$ = makeNode(DefElem); - $$->defname = "default"; - $$->arg = (Node *)$3; - } ; def_arg: func_return { $$ = (Node *)$1; } @@ -2538,7 +2537,7 @@ RemoveFuncStmt: DROP FUNCTION func_name func_args } ; -RemoveAggrStmt: DROP AGGREGATE name aggr_argtype +RemoveAggrStmt: DROP AGGREGATE func_name aggr_argtype { RemoveAggrStmt *n = makeNode(RemoveAggrStmt); n->aggname = $3; @@ -5498,6 +5497,7 @@ TokenId: ABSOLUTE { $$ = "absolute"; } | PRIOR { $$ = "prior"; } | PRIVILEGES { $$ = "privileges"; } | PROCEDURAL { $$ = "procedural"; } + | PROCEDURE { $$ = "procedure"; } | READ { $$ = "read"; } | REINDEX { $$ = "reindex"; } | RELATIVE { $$ = "relative"; } @@ -5644,7 +5644,6 @@ ColLabel: ColId { $$ = $1; } | POSITION { $$ = "position"; } | PRECISION { $$ = "precision"; } | PRIMARY { $$ = "primary"; } - | PROCEDURE { $$ = "procedure"; } | PUBLIC { $$ = "public"; } | REFERENCES { $$ = "references"; } | RESET { $$ = "reset"; } -- 2.11.0