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

📄 gram.y

📁 PostgreSQL7.4.6 for Linux
💻 Y
📖 第 1 页 / 共 5 页
字号:
					n->funcname = $11;					n->args = $13;					n->before = $4;					n->row = $8;					memcpy(n->actions, $5, 4);					n->isconstraint  = FALSE;					n->deferrable	 = FALSE;					n->initdeferred  = FALSE;					n->constrrel = NULL;					$$ = (Node *)n;				}			| CREATE CONSTRAINT TRIGGER name AFTER TriggerEvents ON			qualified_name OptConstrFromTable			ConstraintAttributeSpec			FOR EACH ROW EXECUTE PROCEDURE			func_name '(' TriggerFuncArgs ')'				{					CreateTrigStmt *n = makeNode(CreateTrigStmt);					n->trigname = $4;					n->relation = $8;					n->funcname = $16;					n->args = $18;					n->before = FALSE;					n->row = TRUE;					memcpy(n->actions, $6, 4);					n->isconstraint  = TRUE;					n->deferrable = ($10 & 1) != 0;					n->initdeferred = ($10 & 2) != 0;					n->constrrel = $9;					$$ = (Node *)n;				}		;TriggerActionTime:			BEFORE									{ $$ = TRUE; }			| AFTER									{ $$ = FALSE; }		;TriggerEvents:			TriggerOneEvent				{					char *e = palloc(4);					e[0] = $1; e[1] = '\0';					$$ = e;				}			| TriggerOneEvent OR TriggerOneEvent				{					char *e = palloc(4);					e[0] = $1; e[1] = $3; e[2] = '\0';					$$ = e;				}			| TriggerOneEvent OR TriggerOneEvent OR TriggerOneEvent				{					char *e = palloc(4);					e[0] = $1; e[1] = $3; e[2] = $5; e[3] = '\0';					$$ = e;				}		;TriggerOneEvent:			INSERT									{ $$ = 'i'; }			| DELETE_P								{ $$ = 'd'; }			| UPDATE								{ $$ = 'u'; }		;TriggerForSpec:			FOR TriggerForOpt TriggerForType				{					$$ = $3;				}			| /* EMPTY */				{					/*					 * If ROW/STATEMENT not specified, default to					 * STATEMENT, per SQL					 */					$$ = FALSE;				}		;TriggerForOpt:			EACH									{}			| /*EMPTY*/								{}		;TriggerForType:			ROW										{ $$ = TRUE; }			| STATEMENT								{ $$ = FALSE; }		;TriggerFuncArgs:			TriggerFuncArg							{ $$ = makeList1($1); }			| TriggerFuncArgs ',' TriggerFuncArg	{ $$ = lappend($1, $3); }			| /*EMPTY*/								{ $$ = NIL; }		;TriggerFuncArg:			ICONST				{					char buf[64];					snprintf(buf, sizeof(buf), "%d", $1);					$$ = makeString(pstrdup(buf));				}			| FCONST								{ $$ = makeString($1); }			| Sconst								{ $$ = makeString($1); }			| BCONST								{ $$ = makeString($1); }			| XCONST								{ $$ = makeString($1); }			| ColId									{ $$ = makeString($1); }		;OptConstrFromTable:			FROM qualified_name						{ $$ = $2; }			| /*EMPTY*/								{ $$ = NULL; }		;ConstraintAttributeSpec:			ConstraintDeferrabilitySpec				{ $$ = $1; }			| ConstraintDeferrabilitySpec ConstraintTimeSpec				{					if ($1 == 0 && $2 != 0)						ereport(ERROR,								(errcode(ERRCODE_SYNTAX_ERROR),								 errmsg("constraint declared INITIALLY DEFERRED must be DEFERRABLE")));					$$ = $1 | $2;				}			| ConstraintTimeSpec				{					if ($1 != 0)						$$ = 3;					else						$$ = 0;				}			| ConstraintTimeSpec ConstraintDeferrabilitySpec				{					if ($2 == 0 && $1 != 0)						ereport(ERROR,								(errcode(ERRCODE_SYNTAX_ERROR),								 errmsg("constraint declared INITIALLY DEFERRED must be DEFERRABLE")));					$$ = $1 | $2;				}			| /*EMPTY*/				{ $$ = 0; }		;ConstraintDeferrabilitySpec:			NOT DEFERRABLE							{ $$ = 0; }			| DEFERRABLE							{ $$ = 1; }		;ConstraintTimeSpec:			INITIALLY IMMEDIATE						{ $$ = 0; }			| INITIALLY DEFERRED					{ $$ = 2; }		;DropTrigStmt:			DROP TRIGGER name ON qualified_name opt_drop_behavior				{					DropPropertyStmt *n = makeNode(DropPropertyStmt);					n->relation = $5;					n->property = $3;					n->behavior = $6;					n->removeType = OBJECT_TRIGGER;					$$ = (Node *) n;				}		;/***************************************************************************** * *		QUERIES : *				CREATE ASSERTION ... *				DROP ASSERTION ... * *****************************************************************************/CreateAssertStmt:			CREATE ASSERTION name CHECK '(' a_expr ')'			ConstraintAttributeSpec				{					CreateTrigStmt *n = makeNode(CreateTrigStmt);					n->trigname = $3;					n->args = makeList1($6);					n->isconstraint  = TRUE;					n->deferrable = ($8 & 1) != 0;					n->initdeferred = ($8 & 2) != 0;					ereport(ERROR,							(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),							 errmsg("CREATE ASSERTION is not yet implemented")));					$$ = (Node *)n;				}		;DropAssertStmt:			DROP ASSERTION name opt_drop_behavior				{					DropPropertyStmt *n = makeNode(DropPropertyStmt);					n->relation = NULL;					n->property = $3;					n->behavior = $4;					n->removeType = OBJECT_TRIGGER; /* XXX */					ereport(ERROR,							(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),							 errmsg("DROP ASSERTION is not yet implemented")));					$$ = (Node *) n;				}		;/***************************************************************************** * *		QUERY : *				define (aggregate,operator,type) * *****************************************************************************/DefineStmt:			CREATE AGGREGATE func_name definition				{					DefineStmt *n = makeNode(DefineStmt);					n->kind = OBJECT_AGGREGATE;					n->defnames = $3;					n->definition = $4;					$$ = (Node *)n;				}			| CREATE OPERATOR any_operator definition				{					DefineStmt *n = makeNode(DefineStmt);					n->kind = OBJECT_OPERATOR;					n->defnames = $3;					n->definition = $4;					$$ = (Node *)n;				}			| CREATE TYPE_P any_name definition				{					DefineStmt *n = makeNode(DefineStmt);					n->kind = OBJECT_TYPE;					n->defnames = $3;					n->definition = $4;					$$ = (Node *)n;				}			| CREATE TYPE_P any_name AS '(' TableFuncElementList ')'				{					CompositeTypeStmt *n = makeNode(CompositeTypeStmt);					RangeVar *r = makeNode(RangeVar);					/* can't use qualified_name, sigh */					switch (length($3))					{						case 1:							r->catalogname = NULL;							r->schemaname = NULL;							r->relname = strVal(lfirst($3));							break;						case 2:							r->catalogname = NULL;							r->schemaname = strVal(lfirst($3));							r->relname = strVal(lsecond($3));							break;						case 3:							r->catalogname = strVal(lfirst($3));							r->schemaname = strVal(lsecond($3));							r->relname = strVal(lthird($3));							break;						default:							ereport(ERROR,									(errcode(ERRCODE_SYNTAX_ERROR),									 errmsg("improper qualified name (too many dotted names): %s",											NameListToString($3))));							break;					}					n->typevar = r;					n->coldeflist = $6;					$$ = (Node *)n;				}		;definition: '(' def_list ')'						{ $$ = $2; }		;def_list:  	def_elem								{ $$ = makeList1($1); }			| def_list ',' def_elem					{ $$ = lappend($1, $3); }		;def_elem:  ColLabel '=' def_arg				{					$$ = makeDefElem($1, (Node *)$3);				}			| ColLabel				{					$$ = makeDefElem($1, (Node *)NULL);				}		;/* Note: any simple identifier will be returned as a type name! */def_arg:	func_return						{ $$ = (Node *)$1; }			| qual_all_Op					{ $$ = (Node *)$1; }			| NumericOnly					{ $$ = (Node *)$1; }			| Sconst						{ $$ = (Node *)makeString($1); }		;/***************************************************************************** * *		QUERIES : *				CREATE OPERATOR CLASS ... *				DROP OPERATOR CLASS ... * *****************************************************************************/CreateOpClassStmt:			CREATE OPERATOR CLASS any_name opt_default FOR TYPE_P Typename			USING access_method AS opclass_item_list				{					CreateOpClassStmt *n = makeNode(CreateOpClassStmt);					n->opclassname = $4;					n->isDefault = $5;					n->datatype = $8;					n->amname = $10;					n->items = $12;					$$ = (Node *) n;				}		;opclass_item_list:			opclass_item							{ $$ = makeList1($1); }			| opclass_item_list ',' opclass_item	{ $$ = lappend($1, $3); }		;opclass_item:			OPERATOR Iconst any_operator opt_recheck				{					CreateOpClassItem *n = makeNode(CreateOpClassItem);					n->itemtype = OPCLASS_ITEM_OPERATOR;					n->name = $3;					n->args = NIL;					n->number = $2;					n->recheck = $4;					$$ = (Node *) n;				}			| OPERATOR Iconst any_operator '(' oper_argtypes ')' opt_recheck				{					CreateOpClassItem *n = makeNode(CreateOpClassItem);					n->itemtype = OPCLASS_ITEM_OPERATOR;					n->name = $3;					n->args = $5;					n->number = $2;					n->recheck = $7;					$$ = (Node *) n;				}			| FUNCTION Iconst func_name func_args				{					CreateOpClassItem *n = makeNode(CreateOpClassItem);					n->itemtype = OPCLASS_ITEM_FUNCTION;					n->name = $3;					n->args = $4;					n->number = $2;					$$ = (Node *) n;				}			| STORAGE Typename				{					CreateOpClassItem *n = makeNode(CreateOpClassItem);					n->itemtype = OPCLASS_ITEM_STORAGETYPE;					n->storedtype = $2;					$$ = (Node *) n;				}		;opt_default:	DEFAULT	{ $$ = TRUE; }			| /*EMPTY*/	{ $$ = FALSE; }		;opt_recheck:	RECHECK	{ $$ = TRUE; }			| /*EMPTY*/	{ $$ = FALSE; }		;DropOpClassStmt:			DROP OPERATOR CLASS any_name USING access_method opt_drop_behavior				{					RemoveOpClassStmt *n = makeNode(RemoveOpClassStmt);					n->opclassname = $4;					n->amname = $6;					n->behavior = $7;					$$ = (Node *) n;				}		;/***************************************************************************** * *		QUERY: * *		DROP itemtype itemname [, itemname ...] [ RESTRICT | CASCADE ] * *****************************************************************************/DropStmt:	DROP drop_type any_name_list opt_drop_behavior				{					DropStmt *n = makeNode(DropStmt);					n->removeType = $2;					n->objects = $3;					n->behavior = $4;					$$ = (Node *)n;				}		;drop_type:	TABLE									{ $$ = OBJECT_TABLE; }			| SEQUENCE								{ $$ = OBJECT_SEQUENCE; }			| VIEW									{ $$ = OBJECT_VIEW; }			| INDEX									{ $$ = OBJECT_INDEX; }			| TYPE_P								{ $$ = OBJECT_TYPE; }			| DOMAIN_P								{ $$ = OBJECT_DOMAIN; }			| CONVERSION_P							{ $$ = OBJECT_CONVERSION; }			| SCHEMA								{ $$ = OBJECT_SCHEMA; }		;any_name_list:			any_name								{ $$ = makeList1($1); }			| any_name_list ',' any_name			{ $$ = lappend($1, $3); }		;any_name:	ColId						{ $$ = makeList1(makeString($1)); }			| dotted_name				{ $$ = $1; }		;/***************************************************************************** * *		QUERY: *				truncate table relname * *****************************************************************************/TruncateStmt:			TRUNCATE opt_table qualified_name				{					TruncateStmt *n = makeNode(TruncateStmt);					n->relation = $3;					$$ = (Node *)n;				}		;/***************************************************************************** * *	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 any_name IS comment_text				{					CommentStmt *n = makeNode(CommentStmt);					n->objtype = $3;					n->objname = $4;					n->objargs = NIL;					n->comment = $6;					$$ = (Node *) n;				}			| COMMENT ON AGGREGATE func_name '(' aggr_argtype ')'			IS comment_text				{					CommentStmt *n = makeNode(CommentStmt);					n->objtype = OBJECT_AGGREGATE;					n->objname = $4;					n->objargs = makeList1($6);					n->comment = $9;					$$ = (Node *) n;				}			| COMMENT ON FUNCTION func_name func_args IS comment_text				{					CommentStmt *n = makeNode(CommentStmt);					n->objtype = OBJECT_FUNCTION;					n->objname = $4;					n->objargs = $5;					n->comment = $7;					$$ = (Node *) n;				}			| COMMENT ON OPERATOR any_operator '(' oper_argtypes ')'			IS comment_text				{					CommentStmt *n = makeNode(CommentStmt);					n->objtype = OBJECT_OPERATOR;					n->objname = $4;					n->objargs = $6;					n->comment = $9;					$$ = (Node *) n;				}			| COMMENT ON CONSTRAINT name ON any_name IS comment_text				{					CommentStmt *n = makeNode(CommentStmt);					n->objtype = OBJECT_CONSTRAINT;					n->objname = lappend($6, makeString($4));					n->objargs = NIL;					n->comment = $8;					$$ = (Node *) n;				}			| COMMENT ON RULE name ON any_name IS comment_text				{					CommentStmt *n = makeNode(CommentStmt);					n->objtype = OBJECT_RULE;					n->objname = lappend($6, makeString($4));					n->objargs = NIL;					n->comment =

⌨️ 快捷键说明

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