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

📄 gram.y

📁 PostgreSQL7.4.6 for Linux
💻 Y
📖 第 1 页 / 共 5 页
字号:
			| DropRuleStmt			| DropStmt			| DropTrigStmt			| DropUserStmt			| DropdbStmt			| ExecuteStmt			| ExplainStmt			| FetchStmt			| GrantStmt			| IndexStmt			| InsertStmt			| ListenStmt			| LoadStmt			| LockStmt			| NotifyStmt			| PrepareStmt			| ReindexStmt			| RemoveAggrStmt			| RemoveFuncStmt			| RemoveOperStmt			| RenameStmt			| RevokeStmt			| RuleStmt			| SelectStmt			| TransactionStmt			| TruncateStmt			| UnlistenStmt			| UpdateStmt			| VacuumStmt			| VariableResetStmt			| VariableSetStmt			| VariableShowStmt			| ViewStmt			| /*EMPTY*/				{ $$ = (Node *)NULL; }		;/***************************************************************************** * * Create a new Postgres DBMS user * * *****************************************************************************/CreateUserStmt:			CREATE USER UserId opt_with OptUserList				{					CreateUserStmt *n = makeNode(CreateUserStmt);					n->user = $3;					n->options = $5;					$$ = (Node *)n;				}		;opt_with:	WITH									{}			| /*EMPTY*/								{}		;/***************************************************************************** * * Alter a postgresql DBMS user * * *****************************************************************************/AlterUserStmt:			ALTER USER UserId opt_with OptUserList				 {					AlterUserStmt *n = makeNode(AlterUserStmt);					n->user = $3;					n->options = $5;					$$ = (Node *)n;				 }		;AlterUserSetStmt:			ALTER USER UserId SET set_rest				{					AlterUserSetStmt *n = makeNode(AlterUserSetStmt);					n->user = $3;					n->variable = $5->name;					n->value = $5->args;					$$ = (Node *)n;				}			| ALTER USER UserId VariableResetStmt				{					AlterUserSetStmt *n = makeNode(AlterUserSetStmt);					n->user = $3;					n->variable = ((VariableResetStmt *)$4)->name;					n->value = NIL;					$$ = (Node *)n;				}			;/***************************************************************************** * * Drop a postgresql DBMS user * * XXX Ideally this would have CASCADE/RESTRICT options, but since a user * might own objects in multiple databases, there is presently no way to * implement either cascading or restricting.  Caveat DBA. *****************************************************************************/DropUserStmt:			DROP USER user_list				{					DropUserStmt *n = makeNode(DropUserStmt);					n->users = $3;					$$ = (Node *)n;				}			;/* * Options for CREATE USER and ALTER USER */OptUserList:			OptUserList OptUserElem					{ $$ = lappend($1, $2); }			| /* EMPTY */							{ $$ = NIL; }		;OptUserElem:			PASSWORD Sconst				{					$$ = makeDefElem("password", (Node *)makeString($2));				}			| ENCRYPTED PASSWORD Sconst				{					$$ = makeDefElem("encryptedPassword", (Node *)makeString($3));				}			| UNENCRYPTED PASSWORD Sconst				{					$$ = makeDefElem("unencryptedPassword", (Node *)makeString($3));				}			| SYSID Iconst				{					$$ = makeDefElem("sysid", (Node *)makeInteger($2));				}			| CREATEDB				{					$$ = makeDefElem("createdb", (Node *)makeInteger(TRUE));				}			| NOCREATEDB				{					$$ = makeDefElem("createdb", (Node *)makeInteger(FALSE));				}			| CREATEUSER				{					$$ = makeDefElem("createuser", (Node *)makeInteger(TRUE));				}			| NOCREATEUSER				{					$$ = makeDefElem("createuser", (Node *)makeInteger(FALSE));				}			| IN_P GROUP_P user_list				{					$$ = makeDefElem("groupElts", (Node *)$3);				}			| VALID UNTIL Sconst				{					$$ = makeDefElem("validUntil", (Node *)makeString($3));				}		;user_list:	user_list ',' UserId		{ $$ = lappend($1, makeString($3)); }			| UserId					{ $$ = makeList1(makeString($1)); }		;/***************************************************************************** * * Create a postgresql group * * *****************************************************************************/CreateGroupStmt:			CREATE GROUP_P UserId opt_with OptGroupList				{					CreateGroupStmt *n = makeNode(CreateGroupStmt);					n->name = $3;					n->options = $5;					$$ = (Node *)n;				}		;/* * Options for CREATE GROUP */OptGroupList:			OptGroupList OptGroupElem				{ $$ = lappend($1, $2); }			| /* EMPTY */							{ $$ = NIL; }		;OptGroupElem:			USER user_list				{					$$ = makeDefElem("userElts", (Node *)$2);				}			| SYSID Iconst				{					$$ = makeDefElem("sysid", (Node *)makeInteger($2));				}		;/***************************************************************************** * * Alter a postgresql group * * *****************************************************************************/AlterGroupStmt:			ALTER GROUP_P UserId add_drop USER user_list				{					AlterGroupStmt *n = makeNode(AlterGroupStmt);					n->name = $3;					n->action = $4;					n->listUsers = $6;					$$ = (Node *)n;				}		;add_drop:	ADD										{ $$ = +1; }			| DROP									{ $$ = -1; }		;/***************************************************************************** * * Drop a postgresql group * * XXX see above notes about cascading DROP USER; groups have same problem. *****************************************************************************/DropGroupStmt:			DROP GROUP_P UserId				{					DropGroupStmt *n = makeNode(DropGroupStmt);					n->name = $3;					$$ = (Node *)n;				}		;/***************************************************************************** * * Manipulate a schema * *****************************************************************************/CreateSchemaStmt:			CREATE SCHEMA OptSchemaName AUTHORIZATION UserId OptSchemaEltList				{					CreateSchemaStmt *n = makeNode(CreateSchemaStmt);					/* One can omit the schema name or the authorization id. */					if ($3 != NULL)						n->schemaname = $3;					else						n->schemaname = $5;					n->authid = $5;					n->schemaElts = $6;					$$ = (Node *)n;				}			| CREATE SCHEMA ColId OptSchemaEltList				{					CreateSchemaStmt *n = makeNode(CreateSchemaStmt);					/* ...but not both */					n->schemaname = $3;					n->authid = NULL;					n->schemaElts = $4;					$$ = (Node *)n;				}		;OptSchemaName:			ColId									{ $$ = $1; }			| /* EMPTY */							{ $$ = NULL; }		;OptSchemaEltList:			OptSchemaEltList schema_stmt			{ $$ = lappend($1, $2); }			| /* EMPTY */							{ $$ = NIL; }		;/* *	schema_stmt are the ones that can show up inside a CREATE SCHEMA *	statement (in addition to by themselves). */schema_stmt:			CreateStmt			| GrantStmt			| ViewStmt		;/***************************************************************************** * * Set PG internal variable *	  SET name TO 'var_value' * Include SQL92 syntax (thomas 1997-10-22): *	  SET TIME ZONE 'var_value' * *****************************************************************************/VariableSetStmt:			SET set_rest				{					VariableSetStmt *n = $2;					n->is_local = false;					$$ = (Node *) n;				}			| SET LOCAL set_rest				{					VariableSetStmt *n = $3;					n->is_local = true;					$$ = (Node *) n;				}			| SET SESSION set_rest				{					VariableSetStmt *n = $3;					n->is_local = false;					$$ = (Node *) n;				}		;set_rest:  ColId TO var_list_or_default				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = $1;					n->args = $3;					$$ = n;				}			| ColId '=' var_list_or_default				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = $1;					n->args = $3;					$$ = n;				}			| TIME ZONE zone_value				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "timezone";					if ($3 != NULL)						n->args = makeList1($3);					$$ = n;				}			| TRANSACTION transaction_mode_list				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "TRANSACTION";					n->args = $2;					$$ = n;				}			| SESSION CHARACTERISTICS AS TRANSACTION transaction_mode_list				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "SESSION CHARACTERISTICS";					n->args = $5;					$$ = n;				}			| NAMES opt_encoding				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "client_encoding";					if ($2 != NULL)						n->args = makeList1(makeStringConst($2, NULL));					$$ = n;				}			| SESSION AUTHORIZATION ColId_or_Sconst				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "session_authorization";					n->args = makeList1(makeStringConst($3, NULL));					$$ = n;				}			| SESSION AUTHORIZATION DEFAULT				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = "session_authorization";					n->args = NIL;					$$ = n;				}		;var_list_or_default:			var_list								{ $$ = $1; }			| DEFAULT								{ $$ = NIL; }		;var_list:	var_value								{ $$ = makeList1($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 COMMITTED							{ $$ = "read committed"; }			| 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 ColId				{					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;				}

⌨️ 快捷键说明

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