postgres bug

Norman Stevens <norman@arcady.u-net.com>

From: Norman Stevens <norman@arcady.u-net.com>
To: pgsql-bugs@postgresql.org
Date: 1999-08-15T21:54:10Z
Lists: pgsql-bugs

Attachments

============================================================================
                        POSTGRESQL BUG REPORT TEMPLATE
============================================================================


Your name		:		NF Stevens
Your email address	:	norman@arcady.u-net.com


System Configuration
---------------------
  Architecture (example: Intel Pentium)  	: 

	processor	: 0
	vendor_id	: CyrixInstead
	cpu family	: 5
	model		: 4
	model name	: 6x86L 2x Core/Bus Clock
	stepping	: 2
	fdiv_bug	: no
	hlt_bug		: no
	sep_bug		: no
	f00f_bug	: no
	coma_bug	: yes
	fpu		: yes
	fpu_exception	: yes
	cpuid level	: 1
	wp		: yes
	flags		: fpu de cx8 mtrr
	bogomips	: 149.50

  Operating System (example: Linux 2.0.26 ELF) 	:

	Linux arcady 2.2.10 #2 Sat Jul 17 15:52:35 BST 1999 i586 unknown

  PostgreSQL version (example: PostgreSQL-6.5.1):   PostgreSQL-6.5.1

  Compiler used (example:  gcc 2.8.0)		:

	gcc version egcs-2.91.60 19981201 (egcs-1.1.1 release)

  Libc version : glibc-2.1.1

Please enter a FULL description of your problem:
------------------------------------------------

Inserts into a varchar field where the value contains a quote character
(') fail when the statement has been dynamically prepared.


Please describe a way to repeat the problem.   Please try to provide a
concise reproducible example, if at all possible: 
----------------------------------------------------------------------

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

EXEC SQL INCLUDE sqlca;

int main (void)
{

	EXEC SQL BEGIN DECLARE SECTION;
	char Query [128] = "INSERT into e (name,size) values (:name,:size)";
	char name [1024];
	int size = 64;
	EXEC SQL END DECLARE SECTION;

	EXEC SQL CONNECT norman;

	/* Don't complain about table existing the second time it's run */
	EXEC SQL WHENEVER SQLERROR CONTINUE;
	EXEC SQL CREATE TABLE e (name varchar (32), size integer);
	EXEC SQL COMMIT;
	sqlca.sqlcode = 0;

	EXEC SQL WHENEVER SQLERROR Goto Error;
	EXEC SQL PREPARE Stmt FROM :Query;
	printf ("Prepared\n");

	strcpy (name, "abcdef");
	EXEC SQL EXECUTE Stmt USING :name,:size;
	printf ("Executed 1\n");

	strcpy (name, "abc'ef");
	EXEC SQL EXECUTE Stmt USING :name,:size;
	printf ("Executed 2\n");

	EXEC SQL COMMIT;

	printf ("Committed\n");
	return 0;
Error:
	printf ("Oops \"%s\"\n", name);
	printf ("%*.*s\n", sqlca.sqlerrm.sqlerrml,
		 sqlca.sqlerrm.sqlerrml, sqlca.sqlerrm.sqlerrmc);
	return 2;
}

The output of this program is

Prepared
Executed 1
Oops "abc'ef"
Too many arguments line 34.

If you know how this problem might be fixed, list the solution below:
---------------------------------------------------------------------

Unknown at this time.