*
*
* IDENTIFICATION
- * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.177 2000/07/09 21:30:10 petere Exp $
+ * $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.178 2000/07/14 15:43:32 thomas Exp $
*
* HISTORY
* AUTHOR DATE MAJOR EVENT
}
%type <node> stmt,
- AlterTableStmt, ClosePortalStmt,
- CopyStmt, CreateStmt, CreateAsStmt, CreateSeqStmt, DefineStmt, DropStmt,
+ AlterSchemaStmt, AlterTableStmt, ClosePortalStmt,
+ CopyStmt, CreateStmt, CreateAsStmt, CreateSchemaStmt, CreateSeqStmt, DefineStmt, DropStmt,
TruncateStmt, CommentStmt,
ExtendStmt, FetchStmt, GrantStmt, CreateTrigStmt, DropTrigStmt,
CreatePLangStmt, DropPLangStmt,
IndexStmt, ListenStmt, UnlistenStmt, LockStmt, OptimizableStmt,
ProcedureStmt, ReindexStmt, RemoveAggrStmt, RemoveOperStmt,
RemoveFuncStmt, RemoveStmt,
- RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt,
+ RenameStmt, RevokeStmt, RuleStmt, SetSessionStmt, TransactionStmt, ViewStmt, LoadStmt,
CreatedbStmt, DropdbStmt, VacuumStmt, CursorStmt, SubSelect,
UpdateStmt, InsertStmt, select_clause, SelectStmt, NotifyStmt, DeleteStmt,
ClusterStmt, ExplainStmt, VariableSetStmt, VariableShowStmt, VariableResetStmt,
CreateUserStmt, AlterUserStmt, DropUserStmt, RuleActionStmt,
RuleActionStmtOrEmpty, ConstraintsSetStmt,
- CreateGroupStmt, AlterGroupStmt, DropGroupStmt
+ CreateGroupStmt, AlterGroupStmt, DropGroupStmt
+
+%type <list> SessionList
+%type <node> SessionClause
%type <node> alter_column_action
%type <ival> drop_behavior
%type <typnam> func_arg, func_return
-%type <boolean> TriggerForOpt, TriggerForType, OptTemp
+%type <boolean> opt_arg, TriggerForOpt, TriggerForType, OptTemp
%type <list> for_update_clause, update_list
%type <boolean> opt_all
%type <list> OptSeqList
%type <defelt> OptSeqElem
-/*
-%type <dstmt> def_rest
-*/
%type <astmt> insert_rest
%type <node> OptTableElement, ConstraintElem
%type <target> target_el, update_target_el
%type <paramno> ParamNo
-%type <typnam> Typename, opt_type, SimpleTypename,
- Generic, Numeric, Character, Datetime, Bit
+%type <typnam> Typename, opt_type, SimpleTypename, ConstTypename
+ Generic, Numeric, Character, ConstDatetime, ConstInterval, Bit
%type <str> typename, generic, numeric, character, datetime, bit
%type <str> extract_arg
%type <str> opt_charset, opt_collate
%type <ival> Iconst
%type <str> Sconst, comment_text
-%type <str> UserId, var_value, zone_value
+%type <str> UserId, opt_boolean, var_value, zone_value
%type <str> ColId, ColLabel, TokenId
%type <node> TableConstraint
OF, OLD, ON, ONLY, OPTION, OR, ORDER, OUTER_P, OVERLAPS,
PARTIAL, POSITION, PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE, PUBLIC,
READ, REFERENCES, RELATIVE, REVOKE, RIGHT, ROLLBACK,
- SCROLL, SECOND_P, SELECT, SESSION_USER, SET, SOME, SUBSTRING,
+ SCHEMA, SCROLL, SECOND_P, SELECT, SESSION, SESSION_USER, SET, SOME, SUBSTRING,
TABLE, TEMPORARY, THEN, TIME, TIMESTAMP, TIMEZONE_HOUR,
TIMEZONE_MINUTE, TO, TRAILING, TRANSACTION, TRIM, TRUE_P,
UNION, UNIQUE, UPDATE, USER, USING,
WHEN, WHERE, WITH, WORK, YEAR_P, ZONE
/* Keywords (in SQL3 reserved words) */
-%token DEFERRABLE, DEFERRED,
- IMMEDIATE, INITIALLY,
- PENDANT,
+%token CHARACTERISTICS,
+ DEFERRABLE, DEFERRED,
+ IMMEDIATE, INITIALLY, INOUT,
+ OFF, OUT,
+ PATH_P, PENDANT,
RESTRICT,
- TRIGGER,
+ TRIGGER,
UNDER,
- OFF
+ WITHOUT
/* Keywords (in SQL92 non-reserved words) */
%token COMMITTED, SERIALIZABLE, TYPE_P
}
;
-stmt : AlterTableStmt
+stmt : AlterSchemaStmt
+ | AlterTableStmt
| AlterGroupStmt
| AlterUserStmt
| ClosePortalStmt
| CopyStmt
| CreateStmt
| CreateAsStmt
+ | CreateSchemaStmt
| CreateGroupStmt
| CreateSeqStmt
| CreatePLangStmt
| RevokeStmt
| OptimizableStmt
| RuleStmt
+ | SetSessionStmt
| TransactionStmt
| ViewStmt
| LoadStmt
n->user = $3;
n->sysid = -1;
n->password = NULL;
- n->createdb = $4 == +1 ? true : false;
- n->createuser = $5 == +1 ? true : false;
+ n->createdb = $4 == +1 ? TRUE : FALSE;
+ n->createuser = $5 == +1 ? TRUE : FALSE;
n->groupElts = $6;
n->validUntil = $7;
$$ = (Node *)n;
n->user = $3;
n->sysid = $5;
n->password = $6;
- n->createdb = $7 == +1 ? true : false;
- n->createuser = $8 == +1 ? true : false;
+ n->createdb = $7 == +1 ? TRUE : FALSE;
+ n->createuser = $8 == +1 ? TRUE : FALSE;
n->groupElts = $9;
n->validUntil = $10;
$$ = (Node *)n;
;
+/*****************************************************************************
+ *
+ * Manipulate a schema
+ *
+ *
+ *****************************************************************************/
+
+CreateSchemaStmt: CREATE SCHEMA UserId
+ {
+ elog(ERROR, "CREATE SCHEMA not yet supported");
+ }
+ ;
+
+AlterSchemaStmt: ALTER SCHEMA UserId
+ {
+ elog(ERROR, "ALTER SCHEMA not yet supported");
+ }
+ ;
+
+
+/*****************************************************************************
+ *
+ * Manipulate a postgresql session
+ *
+ *
+ *****************************************************************************/
+
+SetSessionStmt: SET SESSION CHARACTERISTICS AS SessionList
+ {
+ SetSessionStmt *n = makeNode(SetSessionStmt);
+ n->args = $5;
+ $$ = (Node*)n;
+ }
+ ;
+
+SessionList: SessionList ',' SessionClause
+ {
+ $$ = lappend($1, $3);
+ }
+ | SessionClause
+ {
+ $$ = lcons($1, NIL);
+ }
+ ;
+
+SessionClause: TRANSACTION COMMIT opt_boolean
+ {
+ VariableSetStmt *n = makeNode(VariableSetStmt);
+ n->name = "autocommit";
+ n->value = $3;
+ $$ = (Node *) n;
+ }
+ | TIME ZONE zone_value
+ {
+ VariableSetStmt *n = makeNode(VariableSetStmt);
+ n->name = "timezone";
+ n->value = $3;
+ $$ = (Node *) n;
+ }
+ | TRANSACTION ISOLATION LEVEL opt_level
+ {
+ VariableSetStmt *n = makeNode(VariableSetStmt);
+ n->name = "DefaultXactIsoLevel";
+ n->value = $4;
+ $$ = (Node *) n;
+ }
+ ;
+
+
/*****************************************************************************
*
* Set PG internal variable
| SERIALIZABLE { $$ = "serializable"; }
;
-var_value: SCONST { $$ = $1; }
- | ICONST
- {
- char buf[64];
- sprintf(buf, "%d", $1);
- $$ = pstrdup(buf);
- }
- | '-' ICONST
- {
+var_value: opt_boolean { $$ = $1; }
+ | SCONST { $$ = $1; }
+ | ICONST
+ {
+ char buf[64];
+ sprintf(buf, "%d", $1);
+ $$ = pstrdup(buf);
+ }
+ | '-' ICONST
+ {
char buf[64];
sprintf(buf, "%d", -($2));
$$ = pstrdup(buf);
}
- | FCONST { $$ = $1; }
- | '-' FCONST
- {
+ | FCONST { $$ = $1; }
+ | '-' FCONST
+ {
char * s = palloc(strlen($2)+2);
s[0] = '-';
strcpy(s + 1, $2);
$$ = s;
}
- | TRUE_P { $$ = "true"; }
- | FALSE_P { $$ = "false"; }
- | ON { $$ = "on"; }
- | OFF { $$ = "off"; }
-
- | name_list
- {
+ | name_list
+ {
List *n;
int slen = 0;
char *result;
*(result+strlen(result)-1) = '\0';
$$ = result;
}
+ | DEFAULT { $$ = NULL; }
+ ;
- | DEFAULT { $$ = NULL; }
+opt_boolean: TRUE_P { $$ = "true"; }
+ | FALSE_P { $$ = "false"; }
+ | ON { $$ = "on"; }
+ | OFF { $$ = "off"; }
;
-zone_value: Sconst { $$ = $1; }
- | DEFAULT { $$ = NULL; }
- | LOCAL { $$ = NULL; }
+zone_value: Sconst { $$ = $1; }
+ | DEFAULT { $$ = NULL; }
+ | LOCAL { $$ = NULL; }
;
-opt_encoding: Sconst { $$ = $1; }
- | DEFAULT { $$ = NULL; }
- | /*EMPTY*/ { $$ = NULL; }
+opt_encoding: Sconst { $$ = $1; }
+ | DEFAULT { $$ = NULL; }
+ | /*EMPTY*/ { $$ = NULL; }
;
VariableShowStmt: SHOW ColId
constraints_set_mode: DEFERRED
{
- $$ = true;
+ $$ = TRUE;
}
| IMMEDIATE
{
- $$ = false;
+ $$ = FALSE;
}
;
n->pk_attrs = $3;
n->match_type = $4;
n->actions = $5;
- n->deferrable = false;
- n->initdeferred = false;
+ n->deferrable = FALSE;
+ n->initdeferred = FALSE;
$$ = (Node *)n;
}
;
n->attr = NULL; /* unused */
n->when = NULL; /* unused */
- n->isconstraint = false;
- n->deferrable = false;
- n->initdeferred = false;
+ n->isconstraint = FALSE;
+ n->deferrable = FALSE;
+ n->initdeferred = FALSE;
n->constrrelname = NULL;
$$ = (Node *)n;
}
n->relname = $8;
n->funcname = $16;
n->args = $18;
- n->before = false;
- n->row = true;
+ n->before = FALSE;
+ n->row = TRUE;
memcpy (n->actions, $6, 4);
n->lang = NULL; /* unused */
n->text = NULL; /* unused */
n->attr = NULL; /* unused */
n->when = NULL; /* unused */
- n->isconstraint = true;
+ n->isconstraint = TRUE;
n->deferrable = ($10 & 1) != 0;
n->initdeferred = ($10 & 2) != 0;
}
;
-/*
-def_rest: def_name definition
- {
- $$ = makeNode(DefineStmt);
- $$->defname = $1;
- $$->definition = $2;
- }
- ;
-*/
-
def_type: OPERATOR { $$ = OPERATOR; }
| TYPE_P { $$ = TYPE_P; }
| AGGREGATE { $$ = AGGREGATE; }
n->direction = $2;
n->howMany = $3;
n->portalname = $5;
- n->ismove = false;
+ n->ismove = FALSE;
$$ = (Node *)n;
}
| FETCH fetch_how_many from_in name
n->howMany = $2;
}
n->portalname = $4;
- n->ismove = false;
+ n->ismove = FALSE;
$$ = (Node *)n;
}
| FETCH direction from_in name
n->direction = $2;
n->howMany = 1;
n->portalname = $4;
- n->ismove = false;
+ n->ismove = FALSE;
$$ = (Node *)n;
}
| FETCH from_in name
n->direction = FORWARD;
n->howMany = 1;
n->portalname = $3;
- n->ismove = false;
+ n->ismove = FALSE;
$$ = (Node *)n;
}
| FETCH name
n->direction = FORWARD;
n->howMany = 1;
n->portalname = $2;
- n->ismove = false;
+ n->ismove = FALSE;
$$ = (Node *)n;
}
* which isn't meaningful in this context anyway.
* - thomas 2000-03-25
*/
-func_arg: SimpleTypename
+func_arg: opt_arg TokenId SimpleTypename
{
/* We can catch over-specified arguments here if we want to,
* but for now better to silently swallow typmod, etc.
* - thomas 2000-03-22
*/
+ $$ = $3;
+ }
+ | opt_arg SimpleTypename
+ {
+ $$ = $2;
+ }
+ | TokenId SimpleTypename
+ {
+ $$ = $2;
+ }
+ | SimpleTypename
+ {
$$ = $1;
}
;
+opt_arg: IN
+ {
+ $$ = FALSE;
+ }
+ | OUT
+ {
+ elog(ERROR, "CREATE FUNCTION/OUT parameters are not supported");
+ $$ = TRUE;
+ }
+ | INOUT
+ {
+ elog(ERROR, "CREATE FUNCTION/INOUT parameters are not supported");
+ $$ = FALSE;
+ }
+ ;
+
func_as: Sconst
{ $$ = lcons(makeString($1),NIL); }
| Sconst ',' Sconst
}
;
-reindex_type: INDEX { $$ = INDEX; }
- | TABLE { $$ = TABLE; }
- | DATABASE { $$ = DATABASE; }
+reindex_type: INDEX { $$ = INDEX; }
+ | TABLE { $$ = TABLE; }
+ | DATABASE { $$ = DATABASE; }
;
opt_force: FORCE { $$ = TRUE; }
| /* EMPTY */ { $$ = FALSE; }
Node *op = (Node *) $1;
List *select_list = NIL;
SelectStmt *first_select;
- bool intersect_present = false,
- unionall_present = false;
+ bool intersect_present = FALSE,
+ unionall_present = FALSE;
/* Take the operator tree as an argument and create a
* list of all SelectStmt Nodes found in the tree.
/* easy way to return two values. Can someone improve this? bjm */
result: INTO OptTempTableName { $$ = $2; }
- | /*EMPTY*/ { $$ = lcons(makeInteger(false), NIL); }
+ | /*EMPTY*/ { $$ = lcons(makeInteger(FALSE), NIL); }
;
/*
}
;
-SimpleTypename: Generic
+SimpleTypename: ConstTypename
+ | ConstInterval
+ ;
+
+ConstTypename: Generic
| Numeric
| Bit
| Character
- | Datetime
+ | ConstDatetime
;
typename: generic { $$ = $1; }
;
generic: IDENT { $$ = $1; }
+ | PATH_P { $$ = "path"; }
| TYPE_P { $$ = "type"; }
;
| /*EMPTY*/ { $$ = NULL; }
;
-Datetime: datetime
+ConstDatetime: datetime
{
$$ = makeNode(TypeName);
$$->name = xlateSqlType($1);
$$->name = xlateSqlType("time");
$$->typmod = -1;
}
- | INTERVAL opt_interval
+ ;
+
+ConstInterval: INTERVAL opt_interval
{
$$ = makeNode(TypeName);
$$->name = xlateSqlType("interval");
;
opt_timezone: WITH TIME ZONE { $$ = TRUE; }
+ | WITHOUT TIME ZONE { $$ = FALSE; }
| /*EMPTY*/ { $$ = FALSE; }
;
SubLink *n = makeNode(SubLink);
n->lefthand = $2;
n->oper = (List *) makeA_Expr(OP, "=", NULL, NULL);
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = ANY_SUBLINK;
n->subselect = $6;
$$ = (Node *)n;
SubLink *n = makeNode(SubLink);
n->lefthand = $2;
n->oper = (List *) makeA_Expr(OP, "<>", NULL, NULL);
- n->useor = true;
+ n->useor = TRUE;
n->subLinkType = ALL_SUBLINK;
n->subselect = $7;
$$ = (Node *)n;
n->lefthand = $2;
n->oper = (List *) makeA_Expr(OP, $4, NULL, NULL);
if (strcmp($4, "<>") == 0)
- n->useor = true;
+ n->useor = TRUE;
else
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = $5;
n->subselect = $7;
$$ = (Node *)n;
n->lefthand = $2;
n->oper = (List *) makeA_Expr(OP, $4, NULL, NULL);
if (strcmp($4, "<>") == 0)
- n->useor = true;
+ n->useor = TRUE;
else
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = MULTIEXPR_SUBLINK;
n->subselect = $6;
$$ = (Node *)n;
elog(ERROR, "Wrong number of parameters"
" on right side of OVERLAPS expression");
n->args = nconc(largs, rargs);
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
;
SubLink *n = (SubLink *)$4;
n->lefthand = lcons($1, NIL);
n->oper = (List *) makeA_Expr(OP, "=", NULL, NULL);
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = ANY_SUBLINK;
$$ = (Node *)n;
}
SubLink *n = (SubLink *)$5;
n->lefthand = lcons($1, NIL);
n->oper = (List *) makeA_Expr(OP, "<>", NULL, NULL);
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = ALL_SUBLINK;
$$ = (Node *)n;
}
SubLink *n = makeNode(SubLink);
n->lefthand = lcons($1, NIL);
n->oper = (List *) makeA_Expr(OP, $2, NULL, NULL);
- n->useor = false; /* doesn't matter since only one col */
+ n->useor = FALSE; /* doesn't matter since only one col */
n->subLinkType = $3;
n->subselect = $5;
$$ = (Node *)n;
FuncCall *n = makeNode(FuncCall);
n->funcname = $1;
n->args = NIL;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| func_name '(' expr_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = $1;
n->args = $3;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| func_name '(' ALL expr_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = $1;
n->args = $4;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
/* Ideally we'd mark the FuncCall node to indicate
* "must be an aggregate", but there's no provision
* for that in FuncCall at the moment.
FuncCall *n = makeNode(FuncCall);
n->funcname = $1;
n->args = $4;
- n->agg_star = false;
- n->agg_distinct = true;
+ n->agg_star = FALSE;
+ n->agg_distinct = TRUE;
$$ = (Node *)n;
}
| func_name '(' '*' ')'
star->val.val.ival = 1;
n->funcname = $1;
n->args = lcons(star, NIL);
- n->agg_star = true;
- n->agg_distinct = false;
+ n->agg_star = TRUE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| CURRENT_DATE
n->funcname = xlateSqlType("date");
n->args = lcons(s, NIL);
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
n->funcname = xlateSqlType("time");
n->args = lcons(s, NIL);
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
n->funcname = xlateSqlType("time");
n->args = lcons(s, NIL);
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
if ($3 != 0)
elog(NOTICE,"CURRENT_TIME(%d) precision not implemented"
n->funcname = xlateSqlType("timestamp");
n->args = lcons(s, NIL);
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
n->funcname = xlateSqlType("timestamp");
n->args = lcons(s, NIL);
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
if ($3 != 0)
elog(NOTICE,"CURRENT_TIMESTAMP(%d) precision not implemented"
FuncCall *n = makeNode(FuncCall);
n->funcname = "getpgusername";
n->args = NIL;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| SESSION_USER
FuncCall *n = makeNode(FuncCall);
n->funcname = "getpgusername";
n->args = NIL;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| USER
FuncCall *n = makeNode(FuncCall);
n->funcname = "getpgusername";
n->args = NIL;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| EXTRACT '(' extract_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = "date_part";
n->args = $3;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| POSITION '(' position_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = "strpos";
n->args = $3;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| SUBSTRING '(' substr_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = "substr";
n->args = $3;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
/* various trim expressions are defined in SQL92 - thomas 1997-07-19 */
FuncCall *n = makeNode(FuncCall);
n->funcname = "btrim";
n->args = $4;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| TRIM '(' LEADING trim_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = "ltrim";
n->args = $4;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| TRIM '(' TRAILING trim_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = "rtrim";
n->args = $4;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| TRIM '(' trim_list ')'
FuncCall *n = makeNode(FuncCall);
n->funcname = "btrim";
n->args = $3;
- n->agg_star = false;
- n->agg_distinct = false;
+ n->agg_star = FALSE;
+ n->agg_distinct = FALSE;
$$ = (Node *)n;
}
| '(' SubSelect ')'
SubLink *n = makeNode(SubLink);
n->lefthand = NIL;
n->oper = NIL;
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = EXPR_SUBLINK;
n->subselect = $2;
$$ = (Node *)n;
SubLink *n = makeNode(SubLink);
n->lefthand = NIL;
n->oper = NIL;
- n->useor = false;
+ n->useor = FALSE;
n->subLinkType = EXISTS_SUBLINK;
n->subselect = $3;
$$ = (Node *)n;
A_Const *n = makeNode(A_Const);
n->val.type = T_String;
n->val.val.str = $1;
- $$ = lappend(lcons((Node *)n,NIL), $3);
+ $$ = makeList((Node *)n, $3, -1);
}
| /*EMPTY*/
{ $$ = NIL; }
n->val.val.str = $1;
$$ = (Node *)n;
}
- /* this rule formerly used Typename, but that causes reduce conflicts
- * with subscripted column names ...
+ /* The SimpleTypename rule formerly used Typename,
+ * but that causes reduce conflicts with subscripted column names.
+ * Now, separate into ConstTypename and ConstInterval,
+ * to allow implementing the SQL92 syntax for INTERVAL literals.
+ * - thomas 2000-06-24
*/
- | SimpleTypename Sconst
+ | ConstTypename Sconst
+ {
+ A_Const *n = makeNode(A_Const);
+ n->typename = $1;
+ n->val.type = T_String;
+ n->val.val.str = $2;
+ $$ = (Node *)n;
+ }
+ | ConstInterval Sconst opt_interval
{
A_Const *n = makeNode(A_Const);
n->typename = $1;
| TokenId { $$ = $1; }
| datetime { $$ = $1; }
| INTERVAL { $$ = "interval"; }
+ | NATIONAL { $$ = "national"; }
| TIME { $$ = "time"; }
| TIMESTAMP { $$ = "timestamp"; }
| TYPE_P { $$ = "type"; }
| MINVALUE { $$ = "minvalue"; }
| MODE { $$ = "mode"; }
| NAMES { $$ = "names"; }
- | NATIONAL { $$ = "national"; }
| NEXT { $$ = "next"; }
| NO { $$ = "no"; }
| NOCREATEDB { $$ = "nocreatedb"; }
| ROLLBACK { $$ = "rollback"; }
| ROW { $$ = "row"; }
| RULE { $$ = "rule"; }
+ | SCHEMA { $$ = "schema"; }
| SCROLL { $$ = "scroll"; }
+ | SESSION { $$ = "session"; }
| SEQUENCE { $$ = "sequence"; }
| SERIAL { $$ = "serial"; }
| SERIALIZABLE { $$ = "serializable"; }
| VERSION { $$ = "version"; }
| VIEW { $$ = "view"; }
| WITH { $$ = "with"; }
+ | WITHOUT { $$ = "without"; }
| WORK { $$ = "work"; }
| ZONE { $$ = "zone"; }
;
| INNER_P { $$ = "inner"; }
| INTERSECT { $$ = "intersect"; }
| INTO { $$ = "into"; }
+ | INOUT { $$ = "inout"; }
| IS { $$ = "is"; }
| ISNULL { $$ = "isnull"; }
| JOIN { $$ = "join"; }
| ONLY { $$ = "only"; }
| OR { $$ = "or"; }
| ORDER { $$ = "order"; }
+ | OUT { $$ = "out"; }
| OUTER_P { $$ = "outer"; }
| OVERLAPS { $$ = "overlaps"; }
+ | PATH_P { $$ = "path"; }
| POSITION { $$ = "position"; }
| PRECISION { $$ = "precision"; }
| PRIMARY { $$ = "primary"; }
if (con->val.type == T_Null &&
con->typename == NULL)
- return true;
+ return TRUE;
}
- return false;
+ return FALSE;
}
/*