]> git.ipfire.org Git - thirdparty/postgresql.git/commitdiff
Just another Informix compatibility change. They uses "free" for cursors as wellafter...
authorMichael Meskes <meskes@postgresql.org>
Fri, 20 Jun 2003 13:36:34 +0000 (13:36 +0000)
committerMichael Meskes <meskes@postgresql.org>
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 <cursor>".
        - 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)