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

📄 gram.y

📁 关系型数据库 Postgresql 6.5.2
💻 Y
📖 第 1 页 / 共 5 页
字号:
			| USER				{	$$ = lcons( makeString( "USER"), NIL); }		;/* 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				{						Constraint *n = (Constraint *)$3;						if (n != NULL) n->name = fmtId($2);						$$ = $3;				}		| ConstraintElem				{ $$ = $1; }		;ConstraintElem:  CHECK '(' constraint_expr ')'				{					Constraint *n = makeNode(Constraint);					n->contype = CONSTR_CHECK;					n->name = NULL;					n->def = FlattenStringList($3);					$$ = (Node *)n;				}		| UNIQUE '(' columnList ')'				{					Constraint *n = makeNode(Constraint);					n->contype = CONSTR_UNIQUE;					n->name = NULL;					n->def = NULL;					n->keys = $3;					$$ = (Node *)n;				}		| PRIMARY KEY '(' columnList ')'				{					Constraint *n = makeNode(Constraint);					n->contype = CONSTR_PRIMARY;					n->name = NULL;					n->def = NULL;					n->keys = $4;					$$ = (Node *)n;				}		| FOREIGN KEY '(' columnList ')' REFERENCES ColId opt_column_list key_match key_actions				{					elog(NOTICE,"CREATE TABLE/FOREIGN KEY clause ignored; not yet implemented");					$$ = NULL;				}		;constraint_list:  constraint_list ',' constraint_expr				{					$$ = lappend($1,makeString(","));					$$ = nconc($$, $3);				}			| constraint_expr				{					$$ = $1;				}		;constraint_expr:  AexprConst				{	$$ = makeConstantList((A_Const *) $1); }			| NULL_P				{	$$ = lcons( makeString("NULL"), NIL); }			| ColId				{					$$ = lcons( makeString(fmtId($1)), NIL);				}			| '-' constraint_expr %prec UMINUS				{	$$ = lcons( makeString( "-"), $2); }			| constraint_expr '+' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "+"), $3)); }			| constraint_expr '-' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "-"), $3)); }			| constraint_expr '/' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "/"), $3)); }			| constraint_expr '%' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "%"), $3)); }			| constraint_expr '*' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "*"), $3)); }			| constraint_expr '^' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "^"), $3)); }			| constraint_expr '=' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "="), $3)); }			| constraint_expr '<' constraint_expr				{	$$ = nconc( $1, lcons( makeString( "<"), $3)); }			| constraint_expr '>' constraint_expr				{	$$ = nconc( $1, lcons( makeString( ">"), $3)); }			| ':' constraint_expr				{	$$ = lcons( makeString( ":"), $2); }			| ';' constraint_expr				{	$$ = lcons( makeString( ";"), $2); }			| '|' constraint_expr				{	$$ = lcons( makeString( "|"), $2); }			| constraint_expr TYPECAST Typename				{					$3->name = fmtId($3->name);					$$ = nconc( lcons( makeString( "CAST"), $1), makeList( makeString("AS"), $3, -1));				}			| CAST '(' constraint_expr AS Typename ')'				{					$5->name = fmtId($5->name);					$$ = nconc( lcons( makeString( "CAST"), $3), makeList( makeString("AS"), $5, -1));				}			| '(' constraint_expr ')'				{	$$ = lappend( lcons( makeString( "("), $2), makeString( ")")); }			| func_name '(' ')'				{					$$ = makeList( makeString($1), makeString("("), -1);					$$ = lappend( $$, makeString(")"));				}			| func_name '(' constraint_list ')'				{					$$ = makeList( makeString($1), makeString("("), -1);					$$ = nconc( $$, $3);					$$ = lappend( $$, makeString(")"));				}			| constraint_expr Op constraint_expr				{	$$ = nconc( $1, lcons( makeString( $2), $3)); }			| constraint_expr LIKE constraint_expr				{	$$ = nconc( $1, lcons( makeString( "LIKE"), $3)); }			| constraint_expr NOT LIKE constraint_expr				{	$$ = nconc( $1, lcons( makeString( "NOT LIKE"), $4)); }			| constraint_expr AND constraint_expr				{	$$ = nconc( $1, lcons( makeString( "AND"), $3)); }			| constraint_expr OR constraint_expr				{	$$ = nconc( $1, lcons( makeString( "OR"), $3)); }			| NOT constraint_expr				{	$$ = lcons( makeString( "NOT"), $2); }			| Op constraint_expr				{	$$ = lcons( makeString( $1), $2); }			| constraint_expr Op				{	$$ = lappend( $1, makeString( $2)); }			| constraint_expr ISNULL				{	$$ = lappend( $1, makeString( "IS NULL")); }			| constraint_expr IS NULL_P				{	$$ = lappend( $1, makeString( "IS NULL")); }			| constraint_expr NOTNULL				{	$$ = lappend( $1, makeString( "IS NOT NULL")); }			| constraint_expr IS NOT NULL_P				{	$$ = lappend( $1, makeString( "IS NOT NULL")); }			| constraint_expr IS TRUE_P				{	$$ = lappend( $1, makeString( "IS TRUE")); }			| constraint_expr IS FALSE_P				{	$$ = lappend( $1, makeString( "IS FALSE")); }			| constraint_expr IS NOT TRUE_P				{	$$ = lappend( $1, makeString( "IS NOT TRUE")); }			| constraint_expr IS NOT FALSE_P				{	$$ = lappend( $1, makeString( "IS NOT FALSE")); }			| constraint_expr IN '(' c_list ')'				{					$$ = lappend( $1, makeString("IN"));					$$ = lappend( $$, makeString("("));					$$ = nconc( $$, $4);					$$ = lappend( $$, makeString(")"));				}			| constraint_expr NOT IN '(' c_list ')'				{					$$ = lappend( $1, makeString("NOT IN"));					$$ = lappend( $$, makeString("("));					$$ = nconc( $$, $5);					$$ = lappend( $$, makeString(")"));				}			| constraint_expr BETWEEN c_expr AND c_expr				{					$$ = lappend( $1, makeString("BETWEEN"));					$$ = nconc( $$, $3);					$$ = lappend( $$, makeString("AND"));					$$ = nconc( $$, $5);				}			| constraint_expr NOT BETWEEN c_expr AND c_expr				{					$$ = lappend( $1, makeString("NOT BETWEEN"));					$$ = nconc( $$, $4);					$$ = lappend( $$, makeString("AND"));					$$ = nconc( $$, $6);				}		;c_list:  c_list ',' c_expr				{					$$ = lappend($1, makeString(","));					$$ = nconc($$, $3);				}			| c_expr				{					$$ = $1;				}		;c_expr:  AexprConst				{	$$ = makeConstantList((A_Const *) $1); }		;key_match:  MATCH FULL					{ $$ = NULL; }		| MATCH PARTIAL					{ $$ = NULL; }		| /*EMPTY*/						{ $$ = NULL; }		;key_actions:  key_action key_action		{ $$ = NIL; }		| key_action					{ $$ = NIL; }		| /*EMPTY*/						{ $$ = NIL; }		;key_action:  ON DELETE key_reference	{ $$ = NIL; }		| ON UPDATE key_reference		{ $$ = NIL; }		;key_reference:  NO ACTION				{ $$ = NULL; }		| CASCADE						{ $$ = NULL; }		| SET DEFAULT					{ $$ = NULL; }		| SET NULL_P					{ $$ = NULL; }		;OptInherit:  INHERITS '(' relation_name_list ')'		{ $$ = $3; }		| /*EMPTY*/										{ $$ = NIL; }		;CreateAsStmt:  CREATE OptTemp TABLE relation_name OptCreateAs AS SubSelect				{					SelectStmt *n = (SelectStmt *)$7;					if ($5 != NIL)						mapTargetColumns($5, n->targetList);					n->istemp = $2;					n->into = $4;					$$ = (Node *)n;				}		;OptCreateAs:  '(' CreateAsList ')'				{ $$ = $2; }			| /*EMPTY*/							{ $$ = NULL; }		;CreateAsList:  CreateAsList ',' CreateAsElement	{ $$ = lappend($1, $3); }			| CreateAsElement					{ $$ = lcons($1, NIL); }		;CreateAsElement:  ColId				{					ColumnDef *n = makeNode(ColumnDef);					n->colname = $1;					n->typename = NULL;					n->defval = NULL;					n->is_not_null = FALSE;					n->constraints = NULL;					$$ = (Node *)n;				}		;/***************************************************************************** * *		QUERY : *				CREATE SEQUENCE seqname * *****************************************************************************/CreateSeqStmt:  CREATE SEQUENCE relation_name OptSeqList				{					CreateSeqStmt *n = makeNode(CreateSeqStmt);					n->seqname = $3;					n->options = $4;					$$ = (Node *)n;				}		;OptSeqList:  OptSeqList OptSeqElem				{ $$ = lappend($1, $2); }			|	{ $$ = NIL; }		;OptSeqElem:  CACHE IntegerOnly				{					$$ = makeNode(DefElem);					$$->defname = "cache";					$$->arg = (Node *)$2;				}			| CYCLE				{					$$ = makeNode(DefElem);					$$->defname = "cycle";					$$->arg = (Node *)NULL;				}			| INCREMENT IntegerOnly				{					$$ = makeNode(DefElem);					$$->defname = "increment";					$$->arg = (Node *)$2;				}			| MAXVALUE IntegerOnly				{					$$ = makeNode(DefElem);					$$->defname = "maxvalue";					$$->arg = (Node *)$2;				}			| MINVALUE IntegerOnly				{					$$ = makeNode(DefElem);					$$->defname = "minvalue";					$$->arg = (Node *)$2;				}			| START IntegerOnly				{					$$ = makeNode(DefElem);					$$->defname = "start";					$$->arg = (Node *)$2;				}		;NumericOnly:  FloatOnly					{ $$ = $1; }			| IntegerOnly				{ $$ = $1; }FloatOnly:  FCONST				{					$$ = makeFloat($1);				}			| '-' FCONST				{					$$ = makeFloat($2);					$$->val.dval = - $$->val.dval;				}		;IntegerOnly:  Iconst				{					$$ = makeInteger($1);				}			| '-' Iconst				{					$$ = makeInteger($2);					$$->val.ival = - $$->val.ival;				}		;/***************************************************************************** * *		QUERIES : *				CREATE PROCEDURAL LANGUAGE ... *				DROP PROCEDURAL LANGUAGE ... * *****************************************************************************/CreatePLangStmt:  CREATE PLangTrusted PROCEDURAL LANGUAGE Sconst 			HANDLER def_name LANCOMPILER Sconst			{				CreatePLangStmt *n = makeNode(CreatePLangStmt);				n->plname = $5;				n->plhandler = $7;				n->plcompiler = $9;				n->pltrusted = $2;				$$ = (Node *)n;			}		;PLangTrusted:		TRUSTED { $$ = TRUE; }			|	{ $$ = FALSE; }DropPLangStmt:  DROP PROCEDURAL LANGUAGE Sconst			{				DropPLangStmt *n = makeNode(DropPLangStmt);				n->plname = $4;				$$ = (Node *)n;			}		;/***************************************************************************** * *		QUERIES : *				CREATE TRIGGER ... *				DROP TRIGGER ... * *****************************************************************************/CreateTrigStmt:  CREATE TRIGGER name TriggerActionTime TriggerEvents ON				relation_name TriggerForSpec EXECUTE PROCEDURE				name '(' TriggerFuncArgs ')'				{					CreateTrigStmt *n = makeNode(CreateTrigStmt);					n->trigname = $3;					n->relname = $7;					n->funcname = $11;					n->args = $13;					n->before = $4;					n->row = $8;					memcpy (n->actions, $5, 4);					$$ = (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						{ $$ = 'd'; }			| UPDATE						{ $$ = 'u'; }		;TriggerForSpec:  FOR TriggerForOpt TriggerForType				{					$$ = $3;				}		;TriggerForOpt:  EACH						{ $$ = TRUE; }			| /*EMPTY*/						{ $$ = FALSE; }		;TriggerForType:  ROW						{ $$ = TRUE; }			| STATEMENT						{ $$ = FALSE; }		;TriggerFuncArgs:  TriggerFuncArg				{ $$ = lcons($1, NIL); }			| TriggerFuncArgs ',' TriggerFuncArg				{ $$ = lappend($1, $3); }			| /*EMPTY*/				{ $$ = NIL; }		;TriggerFuncArg:  ICONST				{					char *s = (char *) palloc (256);					sprintf (s, "%d", $1);					$$ = s;				}			| FCONST				{					char *s = (char *) palloc (256);					sprintf (s, "%g", $1);					$$ = s;				}			| Sconst						{  $$ = $1; }			| IDENT							{  $$ = $1; }		;DropTrigStmt:  DROP TRIGGER name ON relation_name				{					DropTrigStmt *n = makeNode(DropTrigStmt);					n->trigname = $3;					n->relname = $5;					$$ = (Node *) n;				}		;/***************************************************************************** * *		QUERY : *				define (type,operator,aggregate) * *****************************************************************************/DefineStmt:  CREATE def_type def_rest				{					$3->defType = $2;					$$ = (Node *)$3;				}		;def_rest:  def_name definition				{					$$ = makeNode(DefineStmt);					$$->defname = $1;					$$->definition = $2;				}		;def_type:  OPERATOR							{ $$ = OPERATOR; }		| TYPE_P							{ $$ = TYPE_P; }		| AGGREGATE							{ $$ = AGGREGATE; }		;def_name:  PROCEDURE						{ $$ = "procedure"; }		| JOIN								{ $$ = "join"; }		| ColId								{ $$ = $1; }		| MathOp							{ $$ = $1; }		| Op								{ $$ = $1; }		;definition:  '(' def_list ')'				{ $$ = $2; }		;def_list:  def_elem							{ $$ = lcons($1, NIL); }		| def_list ',' def_elem				{ $$ = lappend($1, $3); }		;def_elem:  def_name '=' def_arg				{					$$ = makeNode(DefElem);					$$->defname = $1;					$$->arg = (Node *)$3;				}		| def_name				{					$$ = makeNode(DefElem);					$$->defname = $1;					$$->arg = (Node *)NULL;				}		| DEFAULT '=' def_arg				{					$$ = makeNode(DefElem);

⌨️ 快捷键说明

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