aboutsummaryrefslogtreecommitdiff
path: root/src/backend/parser/gram.y
diff options
context:
space:
mode:
Diffstat (limited to 'src/backend/parser/gram.y')
-rw-r--r--src/backend/parser/gram.y341
1 files changed, 159 insertions, 182 deletions
diff --git a/src/backend/parser/gram.y b/src/backend/parser/gram.y
index fa6bf35fb97..4ebddde891b 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.296 2002/03/22 02:56:33 tgl Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.297 2002/03/29 19:06:10 tgl Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
@@ -53,6 +53,7 @@
#include "access/htup.h"
#include "catalog/index.h"
#include "catalog/pg_type.h"
+#include "nodes/makefuncs.h"
#include "nodes/params.h"
#include "nodes/parsenodes.h"
#include "parser/gramparse.h"
@@ -122,8 +123,6 @@ static void doNegateFloat(Value *v);
ResTarget *target;
PrivTarget *privtarget;
- DefineStmt *dstmt;
- RuleStmt *rstmt;
InsertStmt *istmt;
}
@@ -175,7 +174,8 @@ static void doNegateFloat(Value *v);
%type <str> 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
+ class, index_name, name, function_name, file_name,
+ func_name, handler_name
%type <range> qualified_name, OptConstrFromTable
@@ -200,8 +200,8 @@ static void doNegateFloat(Value *v);
opt_column_list, columnList, opt_name_list,
sort_clause, sortby_list, index_params, index_list, name_list,
from_clause, from_list, opt_array_bounds, qualified_name_list,
- expr_list, attrs, opt_attrs, target_list, update_target_list,
- insert_column_list,
+ any_name, any_name_list, expr_list, dotted_name, attrs,
+ target_list, update_target_list, insert_column_list,
def_list, opt_indirection, group_clause, TriggerFuncArgs,
select_limit, opt_select_limit
@@ -411,10 +411,10 @@ static void doNegateFloat(Value *v);
/* Unary Operators */
%left AT ZONE /* sets precedence for AT TIME ZONE */
%right UMINUS
-%left '.'
%left '[' ']'
%left '(' ')'
%left TYPECAST
+%left '.'
%%
/*
@@ -1812,7 +1812,7 @@ IntegerOnly: Iconst
*****************************************************************************/
CreatePLangStmt: CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst
- HANDLER func_name opt_lancompiler
+ HANDLER handler_name opt_lancompiler
{
CreatePLangStmt *n = makeNode(CreatePLangStmt);
n->plname = $5;
@@ -1827,6 +1827,16 @@ opt_trusted: TRUSTED { $$ = TRUE; }
| /*EMPTY*/ { $$ = FALSE; }
;
+/* This ought to be just func_name, but that causes reduce/reduce conflicts
+ * (CREATE LANGUAGE is the only place where func_name isn't followed by '(').
+ * Work around by using name and dotted_name separately.
+ */
+handler_name: name
+ { $$ = $1; }
+ | dotted_name
+ { $$ = strVal(lfirst($1)); /* XXX changing soon */ }
+ ;
+
opt_lancompiler: LANCOMPILER Sconst { $$ = $2; }
| /*EMPTY*/ { $$ = ""; }
;
@@ -1853,7 +1863,7 @@ opt_procedural: PROCEDURAL { $$ = TRUE; }
CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
qualified_name TriggerForSpec EXECUTE PROCEDURE
- name '(' TriggerFuncArgs ')'
+ func_name '(' TriggerFuncArgs ')'
{
CreateTrigStmt *n = makeNode(CreateTrigStmt);
n->trigname = $3;
@@ -1877,7 +1887,8 @@ CreateTrigStmt: CREATE TRIGGER name TriggerActionTime TriggerEvents ON
| CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON
qualified_name OptConstrFromTable
ConstraintAttributeSpec
- FOR EACH ROW EXECUTE PROCEDURE name '(' TriggerFuncArgs ')'
+ FOR EACH ROW EXECUTE PROCEDURE
+ func_name '(' TriggerFuncArgs ')'
{
CreateTrigStmt *n = makeNode(CreateTrigStmt);
n->trigname = $4;
@@ -2043,7 +2054,7 @@ DefineStmt: CREATE AGGREGATE func_name definition
{
DefineStmt *n = makeNode(DefineStmt);
n->defType = AGGREGATE;
- n->defname = $3;
+ n->defnames = makeList1(makeString($3)); /* XXX */
n->definition = $4;
$$ = (Node *)n;
}
@@ -2051,15 +2062,15 @@ DefineStmt: CREATE AGGREGATE func_name definition
{
DefineStmt *n = makeNode(DefineStmt);
n->defType = OPERATOR;
- n->defname = $3;
+ n->defnames = makeList1(makeString($3)); /* XXX */
n->definition = $4;
$$ = (Node *)n;
}
- | CREATE TYPE_P name definition
+ | CREATE TYPE_P any_name definition
{
DefineStmt *n = makeNode(DefineStmt);
n->defType = TYPE_P;
- n->defname = $3;
+ n->defnames = $3;
n->definition = $4;
$$ = (Node *)n;
}
@@ -2102,10 +2113,7 @@ def_arg: func_return { $$ = (Node *)$1; }
*
*****************************************************************************/
-/* DropStmt needs to use qualified_name_list as many of the objects
- * are relations or other schema objects (names can be schema-qualified) */
-
-DropStmt: DROP drop_type qualified_name_list opt_drop_behavior
+DropStmt: DROP drop_type any_name_list opt_drop_behavior
{
DropStmt *n = makeNode(DropStmt);
n->removeType = $2;
@@ -2124,6 +2132,18 @@ drop_type: TABLE { $$ = DROP_TABLE; }
| DOMAIN_P { $$ = DROP_DOMAIN; }
;
+any_name_list: any_name
+ { $$ = makeList1($1); }
+ | any_name_list ',' any_name
+ { $$ = lappend($1, $3); }
+ ;
+
+any_name: ColId
+ { $$ = makeList1(makeString($1)); }
+ | dotted_name
+ { $$ = $1; }
+ ;
+
/*****************************************************************************
*
* QUERY:
@@ -2192,7 +2212,7 @@ CommentStmt: COMMENT ON comment_type name IS comment_text
n->comment = $10;
$$ = (Node *) n;
}
- | COMMENT ON AGGREGATE name '(' aggr_argtype ')' IS comment_text
+ | COMMENT ON AGGREGATE func_name '(' aggr_argtype ')' IS comment_text
{
CommentStmt *n = makeNode(CommentStmt);
n->objtype = AGGREGATE;
@@ -2203,18 +2223,6 @@ CommentStmt: COMMENT ON comment_type name IS comment_text
n->comment = $9;
$$ = (Node *) n;
}
- | COMMENT ON AGGREGATE name aggr_argtype IS comment_text
- {
- /* Obsolete syntax, but must support for awhile */
- CommentStmt *n = makeNode(CommentStmt);
- n->objtype = AGGREGATE;
- n->objschema = NULL;
- n->objname = $4;
- n->objproperty = NULL;
- n->objlist = makeList1($5);
- n->comment = $7;
- $$ = (Node *) n;
- }
| COMMENT ON FUNCTION func_name func_args IS comment_text
{
CommentStmt *n = makeNode(CommentStmt);
@@ -2691,9 +2699,9 @@ ProcedureStmt: CREATE opt_or_replace FUNCTION func_name func_args
{
ProcedureStmt *n = makeNode(ProcedureStmt);
n->replace = $2;
- n->funcname = $4;
+ n->funcname = makeList1(makeString($4)); /* XXX */
n->argTypes = $5;
- n->returnType = (Node *) $7;
+ n->returnType = $7;
n->withClause = $12;
n->as = $9;
n->language = $11;
@@ -2765,19 +2773,19 @@ func_return: func_type
;
/*
- * We would like to make the second production here be ColId '.' ColId etc,
+ * We would like to make the second production here be ColId attrs etc,
* but that causes reduce/reduce conflicts. type_name is next best choice.
*/
func_type: Typename
{
$$ = $1;
}
- | type_name '.' ColId '%' TYPE_P
+ | type_name attrs '%' TYPE_P
{
$$ = makeNode(TypeName);
- $$->name = $1;
+ $$->names = lcons(makeString($1), $2);
+ $$->pct_type = true;
$$->typmod = -1;
- $$->attrname = $3;
}
;
@@ -2804,15 +2812,7 @@ RemoveAggrStmt: DROP AGGREGATE func_name '(' aggr_argtype ')'
{
RemoveAggrStmt *n = makeNode(RemoveAggrStmt);
n->aggname = $3;
- n->aggtype = (Node *) $5;
- $$ = (Node *)n;
- }
- | DROP AGGREGATE func_name aggr_argtype
- {
- /* Obsolete syntax, but must support for awhile */
- RemoveAggrStmt *n = makeNode(RemoveAggrStmt);
- n->aggname = $3;
- n->aggtype = (Node *) $4;
+ n->aggtype = $5;
$$ = (Node *)n;
}
;
@@ -3293,7 +3293,7 @@ DropdbStmt: DROP DATABASE database_name
*
*****************************************************************************/
-CreateDomainStmt: CREATE DOMAIN_P name opt_as Typename ColQualList opt_collate
+CreateDomainStmt: CREATE DOMAIN_P any_name opt_as Typename ColQualList opt_collate
{
CreateDomainStmt *n = makeNode(CreateDomainStmt);
n->domainname = $3;
@@ -4237,6 +4237,14 @@ opt_array_bounds: opt_array_bounds '[' ']'
{ $$ = NIL; }
;
+/*
+ * XXX ideally, the production for a qualified typename should be ColId attrs
+ * (there's no obvious reason why the first name should need to be restricted)
+ * and should be an alternative of GenericType (so that it can be used to
+ * specify a type for a literal in AExprConst). However doing either causes
+ * reduce/reduce conflicts that I haven't been able to find a workaround
+ * for. FIXME later.
+ */
SimpleTypename: ConstTypename
| ConstInterval opt_interval
{
@@ -4249,6 +4257,12 @@ SimpleTypename: ConstTypename
$$ = $1;
$$->typmod = ((($5 & 0x7FFF) << 16) | $3);
}
+ | type_name attrs
+ {
+ $$ = makeNode(TypeName);
+ $$->names = lcons(makeString($1), $2);
+ $$->typmod = -1;
+ }
;
ConstTypename: GenericType
@@ -4260,9 +4274,7 @@ ConstTypename: GenericType
GenericType: type_name
{
- $$ = makeNode(TypeName);
- $$->name = xlateSqlType($1);
- $$->typmod = -1;
+ $$ = makeTypeName(xlateSqlType($1));
}
;
@@ -4273,32 +4285,25 @@ GenericType: type_name
*/
Numeric: FLOAT opt_float
{
- $$ = makeNode(TypeName);
- $$->name = $2; /* already xlated */
- $$->typmod = -1;
+ $$ = makeTypeName($2); /* already xlated */
}
| DOUBLE PRECISION
{
- $$ = makeNode(TypeName);
- $$->name = xlateSqlType("float8");
- $$->typmod = -1;
+ $$ = makeTypeName(xlateSqlType("float8"));
}
| DECIMAL opt_decimal
{
- $$ = makeNode(TypeName);
- $$->name = xlateSqlType("decimal");
+ $$ = makeTypeName(xlateSqlType("decimal"));
$$->typmod = $2;
}
| DEC opt_decimal
{
- $$ = makeNode(TypeName);
- $$->name = xlateSqlType("decimal");
+ $$ = makeTypeName(xlateSqlType("decimal"));
$$->typmod = $2;
}
| NUMERIC opt_numeric
{
- $$ = makeNode(TypeName);
- $$->name = xlateSqlType("numeric");
+ $$ = makeTypeName(xlateSqlType("numeric"));
$$->typmod = $2;
}
;
@@ -4379,8 +4384,7 @@ opt_decimal: '(' Iconst ',' Iconst ')'
*/
Bit: bit '(' Iconst ')'
{
- $$ = makeNode(TypeName);
- $$->name = $1;
+ $$ = makeTypeName($1);
if ($3 < 1)
elog(ERROR,"length for type '%s' must be at least 1",
$1);
@@ -4391,8 +4395,7 @@ Bit: bit '(' Iconst ')'
}
| bit
{
- $$ = makeNode(TypeName);
- $$->name = $1;
+ $$ = makeTypeName($1);
/* bit defaults to bit(1), varbit to no limit */
if (strcmp($1, "bit") == 0)
$$->typmod = 1;
@@ -4418,8 +4421,19 @@ bit: BIT opt_varying
*/
Character: character '(' Iconst ')' opt_charset
{
- $$ = makeNode(TypeName);
- $$->name = $1;
+ if (($5 != NULL) && (strcmp($5, "sql_text") != 0))
+ {
+ char *type;
+
+ type = palloc(strlen($1) + 1 + strlen($5) + 1);
+ strcpy(type, $1);
+ strcat(type, "_");
+ strcat(type, $5);
+ $1 = xlateSqlType(type);
+ }
+
+ $$ = makeTypeName($1);
+
if ($3 < 1)
elog(ERROR,"length for type '%s' must be at least 1",
$1);
@@ -4433,36 +4447,27 @@ Character: character '(' Iconst ')' opt_charset
* truncate where necessary)
*/
$$->typmod = VARHDRSZ + $3;
-
- if (($5 != NULL) && (strcmp($5, "sql_text") != 0)) {
- char *type;
-
- type = palloc(strlen($$->name) + 1 + strlen($5) + 1);
- strcpy(type, $$->name);
- strcat(type, "_");
- strcat(type, $5);
- $$->name = xlateSqlType(type);
- };
}
| character opt_charset
{
- $$ = makeNode(TypeName);
- $$->name = $1;
+ if (($2 != NULL) && (strcmp($2, "sql_text") != 0))
+ {
+ char *type;
+
+ type = palloc(strlen($1) + 1 + strlen($2) + 1);
+ strcpy(type, $1);
+ strcat(type, "_");
+ strcat(type, $2);
+ $1 = xlateSqlType(type);
+ }
+
+ $$ = makeTypeName($1);
+
/* char defaults to char(1), varchar to no limit */
if (strcmp($1, "bpchar") == 0)
$$->typmod = VARHDRSZ + 1;
else
$$->typmod = -1;
-
- if (($2 != NULL) && (strcmp($2, "sql_text") != 0)) {
- char *type;
-
- type = palloc(strlen($$->name) + 1 + strlen($2) + 1);
- strcpy(type, $$->name);
- strcat(type, "_");
- strcat(type, $2);
- $$->name = xlateSqlType(type);
- };
}
;
@@ -4488,11 +4493,10 @@ opt_collate: COLLATE ColId { $$ = $2; }
ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone_x
{
- $$ = makeNode(TypeName);
if ($5)
- $$->name = xlateSqlType("timestamptz");
+ $$ = makeTypeName(xlateSqlType("timestamptz"));
else
- $$->name = xlateSqlType("timestamp");
+ $$ = makeTypeName(xlateSqlType("timestamp"));
/* XXX the timezone field seems to be unused
* - thomas 2001-09-06
*/
@@ -4504,11 +4508,10 @@ ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone_x
}
| TIMESTAMP opt_timezone_x
{
- $$ = makeNode(TypeName);
if ($2)
- $$->name = xlateSqlType("timestamptz");
+ $$ = makeTypeName(xlateSqlType("timestamptz"));
else
- $$->name = xlateSqlType("timestamp");
+ $$ = makeTypeName(xlateSqlType("timestamp"));
/* XXX the timezone field seems to be unused
* - thomas 2001-09-06
*/
@@ -4524,11 +4527,10 @@ ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone_x
}
| TIME '(' Iconst ')' opt_timezone
{
- $$ = makeNode(TypeName);
if ($5)
- $$->name = xlateSqlType("timetz");
+ $$ = makeTypeName(xlateSqlType("timetz"));
else
- $$->name = xlateSqlType("time");
+ $$ = makeTypeName(xlateSqlType("time"));
if (($3 < 0) || ($3 > 13))
elog(ERROR,"TIME(%d)%s precision must be between %d and %d",
$3, ($5 ? " WITH TIME ZONE": ""), 0, 13);
@@ -4536,11 +4538,10 @@ ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone_x
}
| TIME opt_timezone
{
- $$ = makeNode(TypeName);
if ($2)
- $$->name = xlateSqlType("timetz");
+ $$ = makeTypeName(xlateSqlType("timetz"));
else
- $$->name = xlateSqlType("time");
+ $$ = makeTypeName(xlateSqlType("time"));
/* SQL99 specified a default precision of zero.
* See comments for timestamp above on why we will
* leave this unspecified for now. - thomas 2001-12-07
@@ -4551,9 +4552,7 @@ ConstDatetime: TIMESTAMP '(' Iconst ')' opt_timezone_x
ConstInterval: INTERVAL
{
- $$ = makeNode(TypeName);
- $$->name = xlateSqlType("interval");
- $$->typmod = -1;
+ $$ = makeTypeName(xlateSqlType("interval"));
}
;
@@ -5161,7 +5160,7 @@ c_expr: columnref
| CURRENT_DATE opt_empty_parentheses
{
/*
- * Translate as "date('now'::text)".
+ * Translate as "'now'::text::date".
*
* We cannot use "'now'::date" because coerce_type() will
* immediately reduce that to a constant representing
@@ -5174,43 +5173,30 @@ c_expr: columnref
* of type-input conversion functions...
*/
A_Const *s = makeNode(A_Const);
- TypeName *t = makeNode(TypeName);
- TypeName *d = makeNode(TypeName);
+ TypeName *d;
s->val.type = T_String;
s->val.val.str = "now";
- s->typename = t;
+ s->typename = makeTypeName(xlateSqlType("text"));
- t->name = xlateSqlType("text");
- t->setof = FALSE;
- t->typmod = -1;
-
- d->name = xlateSqlType("date");
- d->setof = FALSE;
- d->typmod = -1;
+ d = makeTypeName(xlateSqlType("date"));
$$ = (Node *)makeTypeCast((Node *)s, d);
}
| CURRENT_TIME opt_empty_parentheses
{
/*
- * Translate as "timetz('now'::text)".
+ * Translate as "'now'::text::timetz".
* See comments for CURRENT_DATE.
*/
A_Const *s = makeNode(A_Const);
- TypeName *t = makeNode(TypeName);
- TypeName *d = makeNode(TypeName);
+ TypeName *d;
s->val.type = T_String;
s->val.val.str = "now";
- s->typename = t;
-
- t->name = xlateSqlType("text");
- t->setof = FALSE;
- t->typmod = -1;
+ s->typename = makeTypeName(xlateSqlType("text"));
- d->name = xlateSqlType("timetz");
- d->setof = FALSE;
+ d = makeTypeName(xlateSqlType("timetz"));
/* SQL99 mandates a default precision of zero for TIME
* fields in schemas. However, for CURRENT_TIME
* let's preserve the microsecond precision we
@@ -5223,23 +5209,17 @@ c_expr: columnref
| CURRENT_TIME '(' Iconst ')'
{
/*
- * Translate as "timetz('now'::text)".
+ * Translate as "'now'::text::timetz(n)".
* See comments for CURRENT_DATE.
*/
A_Const *s = makeNode(A_Const);
- TypeName *t = makeNode(TypeName);
- TypeName *d = makeNode(TypeName);
+ TypeName *d;
s->val.type = T_String;
s->val.val.str = "now";
- s->typename = t;
+ s->typename = makeTypeName(xlateSqlType("text"));
- t->name = xlateSqlType("text");
- t->setof = FALSE;
- t->typmod = -1;
-
- d->name = xlateSqlType("timetz");
- d->setof = FALSE;
+ d = makeTypeName(xlateSqlType("timetz"));
if (($3 < 0) || ($3 > 13))
elog(ERROR,"CURRENT_TIME(%d) precision must be between %d and %d",
$3, 0, 13);
@@ -5250,23 +5230,17 @@ c_expr: columnref
| CURRENT_TIMESTAMP opt_empty_parentheses
{
/*
- * Translate as "timestamptz('now'::text)".
+ * Translate as "'now'::text::timestamptz".
* See comments for CURRENT_DATE.
*/
A_Const *s = makeNode(A_Const);
- TypeName *t = makeNode(TypeName);
- TypeName *d = makeNode(TypeName);
+ TypeName *d;
s->val.type = T_String;
s->val.val.str = "now";
- s->typename = t;
-
- t->name = xlateSqlType("text");
- t->setof = FALSE;
- t->typmod = -1;
+ s->typename = makeTypeName(xlateSqlType("text"));
- d->name = xlateSqlType("timestamptz");
- d->setof = FALSE;
+ d = makeTypeName(xlateSqlType("timestamptz"));
/* SQL99 mandates a default precision of 6 for timestamp.
* Also, that is about as precise as we will get since
* we are using a microsecond time interface.
@@ -5279,23 +5253,17 @@ c_expr: columnref
| CURRENT_TIMESTAMP '(' Iconst ')'
{
/*
- * Translate as "timestamptz('now'::text)".
+ * Translate as "'now'::text::timestamptz(n)".
* See comments for CURRENT_DATE.
*/
A_Const *s = makeNode(A_Const);
- TypeName *t = makeNode(TypeName);
- TypeName *d = makeNode(TypeName);
+ TypeName *d;
s->val.type = T_String;
s->val.val.str = "now";
- s->typename = t;
-
- t->name = xlateSqlType("text");
- t->setof = FALSE;
- t->typmod = -1;
+ s->typename = makeTypeName(xlateSqlType("text"));
- d->name = xlateSqlType("timestamptz");
- d->setof = FALSE;
+ d = makeTypeName(xlateSqlType("timestamptz"));
if (($3 < 0) || ($3 > 13))
elog(ERROR,"CURRENT_TIMESTAMP(%d) precision must be between %d and %d",
$3, 0, 13);
@@ -5645,24 +5613,24 @@ columnref: relation_name opt_indirection
$$->fields = makeList1(makeString($1));
$$->indirection = $2;
}
- | relation_name attrs opt_indirection
+ | dotted_name opt_indirection
{
$$ = makeNode(ColumnRef);
- $$->fields = lcons(makeString($1), $2);
- $$->indirection = $3;
+ $$->fields = $1;
+ $$->indirection = $2;
}
;
-attrs: opt_attrs '.' attr_name
- { $$ = lappend($1, makeString($3)); }
- | opt_attrs '.' '*'
- { $$ = lappend($1, makeString("*")); }
+dotted_name: relation_name attrs
+ { $$ = lcons(makeString($1), $2); }
;
-opt_attrs: /*EMPTY*/
- { $$ = NIL; }
- | opt_attrs '.' attr_name
- { $$ = lappend($1, makeString($3)); }
+attrs: '.' attr_name
+ { $$ = makeList1(makeString($2)); }
+ | '.' '*'
+ { $$ = makeList1(makeString("*")); }
+ | '.' attr_name attrs
+ { $$ = lcons(makeString($2), $3); }
;
opt_empty_parentheses: '(' ')' { $$ = TRUE; }
@@ -5742,11 +5710,11 @@ relation_name: SpecialRuleRelation
$$ = $1;
}
;
-
+
qualified_name_list: qualified_name
- { $$ = makeList1($1); }
+ { $$ = makeList1($1); }
| qualified_name_list ',' qualified_name
- { $$ = lappend($1, $3); }
+ { $$ = lappend($1, $3); }
;
qualified_name: ColId
@@ -5787,6 +5755,21 @@ class: ColId { $$ = $1; };
index_name: ColId { $$ = $1; };
file_name: Sconst { $$ = $1; };
+/* func_name will soon return a List ... but not yet */
+/*
+func_name: function_name
+ { $$ = makeList1(makeString($1)); }
+ | dotted_name
+ { $$ = $1; }
+ ;
+*/
+func_name: function_name
+ { $$ = $1; }
+ | dotted_name
+ { $$ = strVal(lfirst($1)); }
+ ;
+
+
/* Constants
* Include TRUE/FALSE for SQL3 support. - thomas 1997-10-24
*/
@@ -5867,9 +5850,7 @@ AexprConst: Iconst
A_Const *n = makeNode(A_Const);
n->val.type = T_String;
n->val.val.str = "t";
- n->typename = makeNode(TypeName);
- n->typename->name = xlateSqlType("bool");
- n->typename->typmod = -1;
+ n->typename = makeTypeName(xlateSqlType("bool"));
$$ = (Node *)n;
}
| FALSE_P
@@ -5877,9 +5858,7 @@ AexprConst: Iconst
A_Const *n = makeNode(A_Const);
n->val.type = T_String;
n->val.val.str = "f";
- n->typename = makeNode(TypeName);
- n->typename->name = xlateSqlType("bool");
- n->typename->typmod = -1;
+ n->typename = makeTypeName(xlateSqlType("bool"));
$$ = (Node *)n;
}
| NULL_P
@@ -5920,7 +5899,7 @@ type_name: IDENT { $$ = $1; }
/* Function identifier --- names that can be function names.
*/
-func_name: IDENT { $$ = xlateSqlFunc($1); }
+function_name: IDENT { $$ = xlateSqlFunc($1); }
| unreserved_keyword { $$ = xlateSqlFunc($1); }
| func_name_keyword { $$ = xlateSqlFunc($1); }
;
@@ -6304,6 +6283,7 @@ static Node *
makeStringConst(char *str, TypeName *typename)
{
A_Const *n = makeNode(A_Const);
+
n->val.type = T_String;
n->val.val.str = str;
n->typename = typename;
@@ -6315,12 +6295,10 @@ static Node *
makeFloatConst(char *str)
{
A_Const *n = makeNode(A_Const);
- TypeName *t = makeNode(TypeName);
+
n->val.type = T_Float;
n->val.val.str = str;
- t->name = xlateSqlType("float");
- t->typmod = -1;
- n->typename = t;
+ n->typename = makeTypeName(xlateSqlType("float"));
return (Node *)n;
}
@@ -6435,7 +6413,6 @@ makeSetOp(SetOperation op, bool all, Node *larg, Node *rarg)
return (Node *) n;
}
-
/* xlateSqlFunc()
* Convert alternate function names to internal Postgres functions.
*