Fixed some regression test problems.
- Fixed broken newline on Windows.
- Fixed a nasty buffer underrun that only occured when using Informix
no_indicator NULL setting on timestamps and intervals.
-<<<<<<< ChangeLog
Fr 18. Aug 17:32:54 CEST 2006
Sa 19. Aug 14:11:32 CEST 2006
- More SoC stuff.
+
+Tu 22. Aug 13:54:08 CEST 2006
+
+ - Descriptor values were quoted twice.
- Set ecpg library version to 5.2.
- Set ecpg version to 4.2.1.
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.59 2006/08/18 16:30:53 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.60 2006/08/22 12:46:17 meskes Exp $ */
/*
* The aim is to get a simpler inteface to the database routines.
quote_postgres(char *arg, int lineno)
{
char *res = (char *) ECPGalloc(2 * strlen(arg) + 3, lineno);
- int i,
+ int i, quoted = false,
ri = 0;
-
if (!res)
return (res);
*/
if (strchr(arg, '\\') != NULL)
res[ri++] = ESCAPE_STRING_SYNTAX;
+
+ i = 0;
res[ri++] = '\'';
+ /* do not quote the string if it is already quoted */
+ if (*arg == '\'' && arg[strlen(arg)-1] == '\'')
+ {
+ quoted = true;
+ i = 1;
+ }
- for (i = 0; arg[i]; i++, ri++)
+ for (; arg[i]; i++, ri++)
{
if (SQL_STR_DOUBLE(arg[i], true))
res[ri++] = arg[i];
res[ri] = arg[i];
}
- res[ri++] = '\'';
+ /* do not quote the string if it is already quoted */
+ if (quoted)
+ ri--;
+ else
+ res[ri++] = '\'';
+
res[ri] = '\0';
ECPGfree(arg);
date1 = PGTYPESdate_from_asc(d1, NULL);
ts1 = PGTYPEStimestamp_from_asc(t1, NULL);
- { ECPGdo(__LINE__, 0, 1, NULL, "insert into date_test ( d , ts ) values( ? , ? )",
+ { ECPGdo(__LINE__, 0, 1, NULL, "insert into date_test ( d , ts ) values( ? , ? ) ",
ECPGt_date,&(date1),(long)1,(long)1,sizeof(date),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
ECPGt_timestamp,&(ts1),(long)1,(long)1,sizeof(timestamp),
ts1 = PGTYPEStimestamp_from_asc("2003-12-04 17:34:29", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
- printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(ts1));
- free(text);
-
fmt = "(ddd), mmm. dd, yyyy, repeat: (ddd), mmm. dd, yyyy. end";
out = (char*) malloc(strlen(fmt) + 1);
date1 = PGTYPESdate_from_timestamp(ts1);
PGTYPESdate_fmt_asc(date1, fmt, out);
+ printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
+ free(text);
free(out);
/* rdate_defmt_asc() */
free(text);
{ ECPGtrans(__LINE__, NULL, "rollback");
-#line 351 "dt_test.pgc"
+#line 350 "dt_test.pgc"
if (sqlca.sqlcode < 0) sqlprint ( );}
-#line 351 "dt_test.pgc"
+#line 350 "dt_test.pgc"
{ ECPGdisconnect(__LINE__, "CURRENT");
-#line 352 "dt_test.pgc"
+#line 351 "dt_test.pgc"
if (sqlca.sqlcode < 0) sqlprint ( );}
-#line 352 "dt_test.pgc"
+#line 351 "dt_test.pgc"
return (0);
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 30 Ok: SET
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGexecute line 35: QUERY: insert into date_test ( d , ts ) values( date '1966-01-17' , timestamp '2000-07-12 17:34:29' ) on connection regress1
+[NO_PID]: ECPGexecute line 35: QUERY: insert into date_test ( d , ts ) values( date '1966-01-17' , timestamp '2000-07-12 17:34:29' ) on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 35 Ok: INSERT 0 1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGget_data line 37: RESULT: 2000-07-12 17:34:29 offset: -1 array: Yes
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGtrans line 351 action = rollback connection = regress1
+[NO_PID]: ECPGtrans line 350 action = rollback connection = regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ecpg_finish: Connection regress1 closed.
[NO_PID]: sqlca: code: 0, state: 00000
int val1 = 1 ;
#line 13 "desc.pgc"
- char val2 [] = "one" , val2output [] = "AAA" ;
+ char val2 [ 4 ] = "one" , val2output [ 4 ] = "AAA" ;
#line 14 "desc.pgc"
int val1output = 2 , val2i = 0 ;
#line 24 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
- ECPGt_char,&(val2),(long)-1,(long)1,(-1)*sizeof(char), ECPGd_indicator,
+ ECPGt_char,(val2),(long)4,(long)1,(4)*sizeof(char), ECPGd_indicator,
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 25 "desc.pgc"
#line 36 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
- ECPGt_char,&(val2),(long)-1,(long)1,(-1)*sizeof(char), ECPGd_indicator,
+ ECPGt_char,(val2),(long)4,(long)1,(4)*sizeof(char), ECPGd_indicator,
ECPGt_int,&(val2null),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 37 "desc.pgc"
#line 41 "desc.pgc"
{ ECPGset_desc(__LINE__, "indesc", 2,ECPGd_data,
- ECPGt_char,&(val2),(long)-1,(long)1,(-1)*sizeof(char), ECPGd_indicator,
+ ECPGt_char,(val2),(long)4,(long)1,(4)*sizeof(char), ECPGd_indicator,
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGd_EODT);
#line 42 "desc.pgc"
{ ECPGget_desc(__LINE__, "outdesc", 1,ECPGd_data,
- ECPGt_char,&(val2output),(long)-1,(long)1,(-1)*sizeof(char), ECPGd_EODT);
+ ECPGt_char,(val2output),(long)4,(long)1,(4)*sizeof(char), ECPGd_EODT);
#line 46 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "fetch next from c1", ECPGt_EOIT,
ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int),
ECPGt_int,&(ind1),(long)1,(long)1,sizeof(int),
- ECPGt_char,&(val2output),(long)-1,(long)1,(-1)*sizeof(char),
+ ECPGt_char,(val2output),(long)4,(long)1,(4)*sizeof(char),
ECPGt_int,&(ind2),(long)1,(long)1,sizeof(int), ECPGt_EORT);
#line 52 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "fetch next from c2", ECPGt_EOIT,
ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
- ECPGt_char,&(val2output),(long)-1,(long)1,(-1)*sizeof(char),
+ ECPGt_char,(val2output),(long)4,(long)1,(4)*sizeof(char),
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGt_EORT);
#line 64 "desc.pgc"
{ ECPGdo(__LINE__, 0, 1, NULL, "select * from test1 where a = 2 ", ECPGt_EOIT,
ECPGt_int,&(val1output),(long)1,(long)1,sizeof(int),
ECPGt_NO_INDICATOR, NULL , 0L, 0L, 0L,
- ECPGt_char,&(val2output),(long)-1,(long)1,(-1)*sizeof(char),
+ ECPGt_char,(val2output),(long)4,(long)1,(4)*sizeof(char),
ECPGt_int,&(val2i),(long)1,(long)1,sizeof(int), ECPGt_EORT);
#line 69 "desc.pgc"
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGprepare line 32: QUERY: SELECT * from test1 where a = ?
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGexecute line 34: QUERY: INSERT INTO test1 VALUES ('1', '''one''') on connection regress1
+[NO_PID]: ECPGexecute line 34: QUERY: INSERT INTO test1 VALUES ('1', 'one') on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 34 Ok: INSERT 0 1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 39 Ok: INSERT 0 1
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGexecute line 44: QUERY: SELECT * from test1 where a = '1' and b = '''one''' on connection regress1
+[NO_PID]: ECPGexecute line 44: QUERY: SELECT * from test1 where a = '1' and b = 'one' on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 44: Correctly got 1 tuples with 2 fields
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGget_data line 46: RESULT: 1 offset: -1 array: Yes
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGexecute line 50: QUERY: declare c1 cursor for SELECT * from test1 where a = '1' and b = '''one''' on connection regress1
+[NO_PID]: ECPGexecute line 50: QUERY: declare c1 cursor for SELECT * from test1 where a = '1' and b = 'one' on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 50 Ok: DECLARE CURSOR
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGget_data line 52: RESULT: 1 offset: -1 array: Yes
[NO_PID]: sqlca: code: 0, state: 00000
-[NO_PID]: ECPGget_data line 52: RESULT: 'one' offset: -1 array: Yes
+[NO_PID]: ECPGget_data line 52: RESULT: one offset: -1 array: Yes
[NO_PID]: sqlca: code: 0, state: 00000
[NO_PID]: ECPGexecute line 56: QUERY: close c1 on connection regress1
[NO_PID]: sqlca: code: 0, state: 00000
output = 1
-val1=1 (ind1: 0) val2='one' (ind2: 0)
+val1=1 (ind1: 0) val2=one (ind2: 0)
val1=2 val2=null
val1=2 val2=null
ts1 = PGTYPEStimestamp_from_asc("2003-12-04 17:34:29", NULL);
text = PGTYPEStimestamp_to_asc(ts1);
- printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(ts1));
- free(text);
-
fmt = "(ddd), mmm. dd, yyyy, repeat: (ddd), mmm. dd, yyyy. end";
out = (char*) malloc(strlen(fmt) + 1);
date1 = PGTYPESdate_from_timestamp(ts1);
PGTYPESdate_fmt_asc(date1, fmt, out);
+ printf("date_day of %s is %d\n", text, PGTYPESdate_dayofweek(date1));
printf("Above date in format \"%s\" is \"%s\"\n", fmt, out);
+ free(text);
free(out);
/* rdate_defmt_asc() */
char *stmt3 = "SELECT * from test1 where a = ?";
int val1 = 1;
- char val2[] = "one", val2output[] = "AAA";
+ char val2[4] = "one", val2output[4] = "AAA";
int val1output = 2, val2i = 0;
int val2null = -1;
int ind1, ind2;