Descriptor values were quoted twice.
authorMichael Meskes <meskes@postgresql.org>
Tue, 22 Aug 2006 12:46:18 +0000 (12:46 +0000)
committerMichael Meskes <meskes@postgresql.org>
Tue, 22 Aug 2006 12:46:18 +0000 (12:46 +0000)
Fixed some regression test problems.

src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/ecpglib/execute.c
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.c
src/interfaces/ecpg/test/expected/pgtypeslib-dt_test.stderr
src/interfaces/ecpg/test/expected/sql-desc.c
src/interfaces/ecpg/test/expected/sql-desc.stderr
src/interfaces/ecpg/test/expected/sql-desc.stdout
src/interfaces/ecpg/test/pgtypeslib/dt_test.pgc
src/interfaces/ecpg/test/sql/desc.pgc

index 7ecb2f0b6d2d9de79d5ad565bc7050ac14b2b1a1..0c23471cf802820ed7907b7e12e14e20e04b2f4d 100644 (file)
@@ -2095,7 +2095,6 @@ Mo Aug 14 10:39:59 CEST 2006
    - 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
 
@@ -2107,5 +2106,9 @@ 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.
index 0eb12e1b1526dca845e2fd6d1892c831aed12f55..bba3b6ee49985257d5d461ce6fe3980dd795560c 100644 (file)
@@ -1,4 +1,4 @@
-/* $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.
@@ -39,9 +39,8 @@ static char *
 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);
 
@@ -51,16 +50,29 @@ quote_postgres(char *arg, int lineno)
     */ 
    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);
index 6082488a8bf9526567942c294ce309d18e248e88..ed734e54497ed42f1717c7f1297a48728d1cfd98 100644 (file)
@@ -81,7 +81,7 @@ if (sqlca.sqlcode < 0) sqlprint (  );}
    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), 
@@ -131,14 +131,13 @@ if (sqlca.sqlcode < 0) sqlprint (  );}
 
    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() */
@@ -418,16 +417,16 @@ if (sqlca.sqlcode < 0) sqlprint (  );}
    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);
index 6ee6091ecd022cfb52c7006ccf6faf010ae80a57..8f984c6675551e0cb8b92a0c3734ea7c61ad2cbb 100644 (file)
@@ -10,7 +10,7 @@
 [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
@@ -22,7 +22,7 @@
 [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
index aef542de8565cf3fd44170f13745c879d0ca805d..66eb1d1d58ecaf6981df4fb7a39addd60d9376e3 100644 (file)
@@ -48,7 +48,7 @@ main(void)
  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 ;
@@ -86,7 +86,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
 #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"
@@ -147,7 +147,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
 #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"
@@ -176,7 +176,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
 #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"
@@ -199,7 +199,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
 
 
    { 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"
 
@@ -225,7 +225,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
    { 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"
 
@@ -275,7 +275,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
    { 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"
 
@@ -294,7 +294,7 @@ if (sqlca.sqlcode < 0) sqlprint();}
    { 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"
 
index 23673cc4b8958f03138c1bc977ab06e3319a6249..4b92519ba6acecbfc4187b650e034236b71f0282 100644 (file)
@@ -12,7 +12,7 @@
 [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
@@ -20,7 +20,7 @@
 [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
@@ -30,7 +30,7 @@
 [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
@@ -40,7 +40,7 @@
 [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
index 1c478b62f7140c4b2ec646a77458eab9c28c667a..676e3ffce12bb6c0b5e7faacffd3da507d979844 100644 (file)
@@ -1,4 +1,4 @@
 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
index 51dcf37f904d1eaf688912f1dd2d00c0e27f0568..d6c166477fc56cc14e46f15f495a53fd649bbee9 100644 (file)
@@ -62,14 +62,13 @@ main(void)
 
    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() */
index dd91a8780f840cd32cd74e3e1ca1a4707d1049c8..c4d47cab84d53f82f355a02001de359dea24cd6f 100644 (file)
@@ -10,7 +10,7 @@ main(void)
    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;