mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 10:30:33 +03:00 
			
		
		
		
	MOVE implementation.
This commit is contained in:
		| @@ -7,7 +7,7 @@ | ||||
|  * | ||||
|  * | ||||
|  * IDENTIFICATION | ||||
|  *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.18 1997/09/20 16:14:05 thomas Exp $ | ||||
|  *	  $Header: /cvsroot/pgsql/src/backend/commands/Attic/command.c,v 1.19 1997/09/29 05:56:10 vadim Exp $ | ||||
|  * | ||||
|  * NOTES | ||||
|  *	  The PortalExecutorHeapMemory crap needs to be eliminated | ||||
| @@ -99,7 +99,7 @@ PerformPortalFetch(char *name, | ||||
| { | ||||
| 	Portal		portal; | ||||
| 	int			feature; | ||||
| 	QueryDesc  *queryDesc; | ||||
| 	QueryDesc	queryDesc; | ||||
| 	MemoryContext context; | ||||
|  | ||||
| 	/* ---------------- | ||||
| @@ -147,9 +147,11 @@ PerformPortalFetch(char *name, | ||||
| 	 *	tell the destination to prepare to recieve some tuples | ||||
| 	 * ---------------- | ||||
| 	 */ | ||||
| 	queryDesc = PortalGetQueryDesc(portal); | ||||
| 	memcpy (&queryDesc, PortalGetQueryDesc(portal), sizeof (queryDesc)); | ||||
| 	queryDesc.dest = dest; | ||||
| 	 | ||||
| 	BeginCommand(name, | ||||
| 				 queryDesc->operation, | ||||
| 				 queryDesc.operation, | ||||
| 				 portal->attinfo,		/* QueryDescGetTypeInfo(queryDesc), | ||||
| 										 * */ | ||||
| 				 false,			/* portal fetches don't end up in | ||||
| @@ -166,7 +168,7 @@ PerformPortalFetch(char *name, | ||||
| 	PortalExecutorHeapMemory = (MemoryContext) | ||||
| 		PortalGetHeapMemory(portal); | ||||
|  | ||||
| 	ExecutorRun(queryDesc, PortalGetState(portal), feature, count); | ||||
| 	ExecutorRun(&queryDesc, PortalGetState(portal), feature, count); | ||||
|  | ||||
| 	/* ---------------- | ||||
| 	 * Note: the "end-of-command" tag is returned by higher-level | ||||
|   | ||||
| @@ -10,7 +10,7 @@ | ||||
|  * | ||||
|  * | ||||
|  * IDENTIFICATION | ||||
|  *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.52 1997/09/26 15:09:11 thomas Exp $ | ||||
|  *	  $Header: /cvsroot/pgsql/src/backend/parser/gram.y,v 1.53 1997/09/29 05:58:12 vadim Exp $ | ||||
|  * | ||||
|  * HISTORY | ||||
|  *	  AUTHOR			DATE			MAJOR EVENT | ||||
| @@ -107,7 +107,7 @@ static char *FlattenStringList(List *list); | ||||
| 		AddAttrStmt, ClosePortalStmt, | ||||
| 		CopyStmt, CreateStmt, CreateSeqStmt, DefineStmt, DestroyStmt, | ||||
| 		ExtendStmt, FetchStmt,	GrantStmt, CreateTrigStmt, DropTrigStmt, | ||||
| 		IndexStmt, MoveStmt, ListenStmt, OptimizableStmt, | ||||
| 		IndexStmt, ListenStmt, OptimizableStmt, | ||||
| 		ProcedureStmt, PurgeStmt, | ||||
| 		RecipeStmt, RemoveAggrStmt, RemoveOperStmt, RemoveFuncStmt, RemoveStmt, | ||||
| 		RenameStmt, RevokeStmt, RuleStmt, TransactionStmt, ViewStmt, LoadStmt, | ||||
| @@ -162,7 +162,7 @@ static char *FlattenStringList(List *list); | ||||
| %type <ival>	copy_dirn, archive_type, OptArchiveType, OptArchiveLocation, | ||||
| 		def_type, opt_direction, remove_type, opt_column, event | ||||
|  | ||||
| %type <ival>	OptLocation, opt_move_where, fetch_how_many | ||||
| %type <ival>	OptLocation, fetch_how_many | ||||
|  | ||||
| %type <list>	OptSeqList | ||||
| %type <defelt>	OptSeqElem | ||||
| @@ -299,7 +299,6 @@ stmt :	  AddAttrStmt | ||||
| 		| FetchStmt | ||||
| 		| GrantStmt | ||||
| 		| IndexStmt | ||||
| 		| MoveStmt | ||||
| 		| ListenStmt | ||||
| 		| ProcedureStmt | ||||
| 		| PurgeStmt | ||||
| @@ -995,7 +994,7 @@ DestroyStmt:	DROP TABLE relation_name_list | ||||
| /***************************************************************************** | ||||
|  * | ||||
|  *		QUERY: | ||||
|  *				fetch [forward | backward] [number | all ] [ in <portalname> ] | ||||
|  *			fetch/move [forward | backward] [number | all ] [ in <portalname> ] | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
|  | ||||
| @@ -1005,6 +1004,16 @@ FetchStmt:	FETCH opt_direction fetch_how_many opt_portal_name | ||||
| 					n->direction = $2; | ||||
| 					n->howMany = $3; | ||||
| 					n->portalname = $4; | ||||
| 					n->ismove = false; | ||||
| 					$$ = (Node *)n; | ||||
| 				} | ||||
| 		|	MOVE opt_direction fetch_how_many opt_portal_name | ||||
| 				{ | ||||
| 					FetchStmt *n = makeNode(FetchStmt); | ||||
| 					n->direction = $2; | ||||
| 					n->howMany = $3; | ||||
| 					n->portalname = $4; | ||||
| 					n->ismove = true; | ||||
| 					$$ = (Node *)n; | ||||
| 				} | ||||
| 		; | ||||
| @@ -1021,6 +1030,10 @@ fetch_how_many:  Iconst | ||||
| 		|  /*EMPTY*/					{ $$ = 1; /*default*/ } | ||||
| 		; | ||||
|  | ||||
| opt_portal_name: IN name				{ $$ = $2;} | ||||
| 		| /*EMPTY*/						{ $$ = NULL; } | ||||
| 		; | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * | ||||
|  *		QUERY: | ||||
| @@ -1119,42 +1132,6 @@ RevokeStmt: REVOKE privileges ON relation_name_list FROM grantee | ||||
| 				} | ||||
| 		; | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * | ||||
|  *		QUERY: | ||||
|  *				move [<dirn>] [<whereto>] [<portalname>] | ||||
|  * | ||||
|  *****************************************************************************/ | ||||
|  | ||||
| MoveStmt:  MOVE opt_direction opt_move_where opt_portal_name | ||||
| 				{ | ||||
| 					MoveStmt *n = makeNode(MoveStmt); | ||||
| 					n->direction = $2; | ||||
| 					n->to = FALSE; | ||||
| 					n->where = $3; | ||||
| 					n->portalname = $4; | ||||
| 					$$ = (Node *)n; | ||||
| 				} | ||||
| 		|  MOVE opt_direction TO Iconst opt_portal_name | ||||
| 				{ | ||||
| 					MoveStmt *n = makeNode(MoveStmt); | ||||
| 					n->direction = $2; | ||||
| 					n->to = TRUE; | ||||
| 					n->where = $4; | ||||
| 					n->portalname = $5; | ||||
| 					$$ = (Node *)n; | ||||
| 				} | ||||
| 		; | ||||
|  | ||||
| opt_move_where: Iconst					{ $$ = $1; } | ||||
| 		| /*EMPTY*/						{ $$ = 1; /* default */ } | ||||
| 		; | ||||
|  | ||||
| opt_portal_name: IN name				{ $$ = $2;} | ||||
| 		| /*EMPTY*/						{ $$ = NULL; } | ||||
| 		; | ||||
|  | ||||
|  | ||||
| /***************************************************************************** | ||||
|  * | ||||
|  *		QUERY: | ||||
|   | ||||
| @@ -9,7 +9,7 @@ | ||||
|  * | ||||
|  * | ||||
|  * IDENTIFICATION | ||||
|  *	  $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.24 1997/09/08 21:47:58 momjian Exp $ | ||||
|  *	  $Header: /cvsroot/pgsql/src/backend/tcop/utility.c,v 1.25 1997/09/29 05:59:16 vadim Exp $ | ||||
|  * | ||||
|  *------------------------------------------------------------------------- | ||||
|  */ | ||||
| @@ -139,7 +139,7 @@ ProcessUtility(Node *parsetree, | ||||
| 				bool		forward; | ||||
| 				int			count; | ||||
|  | ||||
| 				commandTag = "FETCH"; | ||||
| 				commandTag = (stmt->ismove) ? "MOVE" : "FETCH"; | ||||
| 				CHECK_IF_ABORTED(); | ||||
|  | ||||
| 				forward = (bool) (stmt->direction == FORWARD); | ||||
| @@ -149,7 +149,8 @@ ProcessUtility(Node *parsetree, | ||||
| 				 */ | ||||
|  | ||||
| 				count = stmt->howMany; | ||||
| 				PerformPortalFetch(portalName, forward, count, commandTag, dest); | ||||
| 				PerformPortalFetch(portalName, forward, count, commandTag,  | ||||
| 					(stmt->ismove) ? None : dest);	/* /dev/null for MOVE */ | ||||
| 			} | ||||
| 			break; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user