mirror of https://github.com/postgres/postgres
Wrap long gram.y lines.
This commit is contained in:
parent
71fd49e28d
commit
8080ac74d5
|
@ -11,7 +11,7 @@
|
|||
*
|
||||
*
|
||||
* IDENTIFICATION
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.329 2002/06/18 17:27:57 momjian Exp $
|
||||
* $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 2.330 2002/06/18 17:56:41 momjian Exp $
|
||||
*
|
||||
* HISTORY
|
||||
* AUTHOR DATE MAJOR EVENT
|
||||
|
@ -132,21 +132,26 @@ static void doNegateFloat(Value *v);
|
|||
}
|
||||
|
||||
%type <node> stmt, schema_stmt,
|
||||
AlterDatabaseSetStmt, AlterGroupStmt, AlterSchemaStmt, AlterTableStmt,
|
||||
AlterUserStmt, AlterUserSetStmt, AnalyzeStmt,
|
||||
ClosePortalStmt, ClusterStmt, CommentStmt, ConstraintsSetStmt,
|
||||
CopyStmt, CreateAsStmt, CreateDomainStmt, CreateGroupStmt, CreatePLangStmt,
|
||||
CreateSchemaStmt, CreateSeqStmt, CreateStmt, CreateAssertStmt, CreateTrigStmt,
|
||||
CreateUserStmt, CreatedbStmt, CursorStmt, DefineStmt, DeleteStmt,
|
||||
DropGroupStmt, DropPLangStmt, DropSchemaStmt, DropStmt, DropAssertStmt, DropTrigStmt,
|
||||
DropRuleStmt, DropUserStmt, DropdbStmt, ExplainStmt, FetchStmt,
|
||||
GrantStmt, IndexStmt, InsertStmt, ListenStmt, LoadStmt, LockStmt,
|
||||
NotifyStmt, OptimizableStmt, CreateFunctionStmt, ReindexStmt,
|
||||
RemoveAggrStmt, RemoveFuncStmt, RemoveOperStmt,
|
||||
RenameStmt, RevokeStmt, RuleActionStmt, RuleActionStmtOrEmpty,
|
||||
RuleStmt, SelectStmt, TransactionStmt, TruncateStmt,
|
||||
UnlistenStmt, UpdateStmt, VacuumStmt, VariableResetStmt,
|
||||
VariableSetStmt, VariableShowStmt, ViewStmt, CheckPointStmt
|
||||
AlterDatabaseSetStmt, AlterGroupStmt, AlterSchemaStmt,
|
||||
AlterTableStmt, AlterUserStmt, AlterUserSetStmt,
|
||||
AnalyzeStmt, ClosePortalStmt, ClusterStmt, CommentStmt,
|
||||
ConstraintsSetStmt, CopyStmt, CreateAsStmt,
|
||||
CreateDomainStmt, CreateGroupStmt, CreatePLangStmt,
|
||||
CreateSchemaStmt, CreateSeqStmt, CreateStmt,
|
||||
CreateAssertStmt, CreateTrigStmt, CreateUserStmt,
|
||||
CreatedbStmt, CursorStmt, DefineStmt, DeleteStmt,
|
||||
DropGroupStmt, DropPLangStmt, DropSchemaStmt, DropStmt,
|
||||
DropAssertStmt, DropTrigStmt, DropRuleStmt,
|
||||
DropUserStmt, DropdbStmt, ExplainStmt, FetchStmt,
|
||||
GrantStmt, IndexStmt, InsertStmt, ListenStmt, LoadStmt,
|
||||
LockStmt, NotifyStmt, OptimizableStmt,
|
||||
CreateFunctionStmt, ReindexStmt, RemoveAggrStmt,
|
||||
RemoveFuncStmt, RemoveOperStmt, RenameStmt, RevokeStmt,
|
||||
RuleActionStmt, RuleActionStmtOrEmpty, RuleStmt,
|
||||
SelectStmt, TransactionStmt, TruncateStmt,
|
||||
UnlistenStmt, UpdateStmt, VacuumStmt,
|
||||
VariableResetStmt, VariableSetStmt, VariableShowStmt,
|
||||
ViewStmt, CheckPointStmt
|
||||
|
||||
%type <node> select_no_parens, select_with_parens, select_clause,
|
||||
simple_select
|
||||
|
@ -316,69 +321,82 @@ static void doNegateFloat(Value *v);
|
|||
|
||||
/* ordinary key words in alphabetical order */
|
||||
%token <keyword> ABORT_TRANS, ABSOLUTE, ACCESS, ACTION, ADD, AFTER,
|
||||
AGGREGATE, ALL, ALTER, ANALYSE, ANALYZE, AND, ANY, AS, ASC, ASSERTION,
|
||||
AT, AUTHORIZATION,
|
||||
AGGREGATE, ALL, ALTER, ANALYSE, ANALYZE, AND, ANY, AS, ASC,
|
||||
ASSERTION, AT, AUTHORIZATION,
|
||||
|
||||
BACKWARD, BEFORE, BEGIN_TRANS, BETWEEN, BIGINT, BINARY, BIT, BOTH,
|
||||
BOOLEAN, BY,
|
||||
|
||||
CACHE, CALLED, CASCADE, CASE, CAST, CHAIN, CHAR_P, CHARACTER,
|
||||
CHARACTERISTICS, CHECK, CHECKPOINT, CLOSE, CLUSTER, COALESCE, COLLATE,
|
||||
COLUMN, COMMENT, COMMIT, COMMITTED, CONSTRAINT, CONSTRAINTS, COPY,
|
||||
CREATE, CREATEDB, CREATEUSER, CROSS, CURRENT_DATE, CURRENT_TIME,
|
||||
CACHE, CALLED, CASCADE, CASE, CAST, CHAIN, CHAR_P,
|
||||
CHARACTER, CHARACTERISTICS, CHECK, CHECKPOINT, CLOSE,
|
||||
CLUSTER, COALESCE, COLLATE, COLUMN, COMMENT, COMMIT,
|
||||
COMMITTED, CONSTRAINT, CONSTRAINTS, COPY, CREATE, CREATEDB,
|
||||
CREATEUSER, CROSS, CURRENT_DATE, CURRENT_TIME,
|
||||
CURRENT_TIMESTAMP, CURRENT_USER, CURSOR, CYCLE,
|
||||
|
||||
DATABASE, DAY_P, DEC, DECIMAL, DECLARE, DEFAULT, DEFERRABLE, DEFERRED,
|
||||
DEFINER, DELETE_P, DELIMITERS, DESC, DISTINCT, DO, DOMAIN_P, DOUBLE, DROP,
|
||||
DATABASE, DAY_P, DEC, DECIMAL, DECLARE, DEFAULT,
|
||||
DEFERRABLE, DEFERRED, DEFINER, DELETE_P, DELIMITERS, DESC,
|
||||
DISTINCT, DO, DOMAIN_P, DOUBLE, DROP,
|
||||
|
||||
EACH, ELSE, ENCODING, ENCRYPTED, END_TRANS, ESCAPE, EXCEPT, EXCLUSIVE,
|
||||
EXECUTE, EXISTS, EXPLAIN, EXTERNAL, EXTRACT,
|
||||
EACH, ELSE, ENCODING, ENCRYPTED, END_TRANS, ESCAPE, EXCEPT,
|
||||
EXCLUSIVE, EXECUTE, EXISTS, EXPLAIN, EXTERNAL, EXTRACT,
|
||||
|
||||
FALSE_P, FETCH, FLOAT_P, FOR, FORCE, FOREIGN, FORWARD, FREEZE, FROM,
|
||||
FULL, FUNCTION,
|
||||
FALSE_P, FETCH, FLOAT_P, FOR, FORCE, FOREIGN, FORWARD,
|
||||
FREEZE, FROM, FULL, FUNCTION,
|
||||
|
||||
GET, GLOBAL, GRANT, GROUP_P,
|
||||
|
||||
HANDLER, HAVING, HOUR_P,
|
||||
|
||||
ILIKE, IMMEDIATE, IMMUTABLE, IMPLICIT, IN_P, INCREMENT, INDEX, INHERITS,
|
||||
INITIALLY, INNER_P, INOUT, INPUT, INSENSITIVE, INSERT, INSTEAD, INT,
|
||||
INTEGER, INTERSECT, INTERVAL, INTO, INVOKER, IS, ISNULL, ISOLATION,
|
||||
ILIKE, IMMEDIATE, IMMUTABLE, IMPLICIT, IN_P, INCREMENT,
|
||||
INDEX, INHERITS, INITIALLY, INNER_P, INOUT, INPUT,
|
||||
INSENSITIVE, INSERT, INSTEAD, INT, INTEGER, INTERSECT,
|
||||
INTERVAL, INTO, INVOKER, IS, ISNULL, ISOLATION,
|
||||
|
||||
JOIN,
|
||||
KEY,
|
||||
|
||||
LANCOMPILER, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LIMIT, LISTEN,
|
||||
LOAD, LOCAL, LOCALTIME, LOCALTIMESTAMP, LOCATION, LOCK_P,
|
||||
LANCOMPILER, LANGUAGE, LEADING, LEFT, LEVEL, LIKE, LIMIT,
|
||||
LISTEN, LOAD, LOCAL, LOCALTIME, LOCALTIMESTAMP, LOCATION,
|
||||
LOCK_P,
|
||||
|
||||
MATCH, MAXVALUE, MINUTE_P, MINVALUE, MODE, MONTH_P, MOVE,
|
||||
|
||||
NAMES, NATIONAL, NATURAL, NCHAR, NEW, NEXT, NO, NOCREATEDB,
|
||||
NOCREATEUSER, NONE, NOT, NOTHING, NOTIFY, NOTNULL, NULL_P, NULLIF,
|
||||
NUMERIC,
|
||||
NOCREATEUSER, NONE, NOT, NOTHING, NOTIFY, NOTNULL, NULL_P,
|
||||
NULLIF, NUMERIC,
|
||||
|
||||
OF, OFF, OFFSET, OIDS, OLD, ON, ONLY, OPERATOR, OPTION, OR, ORDER,
|
||||
OUT_P, OUTER_P, OVERLAPS, OVERLAY, OWNER,
|
||||
OF, OFF, OFFSET, OIDS, OLD, ON, ONLY, OPERATOR, OPTION, OR,
|
||||
ORDER, OUT_P, OUTER_P, OVERLAPS, OVERLAY, OWNER,
|
||||
|
||||
PARTIAL, PASSWORD, PATH_P, PENDANT, PLACING, POSITION, PRECISION, PRIMARY,
|
||||
PRIOR, PRIVILEGES, PROCEDURE, PROCEDURAL,
|
||||
PARTIAL, PASSWORD, PATH_P, PENDANT, PLACING, POSITION,
|
||||
PRECISION, PRIMARY, PRIOR, PRIVILEGES, PROCEDURE,
|
||||
PROCEDURAL,
|
||||
|
||||
READ, REAL, REFERENCES, REINDEX, RELATIVE, RENAME, REPLACE, RESET,
|
||||
RESTRICT, RETURNS, REVOKE, RIGHT, ROLLBACK, ROW, RULE,
|
||||
READ, REAL, REFERENCES, REINDEX, RELATIVE, RENAME, REPLACE,
|
||||
RESET, RESTRICT, RETURNS, REVOKE, RIGHT, ROLLBACK, ROW,
|
||||
RULE,
|
||||
|
||||
SCHEMA, SCROLL, SECOND_P, SECURITY, SELECT, SEQUENCE, SERIALIZABLE,
|
||||
SESSION, SESSION_USER, SET, SETOF, SHARE, SHOW, SIMILAR, SMALLINT, SOME,
|
||||
STABLE, START, STATEMENT, STATISTICS, STDIN, STDOUT, STORAGE, STRICT,
|
||||
SUBSTRING, SYSID,
|
||||
SCHEMA, SCROLL, SECOND_P, SECURITY, SELECT, SEQUENCE,
|
||||
SERIALIZABLE, SESSION, SESSION_USER, SET, SETOF, SHARE,
|
||||
SHOW, SIMILAR, SMALLINT, SOME, STABLE, START, STATEMENT,
|
||||
STATISTICS, STDIN, STDOUT, STORAGE, STRICT, SUBSTRING,
|
||||
SYSID,
|
||||
|
||||
TABLE, TEMP, TEMPLATE, TEMPORARY, THEN, TIME, TIMESTAMP, TO, TOAST,
|
||||
TRAILING, TRANSACTION, TRIGGER, TRIM, TRUE_P, TRUNCATE, TRUSTED, TYPE_P,
|
||||
TABLE, TEMP, TEMPLATE, TEMPORARY, THEN, TIME, TIMESTAMP,
|
||||
TO, TOAST, TRAILING, TRANSACTION, TRIGGER, TRIM, TRUE_P,
|
||||
TRUNCATE, TRUSTED, TYPE_P,
|
||||
|
||||
UNENCRYPTED, UNION, UNIQUE, UNKNOWN, UNLISTEN, UNTIL, UPDATE, USAGE,
|
||||
USER, USING,
|
||||
UNENCRYPTED, UNION, UNIQUE, UNKNOWN, UNLISTEN, UNTIL,
|
||||
UPDATE, USAGE, USER, USING,
|
||||
|
||||
VACUUM, VALID, VALIDATOR, VALUES, VARCHAR, VARYING,
|
||||
VERBOSE, VERSION, VIEW, VOLATILE,
|
||||
|
||||
VACUUM, VALID, VALIDATOR, VALUES, VARCHAR, VARYING, VERBOSE, VERSION, VIEW, VOLATILE,
|
||||
WHEN, WHERE, WITH, WITHOUT, WORK,
|
||||
|
||||
YEAR_P,
|
||||
|
||||
ZONE
|
||||
|
||||
/* The grammar thinks these are keywords, but they are not in the keywords.c
|
||||
|
@ -412,7 +430,7 @@ static void doNegateFloat(Value *v);
|
|||
%left Op OPERATOR /* multi-character ops and user-defined operators */
|
||||
%nonassoc NOTNULL
|
||||
%nonassoc ISNULL
|
||||
%nonassoc IS NULL_P TRUE_P FALSE_P UNKNOWN /* sets precedence for IS NULL, etc */
|
||||
%nonassoc IS NULL_P TRUE_P FALSE_P UNKNOWN /* sets precedence for IS NULL, etc */
|
||||
%left '+' '-'
|
||||
%left '*' '/' '%'
|
||||
%left '^'
|
||||
|
@ -758,7 +776,7 @@ CreateSchemaStmt:
|
|||
CREATE SCHEMA OptSchemaName AUTHORIZATION UserId OptSchemaEltList
|
||||
{
|
||||
CreateSchemaStmt *n = makeNode(CreateSchemaStmt);
|
||||
/* One can omit the schema name or the authorization id... */
|
||||
/* One can omit the schema name or the authorization id. */
|
||||
if ($3 != NULL)
|
||||
n->schemaname = $3;
|
||||
else
|
||||
|
@ -955,7 +973,7 @@ zone_value:
|
|||
{
|
||||
if (($3 & ~(MASK(HOUR) | MASK(MINUTE))) != 0)
|
||||
elog(ERROR,
|
||||
"Time zone interval must be HOUR or HOUR TO MINUTE");
|
||||
"Time zone interval must be HOUR or HOUR TO MINUTE");
|
||||
n->typename->typmod = ((($3 & 0x7FFF) << 16) | 0xFFFF);
|
||||
}
|
||||
$$ = (Node *)n;
|
||||
|
@ -971,7 +989,7 @@ zone_value:
|
|||
{
|
||||
if (($6 & ~(MASK(HOUR) | MASK(MINUTE))) != 0)
|
||||
elog(ERROR,
|
||||
"Time zone interval must be HOUR or HOUR TO MINUTE");
|
||||
"Time zone interval must be HOUR or HOUR TO MINUTE");
|
||||
n->typename->typmod = ((($6 & 0x7FFF) << 16) | $3);
|
||||
}
|
||||
else
|
||||
|
@ -1114,8 +1132,11 @@ AlterTableStmt:
|
|||
n->def = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId alter_column_default
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname>
|
||||
* {SET DEFAULT <expr>|DROP DEFAULT}
|
||||
*/
|
||||
| ALTER TABLE relation_expr ALTER opt_column
|
||||
ColId alter_column_default
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
n->subtype = 'T';
|
||||
|
@ -1124,8 +1145,11 @@ AlterTableStmt:
|
|||
n->def = $7;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId DROP NOT NULL_P
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname>
|
||||
* DROP NOT NULL
|
||||
*/
|
||||
| ALTER TABLE relation_expr ALTER opt_column
|
||||
ColId DROP NOT NULL_P
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
n->subtype = 'N';
|
||||
|
@ -1133,8 +1157,11 @@ AlterTableStmt:
|
|||
n->name = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId SET NOT NULL_P
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname>
|
||||
* SET NOT NULL
|
||||
*/
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId
|
||||
SET NOT NULL_P
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
n->subtype = 'O';
|
||||
|
@ -1142,8 +1169,11 @@ AlterTableStmt:
|
|||
n->name = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <Iconst> */
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId SET STATISTICS Iconst
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname>
|
||||
* SET STATISTICS <Iconst>
|
||||
*/
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId
|
||||
SET STATISTICS Iconst
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
n->subtype = 'S';
|
||||
|
@ -1152,8 +1182,11 @@ AlterTableStmt:
|
|||
n->def = (Node *) makeInteger($9);
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId SET STORAGE ColId
|
||||
/* ALTER TABLE <relation> ALTER [COLUMN] <colname>
|
||||
* SET STORAGE <storagemode>
|
||||
*/
|
||||
| ALTER TABLE relation_expr ALTER opt_column ColId
|
||||
SET STORAGE ColId
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
n->subtype = 'M';
|
||||
|
@ -1162,7 +1195,9 @@ AlterTableStmt:
|
|||
n->def = (Node *) makeString($9);
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> DROP [COLUMN] <colname> {RESTRICT|CASCADE} */
|
||||
/* ALTER TABLE <relation> DROP [COLUMN] <colname>
|
||||
* {RESTRICT|CASCADE}
|
||||
*/
|
||||
| ALTER TABLE relation_expr DROP opt_column ColId drop_behavior
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
|
@ -1181,7 +1216,9 @@ AlterTableStmt:
|
|||
n->def = $5;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
/* ALTER TABLE <relation> DROP CONSTRAINT <name> {RESTRICT|CASCADE} */
|
||||
/* ALTER TABLE <relation> DROP CONSTRAINT <name>
|
||||
* {RESTRICT|CASCADE}
|
||||
*/
|
||||
| ALTER TABLE relation_expr DROP CONSTRAINT name drop_behavior
|
||||
{
|
||||
AlterTableStmt *n = makeNode(AlterTableStmt);
|
||||
|
@ -1327,7 +1364,8 @@ copy_null: WITH NULL_P AS Sconst { $$ = $4; }
|
|||
*
|
||||
*****************************************************************************/
|
||||
|
||||
CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')' OptInherit OptWithOids
|
||||
CreateStmt: CREATE OptTemp TABLE qualified_name '(' OptTableElementList ')'
|
||||
OptInherit OptWithOids
|
||||
{
|
||||
CreateStmt *n = makeNode(CreateStmt);
|
||||
$4->istemp = $2;
|
||||
|
@ -1350,12 +1388,14 @@ OptTemp: TEMPORARY { $$ = TRUE; }
|
|||
| LOCAL TEMP { $$ = TRUE; }
|
||||
| GLOBAL TEMPORARY
|
||||
{
|
||||
elog(ERROR, "GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
elog(ERROR,
|
||||
"GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
$$ = TRUE;
|
||||
}
|
||||
| GLOBAL TEMP
|
||||
{
|
||||
elog(ERROR, "GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
elog(ERROR,
|
||||
"GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
$$ = TRUE;
|
||||
}
|
||||
| /*EMPTY*/ { $$ = FALSE; }
|
||||
|
@ -1392,8 +1432,9 @@ columnDef: ColId Typename ColQualList opt_collate
|
|||
n->constraints = $3;
|
||||
|
||||
if ($4 != NULL)
|
||||
elog(NOTICE, "CREATE TABLE / COLLATE %s not yet implemented"
|
||||
"; clause ignored", $4);
|
||||
elog(NOTICE,
|
||||
"CREATE TABLE / COLLATE %s not yet implemented; "
|
||||
"clause ignored", $4);
|
||||
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
|
@ -1627,7 +1668,8 @@ ConstraintElem:
|
|||
n->keys = $4;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list
|
||||
| FOREIGN KEY '(' columnList ')' REFERENCES qualified_name
|
||||
opt_column_list
|
||||
key_match key_actions ConstraintAttributeSpec
|
||||
{
|
||||
FkConstraint *n = makeNode(FkConstraint);
|
||||
|
@ -1681,18 +1723,20 @@ key_actions:
|
|||
| /*EMPTY*/ { $$ = 0; }
|
||||
;
|
||||
|
||||
key_delete: ON DELETE_P key_reference { $$ = $3 << FKCONSTR_ON_DELETE_SHIFT; }
|
||||
key_delete: ON DELETE_P key_reference
|
||||
{ $$ = $3 << FKCONSTR_ON_DELETE_SHIFT; }
|
||||
;
|
||||
|
||||
key_update: ON UPDATE key_reference { $$ = $3 << FKCONSTR_ON_UPDATE_SHIFT; }
|
||||
key_update: ON UPDATE key_reference
|
||||
{ $$ = $3 << FKCONSTR_ON_UPDATE_SHIFT; }
|
||||
;
|
||||
|
||||
key_reference:
|
||||
NO ACTION { $$ = FKCONSTR_ON_KEY_NOACTION; }
|
||||
| RESTRICT { $$ = FKCONSTR_ON_KEY_RESTRICT; }
|
||||
| CASCADE { $$ = FKCONSTR_ON_KEY_CASCADE; }
|
||||
| SET NULL_P { $$ = FKCONSTR_ON_KEY_SETNULL; }
|
||||
| SET DEFAULT { $$ = FKCONSTR_ON_KEY_SETDEFAULT; }
|
||||
NO ACTION { $$ = FKCONSTR_ON_KEY_NOACTION; }
|
||||
| RESTRICT { $$ = FKCONSTR_ON_KEY_RESTRICT; }
|
||||
| CASCADE { $$ = FKCONSTR_ON_KEY_CASCADE; }
|
||||
| SET NULL_P { $$ = FKCONSTR_ON_KEY_SETNULL; }
|
||||
| SET DEFAULT { $$ = FKCONSTR_ON_KEY_SETDEFAULT; }
|
||||
;
|
||||
|
||||
OptInherit: INHERITS '(' qualified_name_list ')' { $$ = $3; }
|
||||
|
@ -1873,7 +1917,8 @@ opt_trusted:
|
|||
* Work around by using name and dotted_name separately.
|
||||
*/
|
||||
handler_name:
|
||||
name { $$ = makeList1(makeString($1)); }
|
||||
name
|
||||
{ $$ = makeList1(makeString($1)); }
|
||||
| dotted_name { $$ = $1; }
|
||||
;
|
||||
|
||||
|
@ -2038,7 +2083,8 @@ ConstraintAttributeSpec:
|
|||
| ConstraintDeferrabilitySpec ConstraintTimeSpec
|
||||
{
|
||||
if ($1 == 0 && $2 != 0)
|
||||
elog(ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");
|
||||
elog(ERROR,
|
||||
"INITIALLY DEFERRED constraint must be DEFERRABLE");
|
||||
$$ = $1 | $2;
|
||||
}
|
||||
| ConstraintTimeSpec
|
||||
|
@ -2051,7 +2097,8 @@ ConstraintAttributeSpec:
|
|||
| ConstraintTimeSpec ConstraintDeferrabilitySpec
|
||||
{
|
||||
if ($2 == 0 && $1 != 0)
|
||||
elog(ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");
|
||||
elog(ERROR,
|
||||
"INITIALLY DEFERRED constraint must be DEFERRABLE");
|
||||
$$ = $1 | $2;
|
||||
}
|
||||
| /*EMPTY*/
|
||||
|
@ -2090,7 +2137,8 @@ DropTrigStmt:
|
|||
*****************************************************************************/
|
||||
|
||||
CreateAssertStmt:
|
||||
CREATE ASSERTION name CHECK '(' a_expr ')' ConstraintAttributeSpec
|
||||
CREATE ASSERTION name CHECK '(' a_expr ')'
|
||||
ConstraintAttributeSpec
|
||||
{
|
||||
CreateTrigStmt *n = makeNode(CreateTrigStmt);
|
||||
n->trigname = $3;
|
||||
|
@ -2182,10 +2230,10 @@ def_elem: ColLabel '=' def_arg
|
|||
;
|
||||
|
||||
/* Note: any simple identifier will be returned as a type name! */
|
||||
def_arg: func_return { $$ = (Node *)$1; }
|
||||
| all_Op { $$ = (Node *)makeString($1); }
|
||||
| NumericOnly { $$ = (Node *)$1; }
|
||||
| Sconst { $$ = (Node *)makeString($1); }
|
||||
def_arg: func_return { $$ = (Node *)$1; }
|
||||
| all_Op { $$ = (Node *)makeString($1); }
|
||||
| NumericOnly { $$ = (Node *)$1; }
|
||||
| Sconst { $$ = (Node *)makeString($1); }
|
||||
;
|
||||
|
||||
|
||||
|
@ -2220,8 +2268,8 @@ any_name_list:
|
|||
| any_name_list ',' any_name { $$ = lappend($1, $3); }
|
||||
;
|
||||
|
||||
any_name: ColId { $$ = makeList1(makeString($1)); }
|
||||
| dotted_name { $$ = $1; }
|
||||
any_name: ColId { $$ = makeList1(makeString($1)); }
|
||||
| dotted_name { $$ = $1; }
|
||||
;
|
||||
|
||||
/*****************************************************************************
|
||||
|
@ -2263,7 +2311,8 @@ CommentStmt:
|
|||
n->comment = $6;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| COMMENT ON AGGREGATE func_name '(' aggr_argtype ')' IS comment_text
|
||||
| COMMENT ON AGGREGATE func_name '(' aggr_argtype ')'
|
||||
IS comment_text
|
||||
{
|
||||
CommentStmt *n = makeNode(CommentStmt);
|
||||
n->objtype = AGGREGATE;
|
||||
|
@ -2281,7 +2330,8 @@ CommentStmt:
|
|||
n->comment = $7;
|
||||
$$ = (Node *) n;
|
||||
}
|
||||
| COMMENT ON OPERATOR any_operator '(' oper_argtypes ')' IS comment_text
|
||||
| COMMENT ON OPERATOR any_operator '(' oper_argtypes ')'
|
||||
IS comment_text
|
||||
{
|
||||
CommentStmt *n = makeNode(CommentStmt);
|
||||
n->objtype = OPERATOR;
|
||||
|
@ -2352,7 +2402,8 @@ FetchStmt: FETCH direction fetch_how_many from_in name
|
|||
if ($2 == RELATIVE)
|
||||
{
|
||||
if ($3 == 0)
|
||||
elog(ERROR,"FETCH / RELATIVE at current position is not supported");
|
||||
elog(ERROR,
|
||||
"FETCH / RELATIVE at current position is not supported");
|
||||
$2 = FORWARD;
|
||||
}
|
||||
if ($3 < 0)
|
||||
|
@ -2479,7 +2530,8 @@ direction: FORWARD { $$ = FORWARD; }
|
|||
| RELATIVE { $$ = RELATIVE; }
|
||||
| ABSOLUTE
|
||||
{
|
||||
elog(NOTICE,"FETCH / ABSOLUTE not supported, using RELATIVE");
|
||||
elog(NOTICE,
|
||||
"FETCH / ABSOLUTE not supported, using RELATIVE");
|
||||
$$ = RELATIVE;
|
||||
}
|
||||
;
|
||||
|
@ -2487,7 +2539,8 @@ direction: FORWARD { $$ = FORWARD; }
|
|||
fetch_how_many:
|
||||
Iconst { $$ = $1; }
|
||||
| '-' Iconst { $$ = - $2; }
|
||||
| ALL { $$ = 0; /* 0 means fetch all tuples*/ }
|
||||
/* 0 means fetch all tuples*/
|
||||
| ALL { $$ = 0; }
|
||||
| NEXT { $$ = 1; }
|
||||
| PRIOR { $$ = -1; }
|
||||
;
|
||||
|
@ -2503,7 +2556,8 @@ from_in: IN_P {}
|
|||
*
|
||||
*****************************************************************************/
|
||||
|
||||
GrantStmt: GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_option
|
||||
GrantStmt: GRANT privileges ON privilege_target TO grantee_list
|
||||
opt_grant_grant_option
|
||||
{
|
||||
GrantStmt *n = makeNode(GrantStmt);
|
||||
n->is_grant = true;
|
||||
|
@ -2515,7 +2569,8 @@ GrantStmt: GRANT privileges ON privilege_target TO grantee_list opt_grant_grant_
|
|||
}
|
||||
;
|
||||
|
||||
RevokeStmt: REVOKE opt_revoke_grant_option privileges ON privilege_target FROM grantee_list
|
||||
RevokeStmt: REVOKE opt_revoke_grant_option privileges ON privilege_target
|
||||
FROM grantee_list
|
||||
{
|
||||
GrantStmt *n = makeNode(GrantStmt);
|
||||
n->is_grant = false;
|
||||
|
@ -2529,9 +2584,9 @@ RevokeStmt: REVOKE opt_revoke_grant_option privileges ON privilege_target FROM g
|
|||
|
||||
|
||||
/* either ALL [PRIVILEGES] or a list of individual privileges */
|
||||
privileges: privilege_list { $$ = $1; }
|
||||
| ALL { $$ = makeListi1(ACL_ALL_RIGHTS); }
|
||||
| ALL PRIVILEGES { $$ = makeListi1(ACL_ALL_RIGHTS); }
|
||||
privileges: privilege_list { $$ = $1; }
|
||||
| ALL { $$ = makeListi1(ACL_ALL_RIGHTS); }
|
||||
| ALL PRIVILEGES { $$ = makeListi1(ACL_ALL_RIGHTS); }
|
||||
;
|
||||
|
||||
privilege_list:
|
||||
|
@ -2613,7 +2668,7 @@ grantee_list:
|
|||
grantee: ColId
|
||||
{
|
||||
PrivGrantee *n = makeNode(PrivGrantee);
|
||||
/* This hack lets us avoid reserving PUBLIC as a keyword */
|
||||
/* This hack lets us avoid reserving PUBLIC as a keyword*/
|
||||
if (strcmp($1, "public") == 0)
|
||||
n->username = NULL;
|
||||
else
|
||||
|
@ -2838,12 +2893,14 @@ func_arg: opt_arg func_type
|
|||
opt_arg: IN_P { $$ = FALSE; }
|
||||
| OUT_P
|
||||
{
|
||||
elog(ERROR, "CREATE FUNCTION / OUT parameters are not supported");
|
||||
elog(ERROR,
|
||||
"CREATE FUNCTION / OUT parameters are not supported");
|
||||
$$ = TRUE;
|
||||
}
|
||||
| INOUT
|
||||
{
|
||||
elog(ERROR, "CREATE FUNCTION / INOUT parameters are not supported");
|
||||
elog(ERROR,
|
||||
"CREATE FUNCTION / INOUT parameters are not supported");
|
||||
$$ = FALSE;
|
||||
}
|
||||
;
|
||||
|
@ -2961,8 +3018,11 @@ createfunc_opt_item:
|
|||
}
|
||||
;
|
||||
|
||||
func_as: Sconst { $$ = makeList1(makeString($1)); }
|
||||
| Sconst ',' Sconst { $$ = makeList2(makeString($1), makeString($3)); }
|
||||
func_as: Sconst { $$ = makeList1(makeString($1)); }
|
||||
| Sconst ',' Sconst
|
||||
{
|
||||
$$ = makeList2(makeString($1), makeString($3));
|
||||
}
|
||||
;
|
||||
|
||||
opt_definition:
|
||||
|
@ -3021,14 +3081,19 @@ oper_argtypes:
|
|||
{
|
||||
elog(ERROR,"parser: argument type missing (use NONE for unary operators)");
|
||||
}
|
||||
| Typename ',' Typename { $$ = makeList2($1, $3); }
|
||||
| NONE ',' Typename /* left unary */ { $$ = makeList2(NULL, $3); }
|
||||
| Typename ',' NONE /* right unary */ { $$ = makeList2($1, NULL); }
|
||||
| Typename ',' Typename
|
||||
{ $$ = makeList2($1, $3); }
|
||||
| NONE ',' Typename /* left unary */
|
||||
{ $$ = makeList2(NULL, $3); }
|
||||
| Typename ',' NONE /* right unary */
|
||||
{ $$ = makeList2($1, NULL); }
|
||||
;
|
||||
|
||||
any_operator:
|
||||
all_Op { $$ = makeList1(makeString($1)); }
|
||||
| ColId '.' any_operator { $$ = lcons(makeString($1), $3); }
|
||||
all_Op
|
||||
{ $$ = makeList1(makeString($1)); }
|
||||
| ColId '.' any_operator
|
||||
{ $$ = lcons(makeString($1), $3); }
|
||||
;
|
||||
|
||||
|
||||
|
@ -3732,7 +3797,8 @@ insert_rest:
|
|||
|
||||
insert_column_list:
|
||||
insert_column_item { $$ = makeList1($1); }
|
||||
| insert_column_list ',' insert_column_item { $$ = lappend($1, $3); }
|
||||
| insert_column_list ',' insert_column_item
|
||||
{ $$ = lappend($1, $3); }
|
||||
;
|
||||
|
||||
insert_column_item:
|
||||
|
@ -3773,18 +3839,18 @@ LockStmt: LOCK_P opt_table qualified_name_list opt_lock
|
|||
}
|
||||
;
|
||||
|
||||
opt_lock: IN_P lock_type MODE { $$ = $2; }
|
||||
| /*EMPTY*/ { $$ = AccessExclusiveLock; }
|
||||
opt_lock: IN_P lock_type MODE { $$ = $2; }
|
||||
| /*EMPTY*/ { $$ = AccessExclusiveLock; }
|
||||
;
|
||||
|
||||
lock_type: ACCESS SHARE { $$ = AccessShareLock; }
|
||||
| ROW SHARE { $$ = RowShareLock; }
|
||||
| ROW EXCLUSIVE { $$ = RowExclusiveLock; }
|
||||
| SHARE UPDATE EXCLUSIVE { $$ = ShareUpdateExclusiveLock; }
|
||||
| SHARE { $$ = ShareLock; }
|
||||
| SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
|
||||
| EXCLUSIVE { $$ = ExclusiveLock; }
|
||||
| ACCESS EXCLUSIVE { $$ = AccessExclusiveLock; }
|
||||
lock_type: ACCESS SHARE { $$ = AccessShareLock; }
|
||||
| ROW SHARE { $$ = RowShareLock; }
|
||||
| ROW EXCLUSIVE { $$ = RowExclusiveLock; }
|
||||
| SHARE UPDATE EXCLUSIVE { $$ = ShareUpdateExclusiveLock; }
|
||||
| SHARE { $$ = ShareLock; }
|
||||
| SHARE ROW EXCLUSIVE { $$ = ShareRowExclusiveLock; }
|
||||
| EXCLUSIVE { $$ = ExclusiveLock; }
|
||||
| ACCESS EXCLUSIVE { $$ = AccessExclusiveLock; }
|
||||
;
|
||||
|
||||
|
||||
|
@ -3998,13 +4064,15 @@ OptTempTableName:
|
|||
}
|
||||
| GLOBAL TEMPORARY opt_table qualified_name
|
||||
{
|
||||
elog(ERROR, "GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
elog(ERROR,
|
||||
"GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
$$ = $4;
|
||||
$$->istemp = true;
|
||||
}
|
||||
| GLOBAL TEMP opt_table qualified_name
|
||||
{
|
||||
elog(ERROR, "GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
elog(ERROR,
|
||||
"GLOBAL TEMPORARY TABLE is not currently supported");
|
||||
$$ = $4;
|
||||
$$->istemp = true;
|
||||
}
|
||||
|
@ -4076,13 +4144,15 @@ select_limit:
|
|||
{ $$ = makeList2($2, NULL); }
|
||||
| LIMIT select_limit_value ',' select_offset_value
|
||||
/* Disabled because it was too confusing, bjm 2002-02-18 */
|
||||
{ elog(ERROR, "LIMIT #,# syntax not supported.\n\tUse separate LIMIT and OFFSET clauses."); }
|
||||
{ elog(ERROR,
|
||||
"LIMIT #,# syntax not supported.\n\tUse separate LIMIT and OFFSET clauses."); }
|
||||
;
|
||||
|
||||
|
||||
opt_select_limit:
|
||||
select_limit { $$ = $1; }
|
||||
| /* EMPTY */ { $$ = makeList2(NULL,NULL); }
|
||||
| /* EMPTY */
|
||||
{ $$ = makeList2(NULL,NULL); }
|
||||
;
|
||||
|
||||
select_limit_value:
|
||||
|
@ -4469,7 +4539,8 @@ func_table: func_name '(' ')'
|
|||
|
||||
where_clause:
|
||||
WHERE a_expr { $$ = $2; }
|
||||
| /*EMPTY*/ { $$ = NULL; /* no qualifiers */ }
|
||||
/* no qualifiers */
|
||||
| /*EMPTY*/ { $$ = NULL; }
|
||||
;
|
||||
|
||||
|
||||
|
@ -4524,7 +4595,8 @@ SimpleTypename:
|
|||
{
|
||||
$$ = $1;
|
||||
if (($3 < 0) || ($3 > MAX_INTERVAL_PRECISION))
|
||||
elog(ERROR, "INTERVAL(%d) precision must be between %d and %d",
|
||||
elog(ERROR,
|
||||
"INTERVAL(%d) precision must be between %d and %d",
|
||||
$3, 0, MAX_INTERVAL_PRECISION);
|
||||
$$->typmod = ((($5 & 0x7FFF) << 16) | $3);
|
||||
}
|
||||
|
@ -4608,13 +4680,15 @@ Numeric: INT
|
|||
opt_float: '(' Iconst ')'
|
||||
{
|
||||
if ($2 < 1)
|
||||
elog(ERROR, "precision for FLOAT must be at least 1");
|
||||
elog(ERROR,
|
||||
"precision for FLOAT must be at least 1");
|
||||
else if ($2 < 7)
|
||||
$$ = SystemTypeName("float4");
|
||||
else if ($2 < 16)
|
||||
$$ = SystemTypeName("float8");
|
||||
else
|
||||
elog(ERROR, "precision for FLOAT must be less than 16");
|
||||
elog(ERROR,
|
||||
"precision for FLOAT must be less than 16");
|
||||
}
|
||||
| /*EMPTY*/
|
||||
{
|
||||
|
@ -4626,10 +4700,12 @@ opt_numeric:
|
|||
'(' Iconst ',' Iconst ')'
|
||||
{
|
||||
if ($2 < 1 || $2 > NUMERIC_MAX_PRECISION)
|
||||
elog(ERROR, "NUMERIC precision %d must be between 1 and %d",
|
||||
elog(ERROR,
|
||||
"NUMERIC precision %d must be between 1 and %d",
|
||||
$2, NUMERIC_MAX_PRECISION);
|
||||
if ($4 < 0 || $4 > $2)
|
||||
elog(ERROR, "NUMERIC scale %d must be between 0 and precision %d",
|
||||
elog(ERROR,
|
||||
"NUMERIC scale %d must be between 0 and precision %d",
|
||||
$4,$2);
|
||||
|
||||
$$ = (($2 << 16) | $4) + VARHDRSZ;
|
||||
|
@ -4637,7 +4713,8 @@ opt_numeric:
|
|||
| '(' Iconst ')'
|
||||
{
|
||||
if ($2 < 1 || $2 > NUMERIC_MAX_PRECISION)
|
||||
elog(ERROR, "NUMERIC precision %d must be between 1 and %d",
|
||||
elog(ERROR,
|
||||
"NUMERIC precision %d must be between 1 and %d",
|
||||
$2, NUMERIC_MAX_PRECISION);
|
||||
|
||||
$$ = ($2 << 16) + VARHDRSZ;
|
||||
|
@ -4653,10 +4730,12 @@ opt_decimal:
|
|||
'(' Iconst ',' Iconst ')'
|
||||
{
|
||||
if ($2 < 1 || $2 > NUMERIC_MAX_PRECISION)
|
||||
elog(ERROR, "DECIMAL precision %d must be between 1 and %d",
|
||||
elog(ERROR,
|
||||
"DECIMAL precision %d must be between 1 and %d",
|
||||
$2, NUMERIC_MAX_PRECISION);
|
||||
if ($4 < 0 || $4 > $2)
|
||||
elog(ERROR, "DECIMAL scale %d must be between 0 and precision %d",
|
||||
elog(ERROR,
|
||||
"DECIMAL scale %d must be between 0 and precision %d",
|
||||
$4,$2);
|
||||
|
||||
$$ = (($2 << 16) | $4) + VARHDRSZ;
|
||||
|
@ -4664,7 +4743,8 @@ opt_decimal:
|
|||
| '(' Iconst ')'
|
||||
{
|
||||
if ($2 < 1 || $2 > NUMERIC_MAX_PRECISION)
|
||||
elog(ERROR, "DECIMAL precision %d must be between 1 and %d",
|
||||
elog(ERROR,
|
||||
"DECIMAL precision %d must be between 1 and %d",
|
||||
$2, NUMERIC_MAX_PRECISION);
|
||||
|
||||
$$ = ($2 << 16) + VARHDRSZ;
|
||||
|
@ -4809,8 +4889,10 @@ ConstDatetime:
|
|||
*/
|
||||
$$->timezone = $5;
|
||||
if (($3 < 0) || ($3 > MAX_TIMESTAMP_PRECISION))
|
||||
elog(ERROR, "TIMESTAMP(%d)%s precision must be between %d and %d",
|
||||
$3, ($5 ? " WITH TIME ZONE": ""), 0, MAX_TIMESTAMP_PRECISION);
|
||||
elog(ERROR,
|
||||
"TIMESTAMP(%d)%s precision must be between %d and %d",
|
||||
$3, ($5 ? " WITH TIME ZONE": ""), 0,
|
||||
MAX_TIMESTAMP_PRECISION);
|
||||
$$->typmod = $3;
|
||||
}
|
||||
| TIMESTAMP opt_timezone
|
||||
|
@ -4839,8 +4921,10 @@ ConstDatetime:
|
|||
else
|
||||
$$ = SystemTypeName("time");
|
||||
if (($3 < 0) || ($3 > MAX_TIME_PRECISION))
|
||||
elog(ERROR, "TIME(%d)%s precision must be between %d and %d",
|
||||
$3, ($5 ? " WITH TIME ZONE": ""), 0, MAX_TIME_PRECISION);
|
||||
elog(ERROR,
|
||||
"TIME(%d)%s precision must be between %d and %d",
|
||||
$3, ($5 ? " WITH TIME ZONE": ""), 0,
|
||||
MAX_TIME_PRECISION);
|
||||
$$->typmod = $3;
|
||||
}
|
||||
| TIME opt_timezone
|
||||
|
@ -4874,13 +4958,20 @@ opt_interval:
|
|||
| HOUR_P { $$ = MASK(HOUR); }
|
||||
| MINUTE_P { $$ = MASK(MINUTE); }
|
||||
| SECOND_P { $$ = MASK(SECOND); }
|
||||
| YEAR_P TO MONTH_P { $$ = MASK(YEAR) | MASK(MONTH); }
|
||||
| DAY_P TO HOUR_P { $$ = MASK(DAY) | MASK(HOUR); }
|
||||
| DAY_P TO MINUTE_P { $$ = MASK(DAY) | MASK(HOUR) | MASK(MINUTE); }
|
||||
| DAY_P TO SECOND_P { $$ = MASK(DAY) | MASK(HOUR) | MASK(MINUTE) | MASK(SECOND); }
|
||||
| HOUR_P TO MINUTE_P { $$ = MASK(HOUR) | MASK(MINUTE); }
|
||||
| HOUR_P TO SECOND_P { $$ = MASK(HOUR) | MASK(MINUTE) | MASK(SECOND); }
|
||||
| MINUTE_P TO SECOND_P { $$ = MASK(MINUTE) | MASK(SECOND); }
|
||||
| YEAR_P TO MONTH_P
|
||||
{ $$ = MASK(YEAR) | MASK(MONTH); }
|
||||
| DAY_P TO HOUR_P
|
||||
{ $$ = MASK(DAY) | MASK(HOUR); }
|
||||
| DAY_P TO MINUTE_P
|
||||
{ $$ = MASK(DAY) | MASK(HOUR) | MASK(MINUTE); }
|
||||
| DAY_P TO SECOND_P
|
||||
{ $$ = MASK(DAY) | MASK(HOUR) | MASK(MINUTE) | MASK(SECOND); }
|
||||
| HOUR_P TO MINUTE_P
|
||||
{ $$ = MASK(HOUR) | MASK(MINUTE); }
|
||||
| HOUR_P TO SECOND_P
|
||||
{ $$ = MASK(HOUR) | MASK(MINUTE) | MASK(SECOND); }
|
||||
| MINUTE_P TO SECOND_P
|
||||
{ $$ = MASK(MINUTE) | MASK(SECOND); }
|
||||
| /*EMPTY*/ { $$ = -1; }
|
||||
;
|
||||
|
||||
|
@ -4915,7 +5006,8 @@ row_expr: '(' row_descriptor ')' IN_P select_with_parens
|
|||
n->subselect = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| '(' row_descriptor ')' qual_all_Op sub_type select_with_parens %prec Op
|
||||
| '(' row_descriptor ')' qual_all_Op sub_type select_with_parens
|
||||
%prec Op
|
||||
{
|
||||
SubLink *n = makeNode(SubLink);
|
||||
n->lefthand = $2;
|
||||
|
@ -4928,7 +5020,8 @@ row_expr: '(' row_descriptor ')' IN_P select_with_parens
|
|||
n->subselect = $6;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| '(' row_descriptor ')' qual_all_Op select_with_parens %prec Op
|
||||
| '(' row_descriptor ')' qual_all_Op select_with_parens
|
||||
%prec Op
|
||||
{
|
||||
SubLink *n = makeNode(SubLink);
|
||||
n->lefthand = $2;
|
||||
|
@ -4941,7 +5034,8 @@ row_expr: '(' row_descriptor ')' IN_P select_with_parens
|
|||
n->subselect = $5;
|
||||
$$ = (Node *)n;
|
||||
}
|
||||
| '(' row_descriptor ')' qual_all_Op '(' row_descriptor ')' %prec Op
|
||||
| '(' row_descriptor ')' qual_all_Op '(' row_descriptor ')'
|
||||
%prec Op
|
||||
{
|
||||
$$ = makeRowExpr($4, $2, $6);
|
||||
}
|
||||
|
@ -4996,12 +5090,14 @@ MathOp: '+' { $$ = "+"; }
|
|||
| '=' { $$ = "="; }
|
||||
;
|
||||
|
||||
qual_Op: Op { $$ = makeList1(makeString($1)); }
|
||||
qual_Op: Op
|
||||
{ $$ = makeList1(makeString($1)); }
|
||||
| OPERATOR '(' any_operator ')' { $$ = $3; }
|
||||
;
|
||||
|
||||
qual_all_Op:
|
||||
all_Op { $$ = makeList1(makeString($1)); }
|
||||
all_Op
|
||||
{ $$ = makeList1(makeString($1)); }
|
||||
| OPERATOR '(' any_operator ')' { $$ = $3; }
|
||||
;
|
||||
|
||||
|
@ -5022,7 +5118,8 @@ qual_all_Op:
|
|||
* it's factored out just to eliminate redundant coding.
|
||||
*/
|
||||
a_expr: c_expr { $$ = $1; }
|
||||
| a_expr TYPECAST Typename { $$ = makeTypeCast($1, $3); }
|
||||
| a_expr TYPECAST Typename
|
||||
{ $$ = makeTypeCast($1, $3); }
|
||||
| a_expr COLLATE ColId
|
||||
{
|
||||
FuncCall *n = makeNode(FuncCall);
|
||||
|
@ -5325,7 +5422,7 @@ a_expr: c_expr { $$ = $1; }
|
|||
$$ = n;
|
||||
}
|
||||
}
|
||||
| a_expr qual_all_Op sub_type select_with_parens %prec Op
|
||||
| a_expr qual_all_Op sub_type select_with_parens %prec Op
|
||||
{
|
||||
SubLink *n = makeNode(SubLink);
|
||||
n->lefthand = makeList1($1);
|
||||
|
@ -5553,7 +5650,8 @@ c_expr: columnref { $$ = (Node *) $1; }
|
|||
s->typename = SystemTypeName("text");
|
||||
d = SystemTypeName("timetz");
|
||||
if (($3 < 0) || ($3 > MAX_TIME_PRECISION))
|
||||
elog(ERROR, "CURRENT_TIME(%d) precision must be between %d and %d",
|
||||
elog(ERROR,
|
||||
"CURRENT_TIME(%d) precision must be between %d and %d",
|
||||
$3, 0, MAX_TIME_PRECISION);
|
||||
d->typmod = $3;
|
||||
|
||||
|
@ -5597,7 +5695,9 @@ c_expr: columnref { $$ = (Node *) $1; }
|
|||
|
||||
d = SystemTypeName("timestamptz");
|
||||
if (($3 < 0) || ($3 > MAX_TIMESTAMP_PRECISION))
|
||||
elog(ERROR, "CURRENT_TIMESTAMP(%d) precision must be between %d and %d",
|
||||
elog(ERROR,
|
||||
"CURRENT_TIMESTAMP(%d) precision "
|
||||
"must be between %d and %d",
|
||||
$3, 0, MAX_TIMESTAMP_PRECISION);
|
||||
d->typmod = $3;
|
||||
|
||||
|
@ -5640,7 +5740,8 @@ c_expr: columnref { $$ = (Node *) $1; }
|
|||
s->typename = SystemTypeName("text");
|
||||
d = SystemTypeName("time");
|
||||
if (($3 < 0) || ($3 > MAX_TIME_PRECISION))
|
||||
elog(ERROR, "LOCALTIME(%d) precision must be between %d and %d",
|
||||
elog(ERROR,
|
||||
"LOCALTIME(%d) precision must be between %d and %d",
|
||||
$3, 0, MAX_TIME_PRECISION);
|
||||
d->typmod = $3;
|
||||
|
||||
|
@ -5684,7 +5785,9 @@ c_expr: columnref { $$ = (Node *) $1; }
|
|||
|
||||
d = SystemTypeName("timestamp");
|
||||
if (($3 < 0) || ($3 > MAX_TIMESTAMP_PRECISION))
|
||||
elog(ERROR, "LOCALTIMESTAMP(%d) precision must be between %d and %d",
|
||||
elog(ERROR,
|
||||
"LOCALTIMESTAMP(%d) precision must be "
|
||||
"between %d and %d",
|
||||
$3, 0, MAX_TIMESTAMP_PRECISION);
|
||||
d->typmod = $3;
|
||||
|
||||
|
@ -6066,12 +6169,16 @@ columnref: relation_name opt_indirection
|
|||
;
|
||||
|
||||
dotted_name:
|
||||
relation_name attrs { $$ = lcons(makeString($1), $2); }
|
||||
relation_name attrs
|
||||
{ $$ = lcons(makeString($1), $2); }
|
||||
;
|
||||
|
||||
attrs: '.' attr_name { $$ = makeList1(makeString($2)); }
|
||||
| '.' '*' { $$ = makeList1(makeString("*")); }
|
||||
| '.' attr_name attrs { $$ = lcons(makeString($2), $3); }
|
||||
attrs: '.' attr_name
|
||||
{ $$ = makeList1(makeString($2)); }
|
||||
| '.' '*'
|
||||
{ $$ = makeList1(makeString("*")); }
|
||||
| '.' attr_name attrs
|
||||
{ $$ = lcons(makeString($2), $3); }
|
||||
;
|
||||
|
||||
|
||||
|
@ -6194,15 +6301,19 @@ qualified_name:
|
|||
$$->relname = strVal(lfirst(lnext(lnext($1))));
|
||||
break;
|
||||
default:
|
||||
elog(ERROR, "Improper qualified name (too many dotted names): %s",
|
||||
elog(ERROR,
|
||||
"Improper qualified name "
|
||||
"(too many dotted names): %s",
|
||||
NameListToString($1));
|
||||
break;
|
||||
}
|
||||
}
|
||||
;
|
||||
|
||||
name_list: name { $$ = makeList1(makeString($1)); }
|
||||
| name_list ',' name { $$ = lappend($1, makeString($3)); }
|
||||
name_list: name
|
||||
{ $$ = makeList1(makeString($1)); }
|
||||
| name_list ',' name
|
||||
{ $$ = lappend($1, makeString($3)); }
|
||||
;
|
||||
|
||||
|
||||
|
@ -6220,7 +6331,8 @@ index_name: ColId { $$ = $1; };
|
|||
|
||||
file_name: Sconst { $$ = $1; };
|
||||
|
||||
func_name: function_name { $$ = makeList1(makeString($1)); }
|
||||
func_name: function_name
|
||||
{ $$ = makeList1(makeString($1)); }
|
||||
| dotted_name { $$ = $1; }
|
||||
;
|
||||
|
||||
|
@ -6289,7 +6401,8 @@ AexprConst: Iconst
|
|||
n->val.val.str = $5;
|
||||
/* precision specified, and fields may be... */
|
||||
if (($3 < 0) || ($3 > MAX_INTERVAL_PRECISION))
|
||||
elog(ERROR, "INTERVAL(%d) precision must be between %d and %d",
|
||||
elog(ERROR,
|
||||
"INTERVAL(%d) precision must be between %d and %d",
|
||||
$3, 0, MAX_INTERVAL_PRECISION);
|
||||
n->typename->typmod = ((($6 & 0x7FFF) << 16) | $3);
|
||||
$$ = (Node *)n;
|
||||
|
|
Loading…
Reference in New Issue