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

📄 preproc.y

📁 PostgreSQL7.4.6 for Linux
💻 Y
📖 第 1 页 / 共 5 页
字号:
 *		QUERIES : *				CREATE PROCEDURAL LANGUAGE ... *				DROP PROCEDURAL LANGUAGE ... * *****************************************************************************/CreatePLangStmt:  CREATE opt_Trusted opt_procedural LANGUAGE ColId_or_Sconst			HANDLER handler_name opt_lancompiler			{ $$ = cat_str(8, make_str("create"), $2, $3, make_str("language"), $5, make_str("handler"), $7, $8); }		;opt_Trusted:	TRUSTED { $$ = make_str("trusted"); }		| /*EMPTY*/		{ $$ = EMPTY; }		;/* This ought to be just func_name, but that causes reduce/reduce conflicts * (CREATE LANGUAGE is the only place where func_name isn't followed by '('). * Work around by using name and dotted_name separately. */handler_name: name                               { $$ = $1; }	| dotted_name                               { $$ = $1; /* XXX changing soon */ }               ;opt_lancompiler: LANCOMPILER StringConst			{ $$ = cat2_str(make_str("lancompiler"), $2); }		| /*EMPTY*/			{ $$ = ""; }		;DropPLangStmt:	DROP opt_procedural LANGUAGE StringConst opt_drop_behavior			{ $$ = cat_str(5, make_str("drop"), $2, make_str("language"), $4, $5); }		;opt_procedural: PROCEDURAL	{ $$ = make_str("prcedural"); }		| /*EMPTY*/			{ $$ = EMPTY; }		;/***************************************************************************** * *		QUERIES : *				CREATE TRIGGER ... *				DROP TRIGGER ... * *****************************************************************************/CreateTrigStmt:  CREATE TRIGGER name TriggerActionTime TriggerEvents ON				qualified_name TriggerForSpec				EXECUTE PROCEDURE				name '(' TriggerFuncArgs ')'			{ $$ = cat_str(12, make_str("create trigger"), $3, $4, $5, make_str("on"), $7, $8, make_str("execute procedure"), $11, make_str("("), $13, make_str(")")); }		|	CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON				qualified_name OptConstrFromTable				ConstraintAttributeSpec				FOR EACH ROW EXECUTE PROCEDURE				func_name '(' TriggerFuncArgs ')'			{ $$ = cat_str(13, make_str("create constraint trigger"), $4, make_str("after"), $6, make_str("on"), $8, $9, $10, make_str("for each row execute procedure"), $16, make_str("("), $18, make_str(")")); }		;TriggerActionTime:	BEFORE		{ $$ = make_str("before"); }		| AFTER					{ $$ = make_str("after"); }		;TriggerEvents:	TriggerOneEvent			{ $$ = $1; }		| TriggerOneEvent OR TriggerOneEvent			{ $$ = cat_str(3, $1, make_str("or"), $3); }		| TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent			{ $$ = cat_str(5, $1, make_str("or"), $3, make_str("or"), $5); }		;TriggerOneEvent:  INSERT	{ $$ = make_str("insert"); }		| DELETE_P			{ $$ = make_str("delete"); }		| UPDATE			{ $$ = make_str("update"); }		;TriggerForSpec:  FOR TriggerForOpt TriggerForType			{ $$ = cat_str(3, make_str("for"), $2, $3); }		| /* EMPTY */			{ $$ = EMPTY; }		;TriggerForOpt:	EACH		{ $$ = make_str("each"); }		| /*EMPTY*/			{ $$ = EMPTY; }		;TriggerForType:  ROW		{ $$ = make_str("row"); }		| STATEMENT			{ $$ = make_str("statement"); }		;TriggerFuncArgs:  TriggerFuncArg			{ $$ = $1; }		| TriggerFuncArgs ',' TriggerFuncArg			{ $$ = cat_str(3, $1, make_str(","), $3); }		| /*EMPTY*/			{ $$ = EMPTY; }		;TriggerFuncArg:  PosAllConst 	{ $$ = $1; }		| ColId		{ $$ = $1; }		;OptConstrFromTable: /* Empty */		{ $$ = EMPTY; }		| FROM qualified_name	{ $$ = cat2_str(make_str("from"), $2); }		;ConstraintAttributeSpec: ConstraintDeferrabilitySpec	{ $$ = $1; }		| ConstraintDeferrabilitySpec ConstraintTimeSpec		{			if (strcmp($1, "deferrable") != 0 && strcmp($2, "initially deferrable") == 0 )				mmerror(PARSE_ERROR, ET_ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");			$$ = cat2_str($1, $2);		}		| ConstraintTimeSpec		{ $$ = $1; }		| ConstraintTimeSpec ConstraintDeferrabilitySpec		{			if (strcmp($2, "deferrable") != 0 && strcmp($1, "initially deferrable") == 0 )				mmerror(PARSE_ERROR, ET_ERROR, "INITIALLY DEFERRED constraint must be DEFERRABLE");			$$ = cat2_str($1, $2);		}		;ConstraintDeferrabilitySpec: NOT DEFERRABLE			{ $$ = make_str("not deferrable"); }		| DEFERRABLE			{ $$ = make_str("deferrable"); }		;ConstraintTimeSpec: INITIALLY IMMEDIATE			{ $$ = make_str("initially immediate"); }		| INITIALLY DEFERRED			{ $$ = make_str("initially deferred"); }		;DropTrigStmt:  DROP TRIGGER name ON qualified_name opt_drop_behavior			{ $$ = cat_str(5, make_str("drop trigger"), $3, make_str("on"), $5, $6); }		;/***************************************************************************** * *             QUERIES : *                             CREATE ASSERTION ... *                             DROP ASSERTION ... * *****************************************************************************/CreateAssertStmt:  CREATE ASSERTION name                       CHECK '(' a_expr ')' ConstraintAttributeSpec		        {				mmerror(PARSE_ERROR, ET_ERROR, "CREATE ASSERTION is not yet supported");		       		$$ = cat_str(6, make_str("create assertion"), $3, make_str("check ("), $6, make_str(")"), $8);			}		;DropAssertStmt:  DROP ASSERTION name	{		mmerror(PARSE_ERROR, ET_ERROR, "DROP ASSERTION is not yet supported");		$$ = cat2_str(make_str("drop assertion"), $3);	}	;/***************************************************************************** * *		QUERY : *				define (type,operator,aggregate) * *****************************************************************************/DefineStmt:  CREATE AGGREGATE func_name definition			{ $$ = cat_str(3, make_str("create aggregate"), $3, $4); }		| CREATE OPERATOR all_Op definition			{ $$ = cat_str(3, make_str("create operator"), $3, $4); }		| CREATE TYPE_P any_name definition			{ $$ = cat_str(3, make_str("create type"), $3, $4); }		| CREATE TYPE_P any_name AS rowdefinition			{ $$ = cat_str(4, make_str("create type"), $3, make_str("as"), $5); }		;rowdefinition: '(' TableFuncElementList ')'			{ $$ = cat_str(3, make_str("("), $2, make_str(")"));}		;definition:  '(' def_list ')'			{ $$ = cat_str(3, make_str("("), $2, make_str(")")); }		;def_list:  def_elem					{ $$ = $1; }		| def_list ',' def_elem		{ $$ = cat_str(3, $1, make_str(","), $3); }		;def_elem:  ColLabel '=' def_arg		{ $$ = cat_str(3, $1, make_str("="), $3); }		| ColLabel					{ $$ = $1; }		;/* Note: any simple identifier will be returned as a type name! */def_arg:  func_return				{  $$ = $1; }		| qual_all_Op					{  $$ = $1; }		| AllConst					{  $$ = $1; }		;CreateOpClassStmt:      CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename                        USING access_method AS opclass_item_list				{					$$ = cat_str(9, make_str("create operator class"), $4, $5, make_str("for type"), $8, make_str("using"), $10, make_str("as"), $12);				}				;opclass_item_list:	opclass_item		{ $$ = $1; }			| opclass_item_list ',' opclass_item	{ $$ = cat_str(3, $1, make_str(","), $3); }			;opclass_item:	OPERATOR PosIntConst any_operator opt_recheck			{ $$ = cat_str(4, make_str("operator"), $2, $3, $4); }		| OPERATOR PosIntConst any_operator '(' oper_argtypes ')' opt_recheck			{ $$ =  cat_str(7, make_str("operator"), $2, $3, make_str("("), $5, make_str(")"), $7); }		| FUNCTION PosIntConst func_name func_args			{ $$ = cat_str(4, make_str("function"), $2, $3, $4); }		| STORAGE Typename			{ $$ = cat2_str(make_str("storage"), $2); }		;opt_default:   DEFAULT	{ $$ = make_str("default"); }	|  /*EMPTY*/    { $$ = EMPTY; }	;opt_recheck:   RECHECK	{ $$ = make_str("recheck"); }	|  /*EMPTY*/    { $$ = EMPTY; }	;DropOpClassStmt: DROP OPERATOR CLASS any_name USING access_method opt_drop_behavior			{ $$ = cat_str(5,make_str("drop operator class"), $4, make_str("using"), $6, $7); }		;/***************************************************************************** * *		QUERY: * *			   DROP itemtype itemname [, itemname ...] * *****************************************************************************/DropStmt:  DROP drop_type any_name_list opt_drop_behavior			{ $$ = cat_str(4, make_str("drop"), $2, $3, $4); }		;drop_type:	TABLE			{ $$ = make_str("table"); }		| SEQUENCE		{ $$ = make_str("sequence"); }		| VIEW			{ $$ = make_str("view"); }		| INDEX			{ $$ = make_str("index"); }		| TYPE_P		{ $$ = make_str("type"); }		| DOMAIN_P		{ $$ = make_str("domain"); }		| CONVERSION_P		{ $$ = make_str("conversion"); }		| SCHEMA		{ $$ = make_str("schema"); }		;any_name_list:  any_name                       { $$ = $1; }               | any_name_list ',' any_name                       { $$ = cat_str(3, $1, make_str(","), $3); }               ;any_name: ColId                       { $$ = $1; }               | dotted_name                       { $$ = $1; }                ;/***************************************************************************** * *			   QUERY: *							   truncate table relname * *****************************************************************************/TruncateStmt:  TRUNCATE opt_table qualified_name			{ $$ = cat_str(3, make_str("truncate table"), $2, $3); }		;/***************************************************************************** * *		QUERY: *			fetch/move * *****************************************************************************//* This is different from the backend as we try to be compatible with many other * embedded SQL implementations. So we accept their syntax as well and  * translate it to the PGSQL syntax. */ FetchStmt: FETCH fetch_direction from_in name ecpg_into_using			{				add_additional_variables($4, false);				$$ = cat_str(4, make_str("fetch"), $2, $3, $4);			}		| FETCH fetch_direction name ecpg_into_using			{				add_additional_variables($3, false);				$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);			}		| FETCH from_in name ecpg_into_using			{			        add_additional_variables($3, false);				$$ = cat_str(3, make_str("fetch"), $2, $3);			}		| FETCH name ecpg_into_using			{			        add_additional_variables($2, false);				$$ = cat2_str(make_str("fetch"), $2);			}		| FETCH fetch_direction from_in name			{			        add_additional_variables($4, false);				$$ = cat_str(4, make_str("fetch"), $2, $3, $4);			}		| FETCH fetch_direction name			{			        add_additional_variables($3, false);				$$ = cat_str(4, make_str("fetch"), $2, make_str("from"), $3);			}		| FETCH from_in name 			{				add_additional_variables($3, false);				$$ = cat_str(3, make_str("fetch"), $2, $3);			}		| FETCH name 			{			        add_additional_variables($2, false);				$$ = cat2_str(make_str("fetch"), $2);			}		| MOVE fetch_direction from_in name			{ $$ = cat_str(4, make_str("move"), $2, $3, $4); }		| MOVE name			{ $$ = cat2_str(make_str("move"), $2); }		;fetch_direction:  NEXT				{ $$ = make_str("next"); }		| PRIOR				{ $$ = make_str("prior"); }		| FIRST_P			{ $$ = make_str("first"); }		| LAST_P			{ $$ = make_str("last"); }		| ABSOLUTE_P fetch_count	{ $$ = cat2_str(make_str("absolute"), $2); }		| RELATIVE_P fetch_count	{ $$ = cat2_str(make_str("relative"), $2); }		| fetch_count			{ $$ = $1; }		| ALL				{ $$ = make_str("all"); }		| FORWARD			{ $$ = make_str("forward"); }		| FORWARD fetch_count		{ $$ = cat2_str(make_str("forward"), $2); }		| FORWARD ALL			{ $$ = make_str("forward all"); }		| BACKWARD			{ $$ = make_str("backward"); }		| BACKWARD fetch_count		{ $$ = cat2_str(make_str("backward"), $2); }		| BACKWARD ALL			{ $$ = make_str("backward all"); }		;fetch_count: IntConst	{ $$ = $1; }	;from_in: IN_P				{ $$ = make_str("in"); }		| FROM			{ $$ = make_str("from"); }		;/***************************************************************************** * *	The COMMENT ON statement can take different forms based upon the type of *	the object associated with the comment. The form of the statement is: * *	COMMENT ON [ [ DATABASE | DOMAIN | INDEX |  SEQUENCE | TABLE | TYPE | VIEW ] *				 <objname> | AGGREGATE <aggname> (<aggtype>) | FUNCTION *				<funcname> (arg1, arg2, ...) | OPERATOR <op> *				(leftoperand_typ rightoperand_typ) | TRIGGER <triggername> ON *				<relname> | RULE <rulename> ON <relname> ] IS 'text' * *****************************************************************************/CommentStmt:   COMMENT ON comment_type name IS comment_text			{ $$ = cat_str(5, make_str("comment on"), $3, $4, make_str("is"), $6); }		| COMMENT ON AGGREGATE func_name '(' aggr_argtype ')' IS comment_text			{ $$ = cat_str(6, make_str("comment on aggregate"), $4, make_str("("), $6, make_str(") is"), $9); }		| COMMENT ON FUNCTION func_name func_args IS comment_text			{ $$ = cat_str(5, make_str("comment on function"), $4, $5, make_str("is"), $7); }		| COMMENT ON OPERATOR all_Op '(' oper_argtypes ')' IS comment_text			{ $$ = cat_str(6, make_str("comment on operator"), $4, make_str("("), $6, make_str(") is"), $9); }		| COMMENT ON TRIGGER name ON any_name IS comment_text			{ $$ = cat_str(6, make_str("comment on trigger"), $4, make_str("on"), $6, make_str("is"), $8); }		| COMMENT ON RULE name ON any_name IS comment_text

⌨️ 快捷键说明

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