Just another Informix compatibility change. They uses "free" for cursors as wellafter...
authorMichael Meskes
Fri, 20 Jun 2003 13:36:34 +0000 (13:36 +0000)
committerMichael Meskes
Fri, 20 Jun 2003 13:36:34 +0000 (13:36 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/compatlib/informix.c
src/interfaces/ecpg/ecpglib/prepare.c
src/interfaces/ecpg/include/ecpg_informix.h
src/interfaces/ecpg/include/ecpglib.h
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/test/test4.pgc

index 617d6588e207564924b8d82d5696527fb79db2eb..42173f76ab8c26cbf7d133db55818f9e986942b7 100644 (file)
@@ -1505,6 +1505,10 @@ Thu Jun 19 10:08:26 CEST 2003
 Fri Jun 20 13:23:07 CEST 2003
 
    - Enabled constants in using clause.
+   
+Fri Jun 20 15:34:29 CEST 2003
+
+   - For Informix compatibility we have to accept a "free ".
    - Set ecpg version to 3.0.0
    - Set ecpg library to 4.0.0
    - Set pgtypes library to 1.0.0
index 5e3e94b416f1844d19f6691cad5f13a5e60e04b1..2ac89e8f7e12b68757c47b48826921eed2a12ceb 100644 (file)
@@ -695,6 +695,16 @@ ECPGconnect_informix(int lineno, const char *name, const char *user, const char
            return (ECPGconnect(lineno, informix_name, user, passwd, connection_name , autocommit));
 }
 
+bool
+ECPGdeallocate_informix(int lineno, char *name)
+{
+   ECPGdeallocate_one(lineno, name);
+
+   /* Just ignore all errors since we do not know the list of cursors we
+    * are allowed to free. We have to trust that the software. */
+   return true;
+}
+   
 static struct var_list
 {
    int number;
index 7de8367184c5a3c5f3524bbff5a3a001e0e2cd91..5f8c92c092c34bda2f716961e53afd836e9a0579 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.2 2003/06/15 04:07:58 momjian Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/prepare.c,v 1.3 2003/06/20 13:36:34 meskes Exp $ */
 
 #define POSTGRES_ECPG_INTERNAL
 #include "postgres_fe.h"
@@ -106,6 +106,18 @@ ECPGprepare(int lineno, char *name, char *variable)
 /* handle the EXEC SQL DEALLOCATE PREPARE statement */
 bool
 ECPGdeallocate(int lineno, char *name)
+{
+   bool ret = ECPGdeallocate_one(lineno, name);
+
+   if (!ret) 
+       ECPGraise(lineno, ECPG_INVALID_STMT, name);
+
+   return ret;
+       
+}
+
+bool
+ECPGdeallocate_one(int lineno, char *name)
 {
    struct prepared_statement *this,
               *prev;
@@ -126,7 +138,6 @@ ECPGdeallocate(int lineno, char *name)
        ECPGfree(this);
        return true;
    }
-   ECPGraise(lineno, ECPG_INVALID_STMT, name);
    return false;
 }
 
index 4493dc6f29f2f08f88c27bb837eb9e9e4b0735d8..f79478663260ce54b112bed9fe37bd3aec85c4ea 100644 (file)
@@ -34,5 +34,6 @@ extern int byleng(char *, int);
 extern void ldchar(char *, int, char *);
 
 extern bool ECPGconnect_informix(int, const char *, const char *, const char *, const char *, int);
+extern bool ECPGdeallocate_informix(int, char *);
 extern void ECPG_informix_set_var(int, void *, int);
 extern void *ECPG_informix_get_var(int);
index da91927854c84041292ed30b49520fe6421abda4..ae272927c6f85e8958eac16a61093de1865babb7 100644 (file)
@@ -51,6 +51,7 @@ bool      ECPGtrans(int, const char *, const char *);
 bool       ECPGdisconnect(int, const char *);
 bool       ECPGprepare(int, char *, char *);
 bool       ECPGdeallocate(int, char *);
+bool       ECPGdeallocate_one(int, char *);
 bool       ECPGdeallocate_all(int);
 char      *ECPGprepared_statement(char *);
 
index 107d84251f50667045b96b4ad4ea53d6a36a0a8b..7a8c2284bd26bc4e6612684e1389d753a2b9415f 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.235 2003/06/20 12:00:59 meskes Exp $ */
+/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.236 2003/06/20 13:36:34 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -674,7 +674,10 @@ stmt:  AlterDatabaseSetStmt        { output_statement($1, 0, connection); }
        }
        | ECPGFree
        {
-           fprintf(yyout, "{ ECPGdeallocate(__LINE__, \"%s\");", $1);
+           if (compat == ECPG_COMPAT_INFORMIX)
+               fprintf(yyout, "{ ECPGdeallocate_informix(__LINE__, \"%s\");", $1);
+           else
+               fprintf(yyout, "{ ECPGdeallocate(__LINE__, \"%s\");", $1);
 
            whenever_action(2);
            free($1);
index 31d4d278e584c28cac41a4e089516ab72155af7e..7a4c49df53fd0c38f36ffb419051e00a43bef23f 100644 (file)
@@ -13,13 +13,14 @@ EXEC SQL BEGIN DECLARE SECTION;
    int *did = &i;
    int a[10] = {9,8,7,6,5,4,3,2,1,0};
    char text[10] = "klmnopqrst";
-   char *t = "uvwxyz1234";
+   char *t = (char *)malloc(10);
    double f;
    bool b = true;
    varchar database[3];
 EXEC SQL END DECLARE SECTION;
    FILE *dbgs;
 
+   strcpy(t, "0123456789");
    setlocale(LC_ALL, "de_DE");
         
    if ((dbgs = fopen("log", "w")) != NULL)