*** execute.c.orig	Sat Aug 19 01:33:50 2006
--- execute.c	Tue Feb 27 20:22:12 2007
***************
*** 38,70 ****
  static char *
  quote_postgres(char *arg, int lineno)
  {
! 	char	   *res = (char *) ECPGalloc(2 * strlen(arg) + 3, lineno);
! 	int			i,
! 				ri = 0;
  
  	if (!res)
  		return (res);
  
! 	res[ri++] = '\'';
! 
! 	for (i = 0; arg[i]; i++, ri++)
  	{
! 		switch (arg[i])
! 		{
! 			case '\'':
! 				res[ri++] = '\'';
! 				break;
! 			case '\\':
! 				res[ri++] = '\\';
! 				break;
! 			default:
! 				;
! 		}
! 		res[ri] = arg[i];
  	}
  
! 	res[ri++] = '\'';
! 	res[ri] = '\0';
  
  	ECPGfree(arg);
  	return res;
--- 38,69 ----
  static char *
  quote_postgres(char *arg, int lineno)
  {
! 	char	*res;
! 	int	error;
! 	size_t  length;
! 	size_t  escaped_len;
! 	size_t  buffer_len;
  
+ 	/*
+ 	 * if quote is false we just need to store things in a descriptor they
+ 	 * will be quoted once they are inserted in a statement
+ 	 */
+ 	length = strlen(arg);
+ 	buffer_len = 2 * length + 1;
+ 	res = (char *) ECPGalloc(buffer_len + 2, lineno);
  	if (!res)
  		return (res);
  
! 	error = 0;
! 	escaped_len = PQescapeString(res+1, arg, buffer_len);
! 	if (error)
  	{
! 		ECPGfree(res);
! 		return NULL;
  	}
  
! 	res[0] = res[escaped_len+1] = '\'';
! 	res[escaped_len+2] = '\0';
  
  	ECPGfree(arg);
  	return res;
