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

📄 gram.y

📁 PostgreSQL 8.1.4的源码 适用于Linux下的开源数据库系统
💻 Y
📖 第 1 页 / 共 5 页
字号:
					n->fk_del_action	= (char) ($10 & 0xFF);					n->deferrable		= ($11 & 1) != 0;					n->initdeferred		= ($11 & 2) != 0;					$$ = (Node *)n;				}		;opt_column_list:			'(' columnList ')'						{ $$ = $2; }			| /*EMPTY*/								{ $$ = NIL; }		;columnList:			columnElem								{ $$ = list_make1($1); }			| columnList ',' columnElem				{ $$ = lappend($1, $3); }		;columnElem: ColId				{					$$ = (Node *) makeString($1);				}		;key_match:  MATCH FULL			{				$$ = FKCONSTR_MATCH_FULL;			}		| MATCH PARTIAL			{				ereport(ERROR,						(errcode(ERRCODE_FEATURE_NOT_SUPPORTED),						 errmsg("MATCH PARTIAL not yet implemented")));				$$ = FKCONSTR_MATCH_PARTIAL;			}		| MATCH SIMPLE			{				$$ = FKCONSTR_MATCH_UNSPECIFIED;			}		| /*EMPTY*/			{				$$ = FKCONSTR_MATCH_UNSPECIFIED;			}		;/* * We combine the update and delete actions into one value temporarily * for simplicity of parsing, and then break them down again in the * calling production.  update is in the left 8 bits, delete in the right. * Note that NOACTION is the default. */key_actions:			key_update				{ $$ = ($1 << 8) | (FKCONSTR_ACTION_NOACTION & 0xFF); }			| key_delete				{ $$ = (FKCONSTR_ACTION_NOACTION << 8) | ($1 & 0xFF); }			| key_update key_delete				{ $$ = ($1 << 8) | ($2 & 0xFF); }			| key_delete key_update				{ $$ = ($2 << 8) | ($1 & 0xFF); }			| /*EMPTY*/				{ $$ = (FKCONSTR_ACTION_NOACTION << 8) | (FKCONSTR_ACTION_NOACTION & 0xFF); }		;key_update: ON UPDATE key_action		{ $$ = $3; }		;key_delete: ON DELETE_P key_action		{ $$ = $3; }		;key_action:			NO ACTION					{ $$ = FKCONSTR_ACTION_NOACTION; }			| RESTRICT					{ $$ = FKCONSTR_ACTION_RESTRICT; }			| CASCADE					{ $$ = FKCONSTR_ACTION_CASCADE; }			| SET NULL_P				{ $$ = FKCONSTR_ACTION_SETNULL; }			| SET DEFAULT				{ $$ = FKCONSTR_ACTION_SETDEFAULT; }		;OptInherit: INHERITS '(' qualified_name_list ')'	{ $$ = $3; }			| /*EMPTY*/								{ $$ = NIL; }		;OptWithOids:			WITH OIDS								{ $$ = MUST_HAVE_OIDS; }			| WITHOUT OIDS							{ $$ = MUST_NOT_HAVE_OIDS; }			| /*EMPTY*/								{ $$ = DEFAULT_OIDS; }		;OnCommitOption:  ON COMMIT DROP				{ $$ = ONCOMMIT_DROP; }			| ON COMMIT DELETE_P ROWS		{ $$ = ONCOMMIT_DELETE_ROWS; }			| ON COMMIT PRESERVE ROWS		{ $$ = ONCOMMIT_PRESERVE_ROWS; }			| /*EMPTY*/						{ $$ = ONCOMMIT_NOOP; }		;OptTableSpace:   TABLESPACE name					{ $$ = $2; }			| /*EMPTY*/								{ $$ = NULL; }		;OptConsTableSpace:   USING INDEX TABLESPACE name	{ $$ = $4; }			| /*EMPTY*/								{ $$ = NULL; }		;/* * Note: CREATE TABLE ... AS SELECT ... is just another spelling for * SELECT ... INTO. */CreateAsStmt:			CREATE OptTemp TABLE qualified_name OptCreateAs WithOidsAs SelectStmt				{					/*					 * When the SelectStmt is a set-operation tree, we must					 * stuff the INTO information into the leftmost component					 * Select, because that's where analyze.c will expect					 * to find it.	Similarly, the output column names must					 * be attached to that Select's target list.					 */					SelectStmt *n = findLeftmostSelect((SelectStmt *) $7);					if (n->into != NULL)						ereport(ERROR,								(errcode(ERRCODE_SYNTAX_ERROR),								 errmsg("CREATE TABLE AS may not specify INTO")));					$4->istemp = $2;					n->into = $4;					n->intoColNames = $5;					n->intoHasOids = $6;					$$ = $7;				}		;/* * 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 							{ $$ = MUST_HAVE_OIDS; }			| WITHOUT OIDS AS 						{ $$ = MUST_NOT_HAVE_OIDS; }			| AS 									{ $$ = DEFAULT_OIDS; }			;OptCreateAs:			'(' CreateAsList ')'					{ $$ = $2; }			| /*EMPTY*/								{ $$ = NIL; }		;CreateAsList:			CreateAsElement							{ $$ = list_make1($1); }			| CreateAsList ',' CreateAsElement		{ $$ = lappend($1, $3); }		;CreateAsElement:			ColId				{					ColumnDef *n = makeNode(ColumnDef);					n->colname = $1;					n->typename = NULL;					n->inhcount = 0;					n->is_local = true;					n->is_not_null = false;					n->raw_default = NULL;					n->cooked_default = NULL;					n->constraints = NIL;					n->support = NULL;					$$ = (Node *)n;				}		;/***************************************************************************** * *		QUERY : *				CREATE SEQUENCE seqname *				ALTER SEQUENCE seqname * *****************************************************************************/CreateSeqStmt:			CREATE OptTemp SEQUENCE qualified_name OptSeqList				{					CreateSeqStmt *n = makeNode(CreateSeqStmt);					$4->istemp = $2;					n->sequence = $4;					n->options = $5;					$$ = (Node *)n;				}		;AlterSeqStmt:			ALTER SEQUENCE qualified_name OptSeqList				{					AlterSeqStmt *n = makeNode(AlterSeqStmt);					n->sequence = $3;					n->options = $4;					$$ = (Node *)n;				}		;OptSeqList: OptSeqList OptSeqElem					{ $$ = lappend($1, $2); }			| /*EMPTY*/								{ $$ = NIL; }		;OptSeqElem: CACHE NumericOnly				{					$$ = makeDefElem("cache", (Node *)$2);				}			| CYCLE				{					$$ = makeDefElem("cycle", (Node *)makeInteger(TRUE));				}			| NO CYCLE				{					$$ = makeDefElem("cycle", (Node *)makeInteger(FALSE));				}			| INCREMENT opt_by NumericOnly				{					$$ = makeDefElem("increment", (Node *)$3);				}			| MAXVALUE NumericOnly				{					$$ = makeDefElem("maxvalue", (Node *)$2);				}			| MINVALUE NumericOnly				{					$$ = makeDefElem("minvalue", (Node *)$2);				}			| NO MAXVALUE				{					$$ = makeDefElem("maxvalue", NULL);				}			| NO MINVALUE				{					$$ = makeDefElem("minvalue", NULL);				}			| START opt_with NumericOnly				{					$$ = makeDefElem("start", (Node *)$3);				}			| RESTART opt_with NumericOnly				{					$$ = makeDefElem("restart", (Node *)$3);				}		;opt_by:		BY				{}			| /* empty */	{}	  ;NumericOnly:			FloatOnly								{ $$ = $1; }			| IntegerOnly							{ $$ = $1; }		;FloatOnly:	FCONST									{ $$ = makeFloat($1); }			| '-' FCONST				{					$$ = makeFloat($2);					doNegateFloat($$);				}		;IntegerOnly: SignedIconst							{ $$ = makeInteger($1); };/***************************************************************************** * *		QUERIES : *				CREATE PROCEDURAL LANGUAGE ... *				DROP PROCEDURAL LANGUAGE ... * *****************************************************************************/CreatePLangStmt:			CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst			{				CreatePLangStmt *n = makeNode(CreatePLangStmt);				n->plname = $5;				/* parameters are all to be supplied by system */				n->plhandler = NIL;				n->plvalidator = NIL;				n->pltrusted = false;				$$ = (Node *)n;			}			| CREATE opt_trusted opt_procedural LANGUAGE ColId_or_Sconst			  HANDLER handler_name opt_validator opt_lancompiler			{				CreatePLangStmt *n = makeNode(CreatePLangStmt);				n->plname = $5;				n->plhandler = $7;				n->plvalidator = $8;				n->pltrusted = $2;				/* LANCOMPILER is now ignored entirely */				$$ = (Node *)n;			}		;opt_trusted:			TRUSTED									{ $$ = TRUE; }			| /*EMPTY*/								{ $$ = FALSE; }		;/* 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						{ $$ = list_make1(makeString($1)); }			| name attrs				{ $$ = lcons(makeString($1), $2); }		;opt_validator:			VALIDATOR handler_name					{ $$ = $2; }			| /*EMPTY*/								{ $$ = NIL; }		;opt_lancompiler:			LANCOMPILER Sconst						{ $$ = $2; }			| /*EMPTY*/								{ $$ = NULL; }		;DropPLangStmt:			DROP opt_procedural LANGUAGE ColId_or_Sconst opt_drop_behavior				{					DropPLangStmt *n = makeNode(DropPLangStmt);					n->plname = $4;					n->behavior = $5;					$$ = (Node *)n;				}		;opt_procedural:			PROCEDURAL								{}			| /*EMPTY*/								{}		;/***************************************************************************** * * 		QUERY: *             CREATE TABLESPACE tablespace LOCATION '/path/to/tablespace/' * *****************************************************************************/CreateTableSpaceStmt: CREATE TABLESPACE name OptTableSpaceOwner LOCATION Sconst				{					CreateTableSpaceStmt *n = makeNode(CreateTableSpaceStmt);					n->tablespacename = $3;					n->owner = $4;					n->location = $6;					$$ = (Node *) n;				}		;OptTableSpaceOwner: OWNER name			{ $$ = $2; }			| /*EMPTY */				{ $$ = NULL; }		;/***************************************************************************** * * 		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				{					DropTableSpaceStmt *n = makeNode(DropTableSpaceStmt);					n->tablespacename = $3;					$$ = (Node *) n;				}		;/***************************************************************************** * *		QUERIES : *				CREATE TRIGGER ... *				DROP TRIGGER ... * *****************************************************************************/CreateTrigStmt:			CREATE TRIGGER name TriggerActionTime TriggerEvents ON			qualified_name TriggerForSpec EXECUTE PROCEDURE			func_name '(' TriggerFuncArgs ')'				{					CreateTrigStmt *n = makeNode(CreateTrigStmt);					n->trigname = $3;					n->relation = $7;					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							{ $$ = list_make1($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; }			| /*

⌨️ 快捷键说明

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