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

📄 preproc.y

📁 关系型数据库 Postgresql 6.5.2
💻 Y
📖 第 1 页 / 共 5 页
字号:
					}		| ECPGDeclare		{						output_simple_statement($1);					}		| ECPGDisconnect	{						if (connection)							yyerror("no at option for disconnect statement.\n");						fprintf(yyout, "{ ECPGdisconnect(__LINE__, \"%s\");", $1); 						whenever_action(2);						free($1);					} 		| ECPGExecute		{						output_statement($1, 0);					}		| ECPGFree		{						fprintf(yyout, "{ ECPGdeallocate(__LINE__, %s, \"%s\");", connection ? connection : "NULL", $1); 						whenever_action(2);						free($1);					}		| ECPGOpen		{							struct cursor *ptr;						 						for (ptr = cur; ptr != NULL; ptr=ptr->next)						{					               if (strcmp(ptr->name, $1) == 0)						       		break;						}												if (ptr == NULL)						{							sprintf(errortext, "trying to open undeclared cursor %s\n", $1);							yyerror(errortext);						}                  						fprintf(yyout, "{ ECPGdo(__LINE__, %s, \"%s\",", ptr->connection ? ptr->connection : "NULL", ptr->command);						/* dump variables to C file*/						dump_variables(ptr->argsinsert, 0);						dump_variables(argsinsert, 0);						fputs("ECPGt_EOIT, ", yyout);						dump_variables(ptr->argsresult, 0);						fputs("ECPGt_EORT);", yyout);						whenever_action(2);						free($1);					}		| ECPGPrepare		{						if (connection)							yyerror("no at option for set connection statement.\n");						fprintf(yyout, "{ ECPGprepare(__LINE__, %s);", $1); 						whenever_action(2);						free($1);					}		| ECPGRelease		{ /* output already done */ }		| ECPGSetAutocommit     {						fprintf(yyout, "{ ECPGsetcommit(__LINE__, \"%s\", %s);", $1, connection ? connection : "NULL");						whenever_action(2);                                       		free($1);					}		| ECPGSetConnection     {						if (connection)							yyerror("no at option for set connection statement.\n");						fprintf(yyout, "{ ECPGsetconn(__LINE__, %s);", $1);						whenever_action(2);                                       		free($1);					}		| ECPGTypedef		{						if (connection)							yyerror("no at option for typedef statement.\n");						output_simple_statement($1);					}		| ECPGVar		{						if (connection)							yyerror("no at option for var statement.\n");						output_simple_statement($1);					}		| ECPGWhenever		{						if (connection)							yyerror("no at option for whenever statement.\n");						output_simple_statement($1);					}		;/* * We start with a lot of stuff that's very similar to the backend's parsing *//***************************************************************************** * * Create a new Postgres DBMS user * * *****************************************************************************/CreateUserStmt:  CREATE USER UserId user_passwd_clause user_createdb_clause			user_createuser_clause user_group_clause user_valid_clause				{					$$ = cat3_str(cat5_str(make1_str("create user"), $3, $4, $5, $6), $7, $8);				}		;/***************************************************************************** * * Alter a postresql DBMS user * * *****************************************************************************/AlterUserStmt:  ALTER USER UserId user_passwd_clause user_createdb_clause			user_createuser_clause user_group_clause user_valid_clause				{					$$ = cat3_str(cat5_str(make1_str("alter user"), $3, $4, $5, $6), $7, $8);				}		;/***************************************************************************** * * Drop a postresql DBMS user * * *****************************************************************************/DropUserStmt:  DROP USER UserId				{					$$ = cat2_str(make1_str("drop user"), $3);				}		;user_passwd_clause:  WITH PASSWORD UserId	{ $$ = cat2_str(make1_str("with password") , $3); }			| /*EMPTY*/		{ $$ = make1_str(""); }		;user_createdb_clause:  CREATEDB				{					$$ = make1_str("createdb");				}			| NOCREATEDB				{					$$ = make1_str("nocreatedb");				}			| /*EMPTY*/		{ $$ = make1_str(""); }		;user_createuser_clause:  CREATEUSER				{					$$ = make1_str("createuser");				}			| NOCREATEUSER				{					$$ = make1_str("nocreateuser");				}			| /*EMPTY*/		{ $$ = NULL; }		;user_group_list:  user_group_list ',' UserId				{					$$ = cat3_str($1, make1_str(","), $3);				}			| UserId				{					$$ = $1;				}		;user_group_clause:  IN GROUP user_group_list	{ $$ = cat2_str(make1_str("in group"), $3); }			| /*EMPTY*/		{ $$ = make1_str(""); }		;user_valid_clause:  VALID UNTIL Sconst			{ $$ = cat2_str(make1_str("valid until"), $3); }			| /*EMPTY*/			{ $$ = make1_str(""); }		;/***************************************************************************** * * Set PG internal variable *	  SET name TO 'var_value' * Include SQL92 syntax (thomas 1997-10-22): *    SET TIME ZONE 'var_value' * *****************************************************************************/VariableSetStmt:  SET ColId TO var_value				{					$$ = cat4_str(make1_str("set"), $2, make1_str("to"), $4);				}		| SET ColId '=' var_value				{					$$ = cat4_str(make1_str("set"), $2, make1_str("="), $4);				}		| SET TIME ZONE zone_value				{					$$ = cat2_str(make1_str("set time zone"), $4);				}		| SET TRANSACTION ISOLATION LEVEL opt_level				{					$$ = cat2_str(make1_str("set transaction isolation level"), $5);				}		| SET NAMES encoding                                {#ifdef MB					$$ = cat2_str(make1_str("set names"), $3);#else                                        yyerror("SET NAMES is not supported");#endif                                }                ;opt_level:  READ COMMITTED      { $$ = make1_str("read committed"); }               | SERIALIZABLE   { $$ = make1_str("serializable"); }               ;var_value:  Sconst			{ $$ = $1; }		| DEFAULT			{ $$ = make1_str("default"); }		;zone_value:  Sconst			{ $$ = $1; }		| DEFAULT			{ $$ = make1_str("default"); }		| LOCAL				{ $$ = make1_str("local"); }		;VariableShowStmt:  SHOW ColId				{					$$ = cat2_str(make1_str("show"), $2);				}		| SHOW TIME ZONE				{					$$ = make1_str("show time zone");				}		| SHOW TRANSACTION ISOLATION LEVEL				{					$$ = make1_str("show transaction isolation level");				}		;VariableResetStmt:	RESET ColId				{					$$ = cat2_str(make1_str("reset"), $2);				}		| RESET TIME ZONE				{					$$ = make1_str("reset time zone");				}		| RESET TRANSACTION ISOLATION LEVEL				{					$$ = make1_str("reset transaction isolation level");				}		;/***************************************************************************** * *		QUERY : *				addattr ( attr1 = type1 .. attrn = typen ) to <relname> [*] * *****************************************************************************/AddAttrStmt:  ALTER TABLE relation_name opt_inh_star alter_clause				{					$$ = cat4_str(make1_str("alter table"), $3, $4, $5);				}		;alter_clause:  ADD opt_column columnDef				{					$$ = cat3_str(make1_str("add"), $2, $3);				}			| ADD '(' OptTableElementList ')'				{					$$ = make3_str(make1_str("add("), $3, make1_str(")"));				}			| DROP opt_column ColId				{	yyerror("ALTER TABLE/DROP COLUMN not yet implemented"); }			| ALTER opt_column ColId SET DEFAULT default_expr				{	yyerror("ALTER TABLE/ALTER COLUMN/SET DEFAULT not yet implemented"); }			| ALTER opt_column ColId DROP DEFAULT				{	yyerror("ALTER TABLE/ALTER COLUMN/DROP DEFAULT not yet implemented"); }			| ADD ConstraintElem				{	yyerror("ALTER TABLE/ADD CONSTRAINT not yet implemented"); }		;/***************************************************************************** * *		QUERY : *				close <optname> * *****************************************************************************/ClosePortalStmt:  CLOSE opt_id				{					$$ = cat2_str(make1_str("close"), $2);				}		;/***************************************************************************** * *		QUERY : *				COPY [BINARY] <relname> FROM/TO *				[USING DELIMITERS <delimiter>] * *****************************************************************************/CopyStmt:  COPY opt_binary relation_name opt_with_copy copy_dirn copy_file_name copy_delimiter				{					$$ = cat3_str(cat5_str(make1_str("copy"), $2, $3, $4, $5), $6, $7);				}		;copy_dirn:	TO				{ $$ = make1_str("to"); }		| FROM				{ $$ = make1_str("from"); }		;/* * copy_file_name NULL indicates stdio is used. Whether stdin or stdout is * used depends on the direction. (It really doesn't make sense to copy from * stdout. We silently correct the "typo".		 - AY 9/94 */copy_file_name:  Sconst					{ $$ = $1; }		| STDIN					{ $$ = make1_str("stdin"); }		| STDOUT				{ $$ = make1_str("stdout"); }		;opt_binary:  BINARY					{ $$ = make1_str("binary"); }		| /*EMPTY*/				{ $$ = make1_str(""); }		;opt_with_copy:	WITH OIDS				{ $$ = make1_str("with oids"); }		| /*EMPTY*/				{ $$ = make1_str(""); }		;/* * the default copy delimiter is tab but the user can configure it */copy_delimiter:  USING DELIMITERS Sconst		{ $$ = cat2_str(make1_str("using delimiters"), $3); }		| /*EMPTY*/				{ $$ = make1_str(""); }		;/***************************************************************************** * *		QUERY : *				CREATE relname * *****************************************************************************/CreateStmt:  CREATE OptTemp TABLE relation_name '(' OptTableElementList ')'				OptInherit				{					$$ = cat3_str(cat4_str(make1_str("create"), $2, make1_str("table"), $4), make3_str(make1_str("("), $6, make1_str(")")), $8);				}		;OptTemp:  OptTempType                           { $$ = $1; }                | OptTempScope OptTempType	{ $$ = cat2_str($1,$2); }                ;OptTempType:	  TEMP		{ $$ = make1_str("temp"); }		| TEMPORARY	{ $$ = make1_str("temporary"); }		| /* EMPTY */	{ $$ = make1_str(""); }		;OptTempScope:  GLOBAL               {                    yyerror("GLOBAL TEMPORARY TABLE is not currently supported");                    $$ = make1_str("global");               }             | LOCAL { $$ = make1_str("local"); }             ;OptTableElementList:  OptTableElementList ',' OptTableElement				{					$$ = cat3_str($1, make1_str(","), $3);				}			| OptTableElement				{					$$ = $1;				}			| /*EMPTY*/	{ $$ = make1_str(""); }		;OptTableElement:  columnDef		{ $$ = $1; }			| TableConstraint	{ $$ = $1; }		;columnDef:  ColId Typename ColQualifier				{					$$ = cat3_str($1, $2, $3);				}	| ColId SERIAL ColPrimaryKey		{			$$ = make3_str($1, make1_str(" serial "), $3);		}		;ColQualifier:  ColQualList	{ $$ = $1; }			| /*EMPTY*/	{ $$ = make1_str(""); }		;ColQualList:  ColQualList ColConstraint	{ $$ = cat2_str($1,$2); }			| ColConstraint		{ $$ = $1; }		;ColPrimaryKey:  PRIMARY KEY                {			$$ = make1_str("primary key");                }              | /*EMPTY*/		{			$$ = make1_str("");		}                ;ColConstraint:		CONSTRAINT name ColConstraintElem				{					$$ = cat3_str(make1_str("constraint"), $2, $3);				}		| ColConstraintElem				{ $$ = $1; }		;/* DEFAULT NULL is already the default for Postgres. * Bue define it here and carry it forward into the system * to make it explicit. * - thomas 1998-09-13 * WITH NULL and NULL are not SQL92-standard syntax elements, * so leave them out. Use DEFAULT NULL to explicitly indicate * that a column may have that value. WITH NULL leads to * shift/reduce conflicts with WITH TIME ZONE anyway. * - thomas 1999-01-08 */ColConstraintElem:  CHECK '(' constraint_expr ')'				{					$$ = make3_str(make1_str("check("), $3, make1_str(")"));				}			| DEFAULT NULL_P				{					$$ = make1_str("default null");				}			| DEFAULT default_expr				{					$$ = cat2_str(make1_str("default"), $2);				}			| NOT NULL_P				{					$$ = make1_str("not null");				}			| UNIQUE				{					$$ = make1_str("unique");				}			| PRIMARY KEY				{					$$ = make1_str("primary key");				}			| REFERENCES ColId opt_column_list key_match key_actions				{					fprintf(stderr, "CREATE TABLE/FOREIGN KEY clause ignored; not yet implemented");					$$ = make1_str("");				}		;

⌨️ 快捷键说明

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