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

📄 preproc.y

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 Y
📖 第 1 页 / 共 5 页
字号:
		{			$$ = cat_str(3, make_str("like"), $2, $3);		}		;like_including_defaults:		INCLUDING DEFAULTS      { $$ = make_str("including defaults"); }              | EXCLUDING DEFAULTS	{ $$ = make_str("excluding defaults"); }              | /* EMPTY */		{ $$ = EMPTY; } 	      ;/* ConstraintElem specifies constraint syntax which is not embedded into *	a column definition. ColConstraintElem specifies the embedded form. * - thomas 1997-12-03 */TableConstraint:  CONSTRAINT name ConstraintElem			{ $$ = cat_str(3, make_str("constraint"), $2, $3); }		| ConstraintElem			{ $$ = $1; }		;ConstraintElem:  CHECK '(' a_expr ')'			{ $$ = cat_str(3, make_str("check("), $3, make_str(")")); }		| UNIQUE '(' columnList ')' OptConsTableSpace			{ $$ = cat_str(4, make_str("unique("), $3, make_str(")"), $5); }		| PRIMARY KEY '(' columnList ')' OptConsTableSpace			{ $$ = cat_str(4, make_str("primary key("), $4, make_str(")"), $6); }		| FOREIGN KEY '(' columnList ')' REFERENCES qualified_name opt_column_list			key_match key_actions ConstraintAttributeSpec			{ $$ = cat_str(8, make_str("foreign key("), $4, make_str(") references"), $7, $8, $9, $10, $11); }		;opt_column_list:  '(' columnList ')'	{ $$ = cat_str(3, make_str("("), $2, make_str(")")); }               | /*EMPTY*/		{ $$ = EMPTY; }	       ;columnList:  columnList ',' columnElem                               { $$ = cat_str(3, $1, make_str(","), $3); }               | columnElem                               { $$ = $1; }               ;columnElem:  ColId	{ $$ = $1; }		;key_match:	MATCH FULL			{ $$ = make_str("match full"); }		| MATCH PARTIAL		{			mmerror(PARSE_ERROR, ET_WARNING, "Currently unsupported FOREIGN KEY/MATCH PARTIAL will be passed to backend");			$$ = make_str("match partial");		}		| /*EMPTY*/			{ $$ = EMPTY; }		;key_actions:  key_delete			{ $$ = $1; }		| key_update				{ $$ = $1; }		| key_delete key_update 	{ $$ = cat2_str($1, $2); }		| key_update key_delete 	{ $$ = cat2_str($1, $2); }		| /*EMPTY*/					{ $$ = EMPTY; }		;key_delete: ON DELETE_P key_action			{ $$ = cat2_str(make_str("on delete"), $3); }		;key_update: ON UPDATE key_action			{ $$ = cat2_str(make_str("on update"), $3); }		;key_action:	NO ACTION			{ $$ = make_str("no action"); }		| RESTRICT					{ $$ = make_str("restrict"); }		| CASCADE					{ $$ = make_str("cascade"); }		| SET DEFAULT				{ $$ = make_str("set default"); }		| SET NULL_P				{ $$ = make_str("set null"); }		;OptInherit:  INHERITS '(' qualified_name_list ')'			{ $$ = cat_str(3, make_str("inherits ("), $3, make_str(")")); }		| /*EMPTY*/			{ $$ = EMPTY; }		;OptWithOids:  WITH OIDS				{ $$ = make_str("with oids"); }		| WITHOUT OIDS				{ $$ = make_str("without oids"); }		| /*EMPTY*/					{ $$ = EMPTY; }		;OnCommitOption:   ON COMMIT DROP		{ $$ = make_str("on commit drop"); }		| ON COMMIT DELETE_P ROWS	{ $$ = make_str("on commit delete rows"); }		| ON COMMIT PRESERVE ROWS	{ $$ = make_str("on commit preserve rows"); }		| /*EMPTY*/			{ $$ = EMPTY; }		;OptTableSpace:  TABLESPACE name	{ $$ = cat2_str(make_str("tablespace"), $2); }		| /*EMPTY*/	{ $$ = EMPTY; }		;OptConsTableSpace: USING INDEX TABLESPACE name	{ $$ = cat2_str(make_str("using index tablespace"), $4); }			| /*EMPTY*/		{ $$ = EMPTY; }			;			/* * Note: CREATE TABLE ... AS SELECT ... is just another spelling for * SELECT ... INTO. */CreateAsStmt:  CREATE OptTemp TABLE qualified_name OptCreateAs WithOidsAs		{ FoundInto = 0; }		SelectStmt		{			if (FoundInto == 1)				mmerror(PARSE_ERROR, ET_ERROR, "CREATE TABLE / AS SELECT may not specify INTO");			$$ = cat_str(7, make_str("create"), $2, make_str("table"), $4, $5, $6, $8);		}		;/* * To avoid a shift/reduce conflict in CreateAsStmt, we need to * include the 'AS' terminal in the parsing of WITH/WITHOUT * OIDS. Unfortunately that means this production is effectively a * duplicate of OptWithOids. */WithOidsAs:                       WITH OIDS AS                 { $$ = make_str("with oids as"); }                       | WITHOUT OIDS AS            { $$ = make_str("without oids as"); }                       | AS                         { $$ = make_str("as"); }                       ;OptCreateAs:  '(' CreateAsList ')'			{ $$ = cat_str(3, make_str("("), $2, make_str(")")); }		| /*EMPTY*/			{ $$ = EMPTY; }		;CreateAsList:  CreateAsList ',' CreateAsElement			{ $$ = cat_str(3, $1, make_str(","), $3); }		| CreateAsElement			{ $$ = $1; }		;CreateAsElement:  ColId { $$ = $1; }		;/***************************************************************************** * *		QUERY : *				CREATE SEQUENCE seqname *                              ALTER SEQUENCE seqname * *****************************************************************************/CreateSeqStmt:	CREATE OptTemp SEQUENCE qualified_name OptSeqList			{ $$ = cat_str(5, make_str("create"), $2, make_str("sequence"), $4, $5); }		;AlterSeqStmt: ALTER SEQUENCE qualified_name OptSeqList			{ $$ = cat_str(3,make_str("alter sequence"), $3, $4); }		;OptSeqList:  OptSeqList OptSeqElem	{ $$ = cat2_str($1, $2); }		| /*EMPTY*/					{ $$ = EMPTY; }		;OptSeqElem:  CACHE NumConst			{ $$ = cat2_str(make_str("cache"), $2); }		| CYCLE			{ $$ = make_str("cycle"); }		| NO CYCLE			{ $$ = make_str("no cycle"); }		| INCREMENT opt_by NumConst			{ $$ = cat_str(3, make_str("increment"), $2, $3); }		| MAXVALUE NumConst			{ $$ = cat2_str(make_str("maxvalue"), $2); }		| MINVALUE NumConst			{ $$ = cat2_str(make_str("minvalue"), $2); }		| NO MAXVALUE			{ $$ = make_str("no maxvalue"); }		| NO MINVALUE			{ $$ = make_str("no minvalue"); }		| START opt_with NumConst			{ $$ = cat_str(3, make_str("start"), $2, $3); }		| RESTART opt_with NumConst			{ $$ = cat_str(3, make_str("restart"), $2, $3); }		;opt_by:		BY	{ $$ = make_str("by"); }		| /*EMPTY*/	{ $$ = EMPTY; }		;/***************************************************************************** * *		QUERIES : *				CREATE PROCEDURAL LANGUAGE ... *				DROP PROCEDURAL LANGUAGE ... * *****************************************************************************/CreatePLangStmt:  CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst			{ $$ = cat_str(5, make_str("create"), $2, $3, make_str("language"), $5); }		| CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst			HANDLER handler_name opt_validator opt_lancompiler			{ $$ = cat_str(9, make_str("create"), $2, $3, make_str("language"), $5, make_str("handler"), $7, $8, $9); }		;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 simple names instead. */handler_name: name	{ $$ = $1; }	| name attrs    { $$ = cat2_str($1, $2); }               ;opt_validator: VALIDATOR handler_name			{ $$ = cat2_str(make_str("validator"), $2); }		| /*EMPTY*/			{ $$ = ""; }		;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; }		;/***************************************************************************** * *             QUERY: *             CREATE TABLESPACE tablespace LOCATION '/path/to/tablespace/' * *****************************************************************************/CreateTableSpaceStmt: CREATE TABLESPACE name OptTableSpaceOwner LOCATION Sconst			{ $$ = cat_str(5,make_str("create tablespace"), $3, $4, make_str("location"), $6); }		;OptTableSpaceOwner: OWNER name	{ $$ = cat2_str(make_str("owner"), $2); }		| /*EMPTY*/ 	{ $$ = EMPTY; }		;/***************************************************************************** * *             QUERY : *                             DROP TABLESPACE <tablespace> * *             No need for drop behaviour as we cannot implement dependencies for *             objects in other databases; we can only support RESTRICT. * ****************************************************************************/DropTableSpaceStmt: DROP TABLESPACE name	{ $$ = cat2_str(make_str("drop tablespace"), $3); };/***************************************************************************** * *		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    

⌨️ 快捷键说明

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