⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gram.y

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 Y
📖 第 1 页 / 共 5 页
字号:
					n->args = $5;					$$ = n;				}			| NAMES opt_encoding				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "client_encoding";					if ($2 != NULL)						n->args = list_make1(makeStringConst($2, NULL));					$$ = n;				}			| ROLE ColId_or_Sconst				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "role";					n->args = list_make1(makeStringConst($2, NULL));					$$ = n;				}			| SESSION AUTHORIZATION ColId_or_Sconst				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "session_authorization";					n->args = list_make1(makeStringConst($3, NULL));					$$ = n;				}			| SESSION AUTHORIZATION DEFAULT				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "session_authorization";					n->args = NIL;					$$ = n;				}		;var_name:			ColId								{ $$ = $1; }			| var_name '.' ColId				{					int qLen = strlen($1);					char* qualName = palloc(qLen + strlen($3) + 2);					strcpy(qualName, $1);					qualName[qLen] = '.';					strcpy(qualName + qLen + 1, $3);					$$ = qualName;				}		;var_list_or_default:			var_list								{ $$ = $1; }			| DEFAULT								{ $$ = NIL; }		;var_list:	var_value								{ $$ = list_make1($1); }			| var_list ',' var_value				{ $$ = lappend($1, $3); }		;var_value:	opt_boolean				{ $$ = makeStringConst($1, NULL); }			| ColId_or_Sconst				{ $$ = makeStringConst($1, NULL); }			| NumericOnly				{ $$ = makeAConst($1); }		;iso_level:	READ UNCOMMITTED						{ $$ = "read uncommitted"; }			| READ COMMITTED						{ $$ = "read committed"; }			| REPEATABLE READ						{ $$ = "repeatable read"; }			| SERIALIZABLE							{ $$ = "serializable"; }		;opt_boolean:			TRUE_P									{ $$ = "true"; }			| FALSE_P								{ $$ = "false"; }			| ON									{ $$ = "on"; }			| OFF									{ $$ = "off"; }		;/* Timezone values can be: * - a string such as 'pst8pdt' * - an identifier such as "pst8pdt" * - an integer or floating point number * - a time interval per SQL99 * ColId gives reduce/reduce errors against ConstInterval and LOCAL, * so use IDENT and reject anything which is a reserved word. */zone_value:			Sconst				{					$$ = makeStringConst($1, NULL);				}			| IDENT				{					$$ = makeStringConst($1, NULL);				}			| ConstInterval Sconst opt_interval				{					A_Const *n = (A_Const *) makeStringConst($2, $1);					if ($3 != INTERVAL_FULL_RANGE)					{						if (($3 & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0)							ereport(ERROR,									(errcode(ERRCODE_SYNTAX_ERROR),									 errmsg("time zone interval must be HOUR or HOUR TO MINUTE")));						n->typename->typmod = INTERVAL_TYPMOD(INTERVAL_FULL_PRECISION, $3);					}					$$ = (Node *)n;				}			| ConstInterval '(' Iconst ')' Sconst opt_interval				{					A_Const *n = (A_Const *) makeStringConst($5, $1);					if ($3 < 0)						ereport(ERROR,								(errcode(ERRCODE_INVALID_PARAMETER_VALUE),								 errmsg("INTERVAL(%d) precision must not be negative",										$3)));					if ($3 > MAX_INTERVAL_PRECISION)					{						ereport(WARNING,								(errcode(ERRCODE_INVALID_PARAMETER_VALUE),								 errmsg("INTERVAL(%d) precision reduced to maximum allowed, %d",										$3, MAX_INTERVAL_PRECISION)));						$3 = MAX_INTERVAL_PRECISION;					}					if (($6 != INTERVAL_FULL_RANGE)						&& (($6 & ~(INTERVAL_MASK(HOUR) | INTERVAL_MASK(MINUTE))) != 0))						ereport(ERROR,								(errcode(ERRCODE_SYNTAX_ERROR),								 errmsg("time zone interval must be HOUR or HOUR TO MINUTE")));					n->typename->typmod = INTERVAL_TYPMOD($3, $6);					$$ = (Node *)n;				}			| NumericOnly							{ $$ = makeAConst($1); }			| DEFAULT								{ $$ = NULL; }			| LOCAL									{ $$ = NULL; }		;opt_encoding:			Sconst									{ $$ = $1; }			| DEFAULT								{ $$ = NULL; }			| /*EMPTY*/								{ $$ = NULL; }		;ColId_or_Sconst:			ColId									{ $$ = $1; }			| SCONST								{ $$ = $1; }		;VariableShowStmt:			SHOW var_name				{					VariableShowStmt *n = makeNode(VariableShowStmt);					n->name = $2;					$$ = (Node *) n;				}			| SHOW TIME ZONE				{					VariableShowStmt *n = makeNode(VariableShowStmt);					n->name = "timezone";					$$ = (Node *) n;				}			| SHOW TRANSACTION ISOLATION LEVEL				{					VariableShowStmt *n = makeNode(VariableShowStmt);					n->name = "transaction_isolation";					$$ = (Node *) n;				}			| SHOW SESSION AUTHORIZATION				{					VariableShowStmt *n = makeNode(VariableShowStmt);					n->name = "session_authorization";					$$ = (Node *) n;				}			| SHOW ALL				{					VariableShowStmt *n = makeNode(VariableShowStmt);					n->name = "all";					$$ = (Node *) n;				}		;VariableResetStmt:			RESET var_name				{					VariableResetStmt *n = makeNode(VariableResetStmt);					n->name = $2;					$$ = (Node *) n;				}			| RESET TIME ZONE				{					VariableResetStmt *n = makeNode(VariableResetStmt);					n->name = "timezone";					$$ = (Node *) n;				}			| RESET TRANSACTION ISOLATION LEVEL				{					VariableResetStmt *n = makeNode(VariableResetStmt);					n->name = "transaction_isolation";					$$ = (Node *) n;				}			| RESET SESSION AUTHORIZATION				{					VariableResetStmt *n = makeNode(VariableResetStmt);					n->name = "session_authorization";					$$ = (Node *) n;				}			| RESET ALL				{					VariableResetStmt *n = makeNode(VariableResetStmt);					n->name = "all";					$$ = (Node *) n;				}		;ConstraintsSetStmt:			SET CONSTRAINTS constraints_set_list constraints_set_mode				{					ConstraintsSetStmt *n = makeNode(ConstraintsSetStmt);					n->constraints = $3;					n->deferred    = $4;					$$ = (Node *) n;				}		;constraints_set_list:			ALL										{ $$ = NIL; }			| name_list								{ $$ = $1; }		;constraints_set_mode:			DEFERRED								{ $$ = TRUE; }			| IMMEDIATE								{ $$ = FALSE; }		;/* * Checkpoint statement */CheckPointStmt:			CHECKPOINT				{					CheckPointStmt *n = makeNode(CheckPointStmt);					$$ = (Node *)n;				}		;/***************************************************************************** * *	ALTER [ TABLE | INDEX ] variations * *****************************************************************************/AlterTableStmt:			ALTER TABLE relation_expr alter_table_cmds				{					AlterTableStmt *n = makeNode(AlterTableStmt);					n->relation = $3;					n->cmds = $4;					n->relkind = OBJECT_TABLE;					$$ = (Node *)n;				}		|	ALTER INDEX relation_expr alter_rel_cmds				{					AlterTableStmt *n = makeNode(AlterTableStmt);					n->relation = $3;					n->cmds = $4;					n->relkind = OBJECT_INDEX;					$$ = (Node *)n;				}		;alter_table_cmds:			alter_table_cmd							{ $$ = list_make1($1); }			| alter_table_cmds ',' alter_table_cmd	{ $$ = lappend($1, $3); }		;/* Subcommands that are for ALTER TABLE only */alter_table_cmd:			/* ALTER TABLE <relation> ADD [COLUMN] <coldef> */			ADD opt_column columnDef				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_AddColumn;					n->def = $3;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> ALTER [COLUMN] <colname> {SET DEFAULT <expr>|DROP DEFAULT} */			| ALTER opt_column ColId alter_column_default				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_ColumnDefault;					n->name = $3;					n->def = $4;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> ALTER [COLUMN] <colname> DROP NOT NULL */			| ALTER opt_column ColId DROP NOT NULL_P				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DropNotNull;					n->name = $3;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET NOT NULL */			| ALTER opt_column ColId SET NOT NULL_P				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_SetNotNull;					n->name = $3;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STATISTICS <IntegerOnly> */			| ALTER opt_column ColId SET STATISTICS IntegerOnly				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_SetStatistics;					n->name = $3;					n->def = (Node *) $6;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> ALTER [COLUMN] <colname> SET STORAGE <storagemode> */			| ALTER opt_column ColId SET STORAGE ColId				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_SetStorage;					n->name = $3;					n->def = (Node *) makeString($6);					$$ = (Node *)n;				}			/* ALTER TABLE <relation> DROP [COLUMN] <colname> [RESTRICT|CASCADE] */			| DROP opt_column ColId opt_drop_behavior				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DropColumn;					n->name = $3;					n->behavior = $4;					$$ = (Node *)n;				}			/*			 * ALTER TABLE <relation> ALTER [COLUMN] <colname> TYPE <typename>			 *		[ USING <expression> ]			 */			| ALTER opt_column ColId TYPE_P Typename alter_using				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_AlterColumnType;					n->name = $3;					n->def = (Node *) $5;					n->transform = $6;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> ADD CONSTRAINT ... */			| ADD TableConstraint				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_AddConstraint;					n->def = $2;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> DROP CONSTRAINT <name> [RESTRICT|CASCADE] */			| DROP CONSTRAINT name opt_drop_behavior				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DropConstraint;					n->name = $3;					n->behavior = $4;					$$ = (Node *)n;				}			/* ALTER TABLE <relation> SET WITHOUT OIDS  */			| SET WITHOUT OIDS				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DropOids;					$$ = (Node *)n;				}			/* ALTER TABLE <name> CREATE TOAST TABLE -- ONLY */			| CREATE TOAST TABLE				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_ToastTable;					$$ = (Node *)n;				}			/* ALTER TABLE <name> CLUSTER ON <indexname> */			| CLUSTER ON name				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_ClusterOn;					n->name = $3;					$$ = (Node *)n;				}			/* ALTER TABLE <name> SET WITHOUT CLUSTER */			| SET WITHOUT CLUSTER				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DropCluster;					n->name = NULL;					$$ = (Node *)n;				}			/* ALTER TABLE <name> ENABLE TRIGGER <trig> */			| ENABLE_P TRIGGER name				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_EnableTrig;					n->name = $3;					$$ = (Node *)n;				}			/* ALTER TABLE <name> ENABLE TRIGGER ALL */			| ENABLE_P TRIGGER ALL				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_EnableTrigAll;					$$ = (Node *)n;				}			/* ALTER TABLE <name> ENABLE TRIGGER USER */			| ENABLE_P TRIGGER USER				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_EnableTrigUser;					$$ = (Node *)n;				}			/* ALTER TABLE <name> DISABLE TRIGGER <trig> */			| DISABLE_P TRIGGER name				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DisableTrig;					n->name = $3;					$$ = (Node *)n;				}			/* ALTER TABLE <name> DISABLE TRIGGER ALL */			| DISABLE_P TRIGGER ALL				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DisableTrigAll;					$$ = (Node *)n;				}			/* ALTER TABLE <name> DISABLE TRIGGER USER */			| DISABLE_P TRIGGER USER				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_DisableTrigUser;					$$ = (Node *)n;				}			| alter_rel_cmd				{					$$ = $1;				}		;alter_rel_cmds:			alter_rel_cmd							{ $$ = list_make1($1); }			| alter_rel_cmds ',' alter_rel_cmd		{ $$ = lappend($1, $3); }		;/* Subcommands that are for ALTER TABLE or ALTER INDEX */alter_rel_cmd:			/* ALTER [TABLE|INDEX] <name> OWNER TO RoleId */			OWNER TO RoleId				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_ChangeOwner;					n->name = $3;					$$ = (Node *)n;				}			/* ALTER [TABLE|INDEX] <name> SET TABLESPACE <tablespacename> */			| SET TABLESPACE name				{					AlterTableCmd *n = makeNode(AlterTableCmd);					n->subtype = AT_SetTableSpace;					n->name = $3;					$$ = (Node *)n;				}		;alter_column_default:			SET DEFAULT a_expr				{					/* Treat SET DEFAULT NULL the same as DROP DEFAULT */					if (exprIsNullConstant($3))						$$ = NULL;					else						$$ = $3;				}			| DROP DEFAULT				{ $$ = NULL; }		;opt_drop_behavior:			CASCADE						{ $$ = DROP_CASCADE; }			| RESTRICT					{ $$ = DROP_RESTRICT; }			| /* EMPTY */				{ $$ = DROP_RESTRICT; /* default */ }		;alter_using:			USING a_expr				{ $$ = $2; }			| /* EMPTY */				{ $$ = NULL; }		;/***************************************************************************** * *		QUERY : *				close <portalname> *

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -