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

📄 gram.y

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 Y
📖 第 1 页 / 共 5 页
字号:
			| ConstraintsSetStmt			| CopyStmt			| CreateAsStmt			| CreateAssertStmt			| CreateCastStmt			| CreateConversionStmt			| CreateDomainStmt			| CreateFunctionStmt			| CreateGroupStmt			| CreateOpClassStmt			| CreatePLangStmt			| CreateSchemaStmt			| CreateSeqStmt			| CreateStmt			| CreateTableSpaceStmt			| CreateTrigStmt			| CreateRoleStmt			| CreateUserStmt			| CreatedbStmt			| DeallocateStmt			| DeclareCursorStmt			| DefineStmt			| DeleteStmt			| DropAssertStmt			| DropCastStmt			| DropGroupStmt			| DropOpClassStmt			| DropPLangStmt			| DropRuleStmt			| DropStmt			| DropTableSpaceStmt			| DropTrigStmt			| DropRoleStmt			| DropUserStmt			| DropdbStmt			| ExecuteStmt			| ExplainStmt			| FetchStmt			| GrantStmt			| GrantRoleStmt			| IndexStmt			| InsertStmt			| ListenStmt			| LoadStmt			| LockStmt			| NotifyStmt			| PrepareStmt			| ReindexStmt			| RemoveAggrStmt			| RemoveFuncStmt			| RemoveOperStmt			| RenameStmt			| RevokeStmt			| RevokeRoleStmt			| RuleStmt			| SelectStmt			| TransactionStmt			| TruncateStmt			| UnlistenStmt			| UpdateStmt			| VacuumStmt			| VariableResetStmt			| VariableSetStmt			| VariableShowStmt			| ViewStmt			| /*EMPTY*/				{ $$ = NULL; }		;/***************************************************************************** * * Create a new Postgres DBMS role * *****************************************************************************/CreateRoleStmt:			CREATE ROLE RoleId opt_with OptRoleList				{					CreateRoleStmt *n = makeNode(CreateRoleStmt);					n->stmt_type = ROLESTMT_ROLE;					n->role = $3;					n->options = $5;					$$ = (Node *)n;				}		;opt_with:	WITH									{}			| /*EMPTY*/								{}		;/* * Options for CREATE ROLE and ALTER ROLE (also used by CREATE/ALTER USER * for backwards compatibility).  Note: the only option required by SQL99 * is "WITH ADMIN name". */OptRoleList:			OptRoleList OptRoleElem					{ $$ = lappend($1, $2); }			| /* EMPTY */							{ $$ = NIL; }		;OptRoleElem:			PASSWORD Sconst				{					$$ = makeDefElem("password",									 (Node *)makeString($2));				}			| ENCRYPTED PASSWORD Sconst				{					$$ = makeDefElem("encryptedPassword",									 (Node *)makeString($3));				}			| UNENCRYPTED PASSWORD Sconst				{					$$ = makeDefElem("unencryptedPassword",									 (Node *)makeString($3));				}			| SUPERUSER_P				{					$$ = makeDefElem("superuser", (Node *)makeInteger(TRUE));				}			| NOSUPERUSER				{					$$ = makeDefElem("superuser", (Node *)makeInteger(FALSE));				}			| INHERIT				{					$$ = makeDefElem("inherit", (Node *)makeInteger(TRUE));				}			| NOINHERIT				{					$$ = makeDefElem("inherit", (Node *)makeInteger(FALSE));				}			| CREATEDB				{					$$ = makeDefElem("createdb", (Node *)makeInteger(TRUE));				}			| NOCREATEDB				{					$$ = makeDefElem("createdb", (Node *)makeInteger(FALSE));				}			| CREATEROLE				{					$$ = makeDefElem("createrole", (Node *)makeInteger(TRUE));				}			| NOCREATEROLE				{					$$ = makeDefElem("createrole", (Node *)makeInteger(FALSE));				}			| CREATEUSER				{					/* For backwards compatibility, synonym for SUPERUSER */					$$ = makeDefElem("superuser", (Node *)makeInteger(TRUE));				}			| NOCREATEUSER				{					$$ = makeDefElem("superuser", (Node *)makeInteger(FALSE));				}			| LOGIN_P				{					$$ = makeDefElem("canlogin", (Node *)makeInteger(TRUE));				}			| NOLOGIN_P				{					$$ = makeDefElem("canlogin", (Node *)makeInteger(FALSE));				}			| CONNECTION LIMIT SignedIconst				{					$$ = makeDefElem("connectionlimit", (Node *)makeInteger($3));				}			| VALID UNTIL Sconst				{					$$ = makeDefElem("validUntil", (Node *)makeString($3));				}		/*	Supported but not documented for roles, for use by ALTER GROUP. */			| USER name_list				{					$$ = makeDefElem("rolemembers", (Node *)$2);				}		/* The following are not supported by ALTER ROLE/USER/GROUP */			| SYSID Iconst				{					$$ = makeDefElem("sysid", (Node *)makeInteger($2));				}			| ADMIN name_list				{					$$ = makeDefElem("adminmembers", (Node *)$2);				}			| ROLE name_list				{					$$ = makeDefElem("rolemembers", (Node *)$2);				}			| IN_P ROLE name_list				{					$$ = makeDefElem("addroleto", (Node *)$3);				}			| IN_P GROUP_P name_list				{					$$ = makeDefElem("addroleto", (Node *)$3);				}		;/***************************************************************************** * * Create a new Postgres DBMS user (role with implied login ability) * *****************************************************************************/CreateUserStmt:			CREATE USER RoleId opt_with OptRoleList				{					CreateRoleStmt *n = makeNode(CreateRoleStmt);					n->stmt_type = ROLESTMT_USER;					n->role = $3;					n->options = $5;					$$ = (Node *)n;				}		;/***************************************************************************** * * Alter a postgresql DBMS role * *****************************************************************************/AlterRoleStmt:			ALTER ROLE RoleId opt_with OptRoleList				 {					AlterRoleStmt *n = makeNode(AlterRoleStmt);					n->role = $3;					n->action = +1;	/* add, if there are members */					n->options = $5;					$$ = (Node *)n;				 }		;AlterRoleSetStmt:			ALTER ROLE RoleId SET set_rest				{					AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);					n->role = $3;					n->variable = $5->name;					n->value = $5->args;					$$ = (Node *)n;				}			| ALTER ROLE RoleId VariableResetStmt				{					AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);					n->role = $3;					n->variable = ((VariableResetStmt *)$4)->name;					n->value = NIL;					$$ = (Node *)n;				}		;/***************************************************************************** * * Alter a postgresql DBMS user * *****************************************************************************/AlterUserStmt:			ALTER USER RoleId opt_with OptRoleList				 {					AlterRoleStmt *n = makeNode(AlterRoleStmt);					n->role = $3;					n->action = +1;	/* add, if there are members */					n->options = $5;					$$ = (Node *)n;				 }		;AlterUserSetStmt:			ALTER USER RoleId SET set_rest				{					AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);					n->role = $3;					n->variable = $5->name;					n->value = $5->args;					$$ = (Node *)n;				}			| ALTER USER RoleId VariableResetStmt				{					AlterRoleSetStmt *n = makeNode(AlterRoleSetStmt);					n->role = $3;					n->variable = ((VariableResetStmt *)$4)->name;					n->value = NIL;					$$ = (Node *)n;				}			;/***************************************************************************** * * Drop a postgresql DBMS role * * XXX Ideally this would have CASCADE/RESTRICT options, but since a role * might own objects in multiple databases, there is presently no way to * implement either cascading or restricting.  Caveat DBA. *****************************************************************************/DropRoleStmt:			DROP ROLE name_list				{					DropRoleStmt *n = makeNode(DropRoleStmt);					n->roles = $3;					$$ = (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 name_list				{					DropRoleStmt *n = makeNode(DropRoleStmt);					n->roles = $3;					$$ = (Node *)n;				}			;/***************************************************************************** * * Create a postgresql group (role without login ability) * *****************************************************************************/CreateGroupStmt:			CREATE GROUP_P RoleId opt_with OptRoleList				{					CreateRoleStmt *n = makeNode(CreateRoleStmt);					n->stmt_type = ROLESTMT_GROUP;					n->role = $3;					n->options = $5;					$$ = (Node *)n;				}		;/***************************************************************************** * * Alter a postgresql group * *****************************************************************************/AlterGroupStmt:			ALTER GROUP_P RoleId add_drop USER name_list				{					AlterRoleStmt *n = makeNode(AlterRoleStmt);					n->role = $3;					n->action = $4;					n->options = list_make1(makeDefElem("rolemembers",														(Node *)$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 name_list				{					DropRoleStmt *n = makeNode(DropRoleStmt);					n->roles = $3;					$$ = (Node *)n;				}		;/***************************************************************************** * * Manipulate a schema * *****************************************************************************/CreateSchemaStmt:			CREATE SCHEMA OptSchemaName AUTHORIZATION RoleId 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			| IndexStmt			| CreateSeqStmt			| CreateTrigStmt			| 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:  var_name TO var_list_or_default				{					VariableSetStmt *n = makeNode(VariableSetStmt);					n->name = $1;					n->args = $3;					$$ = n;				}			| var_name '=' 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 = list_make1($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";

⌨️ 快捷键说明

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