Alvaro Herrera írta:
> Boszormenyi Zoltan wrote:
>
>   
>> Thanks for analyzing it, patch is attached. I downloaded
>> and installed ICC, so I could reproduce the difference.
>>     
>
> Why not have a single function that does both things in a single call?
> It doesn't look like there's any place that calls the function with only
> one value for "insert" ...
>   

Okay, I tried this approach, patch is attached.
This way it doesn't depend on the evaluation order
of function parameters.

> I happened to notice this misleading comment:
>
>         char temp[20]; /* this should be sufficient unless you have 8 byte 
> integers */
>   

That comment was there before I touched that function, I deleted it now.
There will be other problems before reaching 2^31-1 internal variables,
like compiling the monster C file without the compiler going OOM...

Best regards,
Zoltán Böszörményi

-- 
Bible has answers for everything. Proof:
"But let your communication be, Yea, yea; Nay, nay: for whatsoever is more
than these cometh of evil." (Matthew 5:37) - basics of digital technology.
"May your kingdom come" - superficial description of plate tectonics

----------------------------------
Zoltán Böszörményi
Cybertec Schönig & Schönig GmbH
http://www.postgresql.at/

diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.addons pgsql/src/interfaces/ecpg/preproc/ecpg.addons
*** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.addons	2010-01-26 10:09:40.000000000 +0100
--- pgsql/src/interfaces/ecpg/preproc/ecpg.addons	2010-01-26 20:11:53.000000000 +0100
*************** ECPG: DeclareCursorStmtDECLAREcursor_nam
*** 331,346 ****
  		comment = cat_str(3, make_str("/*"), c1, make_str("*/"));
  
  		if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
! 			$$ = cat_str(4,
! 				adjust_outofscope_cursor_vars(this, true),
! 				adjust_outofscope_cursor_vars(this, false),
  				make_str("ECPG_informix_reset_sqlca();"),
  				comment);
  		else
! 			$$ = cat_str(3,
! 				adjust_outofscope_cursor_vars(this, true),
! 				adjust_outofscope_cursor_vars(this, false),
! 				comment);
  	}
  ECPG: ClosePortalStmtCLOSEcursor_name block
  	{
--- 331,341 ----
  		comment = cat_str(3, make_str("/*"), c1, make_str("*/"));
  
  		if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
! 			$$ = cat_str(3, adjust_outofscope_cursor_vars(this),
  				make_str("ECPG_informix_reset_sqlca();"),
  				comment);
  		else
! 			$$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
  	}
  ECPG: ClosePortalStmtCLOSEcursor_name block
  	{
diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.header pgsql/src/interfaces/ecpg/preproc/ecpg.header
*** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.header	2010-01-26 10:09:40.000000000 +0100
--- pgsql/src/interfaces/ecpg/preproc/ecpg.header	2010-01-26 20:25:06.000000000 +0100
*************** create_questionmarks(char *name, bool ar
*** 227,233 ****
  }
  
  static char *
! adjust_outofscope_cursor_vars(struct cursor *cur, bool insert)
  {
  	/* Informix accepts DECLARE with variables that are out of scope when OPEN is called.
  	 * For instance you can DECLARE a cursor in one function, and OPEN/FETCH/CLOSE
--- 227,233 ----
  }
  
  static char *
! adjust_outofscope_cursor_vars(struct cursor *cur)
  {
  	/* Informix accepts DECLARE with variables that are out of scope when OPEN is called.
  	 * For instance you can DECLARE a cursor in one function, and OPEN/FETCH/CLOSE
*************** adjust_outofscope_cursor_vars(struct cur
*** 240,371 ****
  	 * instead of the variable. Do it only for local variables, not for globals.
  	 */
  
- 	struct arguments *list;
- 	struct arguments *ptr;
- 	struct arguments *newlist = NULL;
- 	struct variable *newvar, *newind;
  	char *result = make_str("");
  
! 	list = (insert ? cur->argsinsert : cur->argsresult);
! 
! 	for (ptr = list; ptr != NULL; ptr = ptr->next)
  	{
! 		char temp[20]; /* this should be sufficient unless you have 8 byte integers */
! 		char *original_var;
! 		bool skip_set_var = false;
  
! 		/* change variable name to "ECPGget_var(<counter>)" */
! 		original_var = ptr->variable->name;
! 		sprintf(temp, "%d))", ecpg_internal_var);
  
! 		/* Don't emit ECPGset_var() calls for global variables */
! 		if (ptr->variable->brace_level == 0)
! 		{
! 			newvar = ptr->variable;
! 			skip_set_var = true;
! 		}
! 		else if ((ptr->variable->type->type == ECPGt_char_variable) && (!strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement"))))
! 		{
! 			newvar = ptr->variable;
! 			skip_set_var = true;
! 		}
! 		else if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char && ptr->variable->type->type != ECPGt_string) && atoi(ptr->variable->type->size) > 1)
! 		{
! 			newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1"), ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0);
! 			sprintf(temp, "%d, (", ecpg_internal_var++);
! 		}
! 		else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char || ptr->variable->type->type == ECPGt_string) && atoi(ptr->variable->type->size) > 1)
! 		{
! 			newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0);
! 			if (ptr->variable->type->type == ECPGt_varchar)
! 				sprintf(temp, "%d, &(", ecpg_internal_var++);
! 			else
! 				sprintf(temp, "%d, (", ecpg_internal_var++);
! 		}
! 		else if (ptr->variable->type->type == ECPGt_struct || ptr->variable->type->type == ECPGt_union)
! 		{
! 			sprintf(temp, "%d)))", ecpg_internal_var);
! 			newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.members, ptr->variable->type->type, ptr->variable->type->type_name, ptr->variable->type->struct_sizeof), 0);
! 			sprintf(temp, "%d, &(", ecpg_internal_var++);
! 		}
! 		else if (ptr->variable->type->type == ECPGt_array)
  		{
! 			if (ptr->variable->type->u.element->type == ECPGt_struct || ptr->variable->type->u.element->type == ECPGt_union)
  			{
! 				sprintf(temp, "%d)))", ecpg_internal_var);
! 				newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.element->u.members, ptr->variable->type->u.element->type, ptr->variable->type->u.element->type_name, ptr->variable->type->u.element->struct_sizeof), 0);
  				sprintf(temp, "%d, (", ecpg_internal_var++);
  			}
! 			else
  			{
! 				newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, ptr->variable->type->u.element->size, ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0);
! 				sprintf(temp, "%d, &(", ecpg_internal_var++);
  			}
! 		}
! 		else
! 		{
! 			newvar = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0);
! 			sprintf(temp, "%d, &(", ecpg_internal_var++);
! 		}
! 
! 		/* create call to "ECPGset_var(<counter>, <pointer>. <linen number>)" */
! 		if (!skip_set_var)
! 			result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
! 
! 		/* now the indicator if there is one and it's not a global variable */
! 		if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0))
! 		{
! 			newind = ptr->indicator;
! 		}
! 		else
! 		{
! 			/* change variable name to "ECPGget_var(<counter>)" */
! 			original_var = ptr->indicator->name;
! 			sprintf(temp, "%d))", ecpg_internal_var);
! 
! 			if (ptr->indicator->type->type == ECPGt_struct || ptr->indicator->type->type == ECPGt_union)
  			{
  				sprintf(temp, "%d)))", ecpg_internal_var);
! 				newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.members, ptr->indicator->type->type, ptr->indicator->type->type_name, ptr->indicator->type->struct_sizeof), 0);
  				sprintf(temp, "%d, &(", ecpg_internal_var++);
  			}
! 			else if (ptr->indicator->type->type == ECPGt_array)
  			{
! 				if (ptr->indicator->type->u.element->type == ECPGt_struct || ptr->indicator->type->u.element->type == ECPGt_union)
  				{
  					sprintf(temp, "%d)))", ecpg_internal_var);
! 					newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->type_name, ptr->indicator->type->u.element->struct_sizeof), 0);
  					sprintf(temp, "%d, (", ecpg_internal_var++);
  				}
  				else
  				{
! 					newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->size, ptr->indicator->type->u.element->lineno), ptr->indicator->type->size), 0);
  					sprintf(temp, "%d, &(", ecpg_internal_var++);
  				}
  			}
- 			else if (atoi(ptr->indicator->type->size) > 1)
- 			{
- 				newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0);
- 				sprintf(temp, "%d, (", ecpg_internal_var++);
- 			}
  			else
  			{
! 				newind = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0);
  				sprintf(temp, "%d, &(", ecpg_internal_var++);
  			}
  
  			/* create call to "ECPGset_var(<counter>, <pointer>. <linen number>)" */
! 			result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
  		}
  
! 		add_variable_to_tail(&newlist, newvar, newind);
  	}
  
- 	if (insert)
- 		cur->argsinsert_oos = newlist;
- 	else
- 		cur->argsresult_oos = newlist;
- 
  	return result;
  }
  
--- 240,376 ----
  	 * instead of the variable. Do it only for local variables, not for globals.
  	 */
  
  	char *result = make_str("");
+ 	int insert;
  
! 	for (insert = 1; insert >= 0; insert--)
  	{
! 		struct arguments *list;
! 		struct arguments *ptr;
! 		struct arguments *newlist = NULL;
! 		struct variable *newvar, *newind;
  
! 		list = (insert ? cur->argsinsert : cur->argsresult);
  
! 		for (ptr = list; ptr != NULL; ptr = ptr->next)
  		{
! 			char temp[20];
! 			char *original_var;
! 			bool skip_set_var = false;
! 
! 			/* change variable name to "ECPGget_var(<counter>)" */
! 			original_var = ptr->variable->name;
! 			sprintf(temp, "%d))", ecpg_internal_var);
! 
! 			/* Don't emit ECPGset_var() calls for global variables */
! 			if (ptr->variable->brace_level == 0)
  			{
! 				newvar = ptr->variable;
! 				skip_set_var = true;
! 			}
! 			else if ((ptr->variable->type->type == ECPGt_char_variable) && (!strncmp(ptr->variable->name, "ECPGprepared_statement", strlen("ECPGprepared_statement"))))
! 			{
! 				newvar = ptr->variable;
! 				skip_set_var = true;
! 			}
! 			else if ((ptr->variable->type->type != ECPGt_varchar && ptr->variable->type->type != ECPGt_char && ptr->variable->type->type != ECPGt_unsigned_char && ptr->variable->type->type != ECPGt_string) && atoi(ptr->variable->type->size) > 1)
! 			{
! 				newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, make_str("1"), ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0);
  				sprintf(temp, "%d, (", ecpg_internal_var++);
  			}
! 			else if ((ptr->variable->type->type == ECPGt_varchar || ptr->variable->type->type == ECPGt_char || ptr->variable->type->type == ECPGt_unsigned_char || ptr->variable->type->type == ECPGt_string) && atoi(ptr->variable->type->size) > 1)
  			{
! 				newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0);
! 				if (ptr->variable->type->type == ECPGt_varchar)
! 					sprintf(temp, "%d, &(", ecpg_internal_var++);
! 				else
! 					sprintf(temp, "%d, (", ecpg_internal_var++);
  			}
! 			else if (ptr->variable->type->type == ECPGt_struct || ptr->variable->type->type == ECPGt_union)
  			{
  				sprintf(temp, "%d)))", ecpg_internal_var);
! 				newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.members, ptr->variable->type->type, ptr->variable->type->type_name, ptr->variable->type->struct_sizeof), 0);
  				sprintf(temp, "%d, &(", ecpg_internal_var++);
  			}
! 			else if (ptr->variable->type->type == ECPGt_array)
  			{
! 				if (ptr->variable->type->u.element->type == ECPGt_struct || ptr->variable->type->u.element->type == ECPGt_union)
  				{
  					sprintf(temp, "%d)))", ecpg_internal_var);
! 					newvar = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->variable->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->variable->type->u.element->u.members, ptr->variable->type->u.element->type, ptr->variable->type->u.element->type_name, ptr->variable->type->u.element->struct_sizeof), 0);
  					sprintf(temp, "%d, (", ecpg_internal_var++);
  				}
  				else
  				{
! 					newvar = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->variable->type->u.element->type, ptr->variable->type->u.element->size, ptr->variable->type->u.element->lineno), ptr->variable->type->size), 0);
  					sprintf(temp, "%d, &(", ecpg_internal_var++);
  				}
  			}
  			else
  			{
! 				newvar = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->variable->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->variable->type->type, ptr->variable->type->size, ptr->variable->type->lineno), 0);
  				sprintf(temp, "%d, &(", ecpg_internal_var++);
  			}
  
  			/* create call to "ECPGset_var(<counter>, <pointer>. <linen number>)" */
! 			if (!skip_set_var)
! 				result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
! 
! 			/* now the indicator if there is one and it's not a global variable */
! 			if ((ptr->indicator->type->type == ECPGt_NO_INDICATOR) || (ptr->indicator->brace_level == 0))
! 			{
! 				newind = ptr->indicator;
! 			}
! 			else
! 			{
! 				/* change variable name to "ECPGget_var(<counter>)" */
! 				original_var = ptr->indicator->name;
! 				sprintf(temp, "%d))", ecpg_internal_var);
! 
! 				if (ptr->indicator->type->type == ECPGt_struct || ptr->indicator->type->type == ECPGt_union)
! 				{
! 					sprintf(temp, "%d)))", ecpg_internal_var);
! 					newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.members, ptr->indicator->type->type, ptr->indicator->type->type_name, ptr->indicator->type->struct_sizeof), 0);
! 					sprintf(temp, "%d, &(", ecpg_internal_var++);
! 				}
! 				else if (ptr->indicator->type->type == ECPGt_array)
! 				{
! 					if (ptr->indicator->type->u.element->type == ECPGt_struct || ptr->indicator->type->u.element->type == ECPGt_union)
! 					{
! 						sprintf(temp, "%d)))", ecpg_internal_var);
! 						newind = new_variable(cat_str(4, make_str("(*("), mm_strdup(ptr->indicator->type->u.element->type_name), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_struct_type(ptr->indicator->type->u.element->u.members, ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->type_name, ptr->indicator->type->u.element->struct_sizeof), 0);
! 						sprintf(temp, "%d, (", ecpg_internal_var++);
! 					}
! 					else
! 					{
! 						newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->u.element->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_array_type(ECPGmake_simple_type(ptr->indicator->type->u.element->type, ptr->indicator->type->u.element->size, ptr->indicator->type->u.element->lineno), ptr->indicator->type->size), 0);
! 						sprintf(temp, "%d, &(", ecpg_internal_var++);
! 					}
! 				}
! 				else if (atoi(ptr->indicator->type->size) > 1)
! 				{
! 					newind = new_variable(cat_str(4, make_str("("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0);
! 					sprintf(temp, "%d, (", ecpg_internal_var++);
! 				}
! 				else
! 				{
! 					newind = new_variable(cat_str(4, make_str("*("), mm_strdup(ecpg_type_name(ptr->indicator->type->type)), make_str(" *)(ECPGget_var("), mm_strdup(temp)), ECPGmake_simple_type(ptr->indicator->type->type, ptr->indicator->type->size, ptr->variable->type->lineno), 0);
! 					sprintf(temp, "%d, &(", ecpg_internal_var++);
! 				}
! 
! 				/* create call to "ECPGset_var(<counter>, <pointer>. <linen number>)" */
! 				result = cat_str(5, result, make_str("ECPGset_var("), mm_strdup(temp), mm_strdup(original_var), make_str("), __LINE__);\n"));
! 			}
! 
! 			add_variable_to_tail(&newlist, newvar, newind);
  		}
  
! 		if (insert)
! 			cur->argsinsert_oos = newlist;
! 		else
! 			cur->argsresult_oos = newlist;
  	}
  
  	return result;
  }
  
diff -dcrpN pgsql.orig/src/interfaces/ecpg/preproc/ecpg.trailer pgsql/src/interfaces/ecpg/preproc/ecpg.trailer
*** pgsql.orig/src/interfaces/ecpg/preproc/ecpg.trailer	2010-01-26 10:09:40.000000000 +0100
--- pgsql/src/interfaces/ecpg/preproc/ecpg.trailer	2010-01-26 20:11:45.000000000 +0100
*************** ECPGCursorStmt:  DECLARE cursor_name cur
*** 332,347 ****
  			comment = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
  
  			if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
! 				$$ = cat_str(4,
! 					adjust_outofscope_cursor_vars(this, true),
! 					adjust_outofscope_cursor_vars(this, false),
  					make_str("ECPG_informix_reset_sqlca();"),
  					comment);
  			else
! 				$$ = cat_str(3,
! 					adjust_outofscope_cursor_vars(this, true),
! 					adjust_outofscope_cursor_vars(this, false),
! 					comment);
  		}
  		;
  
--- 332,342 ----
  			comment = cat_str(3, make_str("/*"), mm_strdup(this->command), make_str("*/"));
  
  			if ((braces_open > 0) && INFORMIX_MODE) /* we're in a function */
! 				$$ = cat_str(3, adjust_outofscope_cursor_vars(this),
  					make_str("ECPG_informix_reset_sqlca();"),
  					comment);
  			else
! 				$$ = cat2_str(adjust_outofscope_cursor_vars(this), comment);
  		}
  		;
  
diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.c pgsql/src/interfaces/ecpg/test/expected/preproc-cursor.c
*** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-cursor.c	2010-01-26 10:09:40.000000000 +0100
--- pgsql/src/interfaces/ecpg/test/expected/preproc-cursor.c	2010-01-26 19:01:18.000000000 +0100
*************** if (sqlca.sqlcode < 0) exit (1);}
*** 287,295 ****
  	/* Dynamic cursorname test with INTO list in DECLARE stmt */
  
  	strcpy(msg, "declare");
! 	ECPGset_var( 3, &( curname2 ), __LINE__);\
!  ECPGset_var( 1, ( t ), __LINE__);\
!  ECPGset_var( 2, &( id ), __LINE__);\
   /* declare $0 cursor for select id , t from t1 */
  #line 100 "cursor.pgc"
  
--- 287,295 ----
  	/* Dynamic cursorname test with INTO list in DECLARE stmt */
  
  	strcpy(msg, "declare");
! 	ECPGset_var( 1, &( curname2 ), __LINE__);\
!  ECPGset_var( 2, ( t ), __LINE__);\
!  ECPGset_var( 3, &( id ), __LINE__);\
   /* declare $0 cursor for select id , t from t1 */
  #line 100 "cursor.pgc"
  
diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-outofscope.c pgsql/src/interfaces/ecpg/test/expected/preproc-outofscope.c
*** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-outofscope.c	2010-01-26 11:31:14.000000000 +0100
--- pgsql/src/interfaces/ecpg/test/expected/preproc-outofscope.c	2010-01-26 15:25:31.000000000 +0100
*************** if (sqlca.sqlcode < 0) exit (1);}
*** 305,329 ****
  if (sqlca.sqlcode < 0) exit (1);}
  #line 85 "outofscope.pgc"
  
! 	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , '\"a\"' , - 1.0 , 'nan' :: float8 , 'a' )", ECPGt_EOIT, ECPGt_EORT);
  #line 86 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
  #line 86 "outofscope.pgc"
  
- 	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' )", ECPGt_EOIT, ECPGt_EORT);
- #line 87 "outofscope.pgc"
- 
- if (sqlca.sqlcode < 0) exit (1);}
- #line 87 "outofscope.pgc"
- 
  
  	strcpy(msg, "commit");
  	{ ECPGtrans(__LINE__, NULL, "commit");
! #line 90 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 90 "outofscope.pgc"
  
  
  	/* Test out-of-scope DECLARE/OPEN/FETCH/CLOSE */
--- 305,323 ----
  if (sqlca.sqlcode < 0) exit (1);}
  #line 85 "outofscope.pgc"
  
! 	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' )", ECPGt_EOIT, ECPGt_EORT);
  #line 86 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
  #line 86 "outofscope.pgc"
  
  
  	strcpy(msg, "commit");
  	{ ECPGtrans(__LINE__, NULL, "commit");
! #line 89 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 89 "outofscope.pgc"
  
  
  	/* Test out-of-scope DECLARE/OPEN/FETCH/CLOSE */
*************** if (sqlca.sqlcode < 0) exit (1);}
*** 332,338 ****
  	open_cur1();
  
  	/* exec sql whenever not found  break ; */
! #line 97 "outofscope.pgc"
  
  
  	while (1)
--- 326,332 ----
  	open_cur1();
  
  	/* exec sql whenever not found  break ; */
! #line 96 "outofscope.pgc"
  
  
  	while (1)
*************** if (sqlca.sqlcode < 0) exit (1);}
*** 353,378 ****
  
  	strcpy(msg, "drop");
  	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table a1", ECPGt_EOIT, ECPGt_EORT);
! #line 116 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 116 "outofscope.pgc"
  
  
  	strcpy(msg, "commit");
  	{ ECPGtrans(__LINE__, NULL, "commit");
! #line 119 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 119 "outofscope.pgc"
  
  
  	strcpy(msg, "disconnect"); 
  	{ ECPGdisconnect(__LINE__, "CURRENT");
! #line 122 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 122 "outofscope.pgc"
  
  
  	return (0);
--- 347,372 ----
  
  	strcpy(msg, "drop");
  	{ ECPGdo(__LINE__, 0, 1, NULL, 0, ECPGst_normal, "drop table a1", ECPGt_EOIT, ECPGt_EORT);
! #line 115 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 115 "outofscope.pgc"
  
  
  	strcpy(msg, "commit");
  	{ ECPGtrans(__LINE__, NULL, "commit");
! #line 118 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 118 "outofscope.pgc"
  
  
  	strcpy(msg, "disconnect"); 
  	{ ECPGdisconnect(__LINE__, "CURRENT");
! #line 121 "outofscope.pgc"
  
  if (sqlca.sqlcode < 0) exit (1);}
! #line 121 "outofscope.pgc"
  
  
  	return (0);
diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr pgsql/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr
*** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr	2010-01-26 11:31:14.000000000 +0100
--- pgsql/src/interfaces/ecpg/test/expected/preproc-outofscope.stderr	2010-01-26 15:25:32.000000000 +0100
***************
*** 26,44 ****
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 85: OK: INSERT 0 1
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 86: query: insert into a1 ( id , t , d1 , d2 , c ) values ( default , '"a"' , - 1.0 , 'nan' :: float8 , 'a' ); with 0 parameter(s) on connection regress1
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 86: using PQexec
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 86: OK: INSERT 0 1
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 87: query: insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' ); with 0 parameter(s) on connection regress1
! [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 87: using PQexec
! [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 87: OK: INSERT 0 1
! [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ECPGtrans on line 90: action "commit"; connection "regress1"
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 40: query: declare mycur cursor for select * from a1; with 0 parameter(s) on connection regress1
  [NO_PID]: sqlca: code: 0, state: 00000
--- 26,38 ----
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 85: OK: INSERT 0 1
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 86: query: insert into a1 ( id , t , d1 , d2 , c ) values ( default , 'b' , 2.0 , 3 , 'b' ); with 0 parameter(s) on connection regress1
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 86: using PQexec
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 86: OK: INSERT 0 1
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ECPGtrans on line 89: action "commit"; connection "regress1"
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 40: query: declare mycur cursor for select * from a1; with 0 parameter(s) on connection regress1
  [NO_PID]: sqlca: code: 0, state: 00000
***************
*** 86,107 ****
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_get_data on line 49: RESULT: 3 offset: -1; array: yes
  [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_get_data on line 49: RESULT: "a" offset: -1; array: yes
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_get_data on line 49: RESULT: -1.0 offset: -1; array: yes
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_get_data on line 49: RESULT: NaN offset: -1; array: yes
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_get_data on line 49: RESULT: a          offset: -1; array: yes
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_execute on line 49: query: fetch mycur; with 0 parameter(s) on connection regress1
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_execute on line 49: using PQexec
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_execute on line 49: correctly got 1 tuples with 5 fields
- [NO_PID]: sqlca: code: 0, state: 00000
- [NO_PID]: ecpg_get_data on line 49: RESULT: 4 offset: -1; array: yes
- [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_get_data on line 49: RESULT: b offset: -1; array: yes
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_get_data on line 49: RESULT: 2.0 offset: -1; array: yes
--- 80,85 ----
***************
*** 124,136 ****
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 58: OK: CLOSE CURSOR
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 116: query: drop table a1; with 0 parameter(s) on connection regress1
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 116: using PQexec
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 116: OK: DROP TABLE
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ECPGtrans on line 119: action "commit"; connection "regress1"
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_finish: connection regress1 closed
  [NO_PID]: sqlca: code: 0, state: 00000
--- 102,114 ----
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_execute on line 58: OK: CLOSE CURSOR
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 115: query: drop table a1; with 0 parameter(s) on connection regress1
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 115: using PQexec
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ecpg_execute on line 115: OK: DROP TABLE
  [NO_PID]: sqlca: code: 0, state: 00000
! [NO_PID]: ECPGtrans on line 118: action "commit"; connection "regress1"
  [NO_PID]: sqlca: code: 0, state: 00000
  [NO_PID]: ecpg_finish: connection regress1 closed
  [NO_PID]: sqlca: code: 0, state: 00000
diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout pgsql/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout
*** pgsql.orig/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout	2010-01-26 11:31:14.000000000 +0100
--- pgsql/src/interfaces/ecpg/test/expected/preproc-outofscope.stdout	2010-01-26 15:25:32.000000000 +0100
***************
*** 1,4 ****
  id=1 t='a' d1=1.000000 d2=2.000000 c = 'a         '
  id=2 t='' (NULL) d1=0.000000 (NULL) d2=0.000000 (NULL) c = '' (NULL)
! id=3 t='"a"' d1=-1.000000 d2=nan c = 'a         '
! id=4 t='b' d1=2.000000 d2=3.000000 c = 'b         '
--- 1,3 ----
  id=1 t='a' d1=1.000000 d2=2.000000 c = 'a         '
  id=2 t='' (NULL) d1=0.000000 (NULL) d2=0.000000 (NULL) c = '' (NULL)
! id=3 t='b' d1=2.000000 d2=3.000000 c = 'b         '
diff -dcrpN pgsql.orig/src/interfaces/ecpg/test/preproc/outofscope.pgc pgsql/src/interfaces/ecpg/test/preproc/outofscope.pgc
*** pgsql.orig/src/interfaces/ecpg/test/preproc/outofscope.pgc	2010-01-26 11:31:14.000000000 +0100
--- pgsql/src/interfaces/ecpg/test/preproc/outofscope.pgc	2010-01-26 15:23:51.000000000 +0100
*************** main (void)
*** 83,89 ****
  	strcpy(msg, "insert");
  	exec sql insert into a1(id, t, d1, d2, c) values (default, 'a', 1.0, 2, 'a');
  	exec sql insert into a1(id, t, d1, d2, c) values (default, null, null, null, null);
- 	exec sql insert into a1(id, t, d1, d2, c) values (default, '"a"', -1.0, 'nan'::float8, 'a');
  	exec sql insert into a1(id, t, d1, d2, c) values (default, 'b', 2.0, 3, 'b');
  
  	strcpy(msg, "commit");
--- 83,88 ----
-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to