]> granicus.if.org Git - postgresql/commitdiff
Applied all bug fixes from head also to 7.4. Just bugfixes, no new features.
authorMichael Meskes <meskes@postgresql.org>
Wed, 17 Dec 2003 15:31:51 +0000 (15:31 +0000)
committerMichael Meskes <meskes@postgresql.org>
Wed, 17 Dec 2003 15:31:51 +0000 (15:31 +0000)
src/interfaces/ecpg/ChangeLog
src/interfaces/ecpg/compatlib/Makefile
src/interfaces/ecpg/ecpglib/Makefile
src/interfaces/ecpg/ecpglib/execute.c
src/interfaces/ecpg/pgtypeslib/Makefile
src/interfaces/ecpg/pgtypeslib/numeric.c
src/interfaces/ecpg/preproc/Makefile
src/interfaces/ecpg/preproc/extern.h
src/interfaces/ecpg/preproc/preproc.y
src/interfaces/ecpg/preproc/variable.c

index 632c4c9565353f7fff6248ad8a8b9abf64ea8ca4..df608d25cf7311764bc7620f2b80a1dae5ae1304 100644 (file)
@@ -1714,3 +1714,17 @@ Mon Nov  3 15:43:19 CET 2003
        - Set pgtypes library to 1.0.0
        - Set compat library to 1.0.0
 
+Wed Dec  3 09:45:21 CET 2003
+
+       - Added patch for array handling by Dave Cramer
+       
+Wed Dec 17 16:11:16 CET 2003
+
+       - Added just another patch by Dave that fixes a reversed order in
+         variable listing for output variables in cursor definitions
+       - Fixed incorrect if call in long=>numeric conversion.
+       - Set ecpg version to 3.1.0
+       - Set ecpg library to 4.1.0
+       - Set pgtypes library to 1.1.0
+       - Set compat library to 1.1.0
+
index da81ff47f8df1032dfa282dc46a5aed91ebdd951..4fa3d66a3446342fbc5778f7c7598bcca13a3ff7 100644 (file)
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/compatlib/Makefile,v 1.11 2003/10/28 21:55:58 tgl Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/Makefile,v 1.11.2.1 2003/12/17 15:31:51 meskes Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global
 
 NAME= ecpg_compat
 SO_MAJOR_VERSION= 1
-SO_MINOR_VERSION= 0
+SO_MINOR_VERSION= 1
 
 override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(libpq_srcdir) -I$(top_srcdir)/src/include/utils $(CPPFLAGS) $(THREAD_CPPFLAGS)
 SHLIB_LINK = -L../ecpglib -lecpg -L../pgtypeslib -lpgtypes $(libpq) \
index 25620f35b30dc304c9c140d6fbb2e912c14dcea3..7bcfdfedd53d4f6befc02c41100bf5a7a397580f 100644 (file)
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.10 2003/10/28 21:55:58 tgl Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/Makefile,v 1.10.2.1 2003/12/17 15:31:51 meskes Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global
 
 NAME= ecpg
 SO_MAJOR_VERSION= 4
-SO_MINOR_VERSION= 0
+SO_MINOR_VERSION= 1
 
 override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(libpq_srcdir) $(CPPFLAGS) $(THREAD_CPPFLAGS) 
 
index 18fa03bac2e857c5384c2eb68646e5fd0768871c..3c54a07ac5bc73f12d916e3128ec573896e330ff 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.26.2.2 2003/11/12 08:42:57 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.26.2.3 2003/12/17 15:31:51 meskes Exp $ */
 
 /*
  * The aim is to get a simpler inteface to the database routines.
@@ -314,16 +314,21 @@ ECPGis_type_an_array(int type, const struct statement * stmt, const struct varia
        sprintf(array_query, "select typlen from pg_type where oid=%d and typelem<>0", type);
        query = PQexec(stmt->connection->connection, array_query);
        ECPGfree(array_query);
-       if (PQresultStatus(query) == PGRES_TUPLES_OK)
+       if (PQresultStatus(query) == PGRES_TUPLES_OK )
        {
-               isarray = (atol((char *) PQgetvalue(query, 0, 0)) == -1) ? ECPG_ARRAY_ARRAY : ECPG_ARRAY_VECTOR;
-               if (ECPGDynamicType(type) == SQL3_CHARACTER ||
-                       ECPGDynamicType(type) == SQL3_CHARACTER_VARYING)
-               {
-                       /*
-                        * arrays of character strings are not yet implemented
-                        */
+               if ( PQntuples(query) == 0 )
                        isarray = ECPG_ARRAY_NONE;
+               else
+               {
+                       isarray = (atol((char *) PQgetvalue(query, 0, 0)) == -1) ? ECPG_ARRAY_ARRAY : ECPG_ARRAY_VECTOR;
+                       if (ECPGDynamicType(type) == SQL3_CHARACTER ||
+                               ECPGDynamicType(type) == SQL3_CHARACTER_VARYING)
+                       {
+                               /*
+                                * arrays of character strings are not yet implemented
+                                */
+                               isarray = ECPG_ARRAY_NONE;
+                       }
                }
        }
        PQclear(query);
@@ -353,7 +358,7 @@ ECPGstore_result(const PGresult *results, int act_field,
                {
                        ECPGlog("ECPGexecute line %d: Incorrect number of matches: %d don't fit into array of %d\n",
                                        stmt->lineno, ntuples, var->arrsize);
-                       ECPGraise(stmt->lineno, ECPG_TOO_MANY_MATCHES, ECPG_SQLSTATE_CARDINALITY_VIOLATION, NULL);
+                       ECPGraise(stmt->lineno, INFORMIX_MODE(stmt->compat)?ECPG_INFORMIX_SUBSELECT_NOT_ONE:ECPG_TOO_MANY_MATCHES, ECPG_SQLSTATE_CARDINALITY_VIOLATION, NULL);
                        return false;
                }
        }
index 043055539b0342174c7c8a547e99db5574882837..cead1b4843e6627881a4f088320b7f07864acf91 100644 (file)
@@ -4,7 +4,7 @@
 #
 # Copyright (c) 1994, Regents of the University of California
 #
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/pgtypeslib/Makefile,v 1.13 2003/10/03 17:04:48 tgl Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/pgtypeslib/Makefile,v 1.13.2.1 2003/12/17 15:31:51 meskes Exp $
 #
 #-------------------------------------------------------------------------
 
@@ -14,7 +14,7 @@ include $(top_builddir)/src/Makefile.global
 
 NAME= pgtypes
 SO_MAJOR_VERSION= 1
-SO_MINOR_VERSION= 0
+SO_MINOR_VERSION= 1
 
 override CPPFLAGS := -I$(top_srcdir)/src/interfaces/ecpg/include -I$(top_srcdir)/src/include/utils -I$(libpq_srcdir) $(CPPFLAGS) $(THREAD_CPPFLAGS)
 SHLIB_LINK += -lm
index 11793f06ea1ee9b9e980c839ebef60b0a1f89d24..b06b8d14e5629d56f375b4d2bedf50e4f701cf80 100644 (file)
@@ -1353,7 +1353,7 @@ PGTYPESnumeric_from_long(signed long int long_val, numeric *var)
                reach_limit *= 10;
        } while ((reach_limit - 1) < abs_long_val && reach_limit <= LONG_MAX/10);
 
-       if (reach_limit <= LONG_MAX/10)
+       if (reach_limit > LONG_MAX/10)
        {
                /* add the first digit and a .0 */
                size += 2;
index 1238f809d13f6f4951595dc17c1199f9e6cde72b..fa2bc79915aade4a3d295e9d36b32f438f64bb77 100644 (file)
@@ -1,11 +1,11 @@
-# $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.94 2003/09/27 15:32:48 momjian Exp $
+# $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/Makefile,v 1.94.2.1 2003/12/17 15:31:51 meskes Exp $
 
 subdir = src/interfaces/ecpg/preproc
 top_builddir = ../../../..
 include $(top_builddir)/src/Makefile.global
 
 MAJOR_VERSION=3
-MINOR_VERSION=0
+MINOR_VERSION=1
 PATCHLEVEL=0
 
 override CPPFLAGS := -I$(srcdir)/../include -I$(srcdir) $(CPPFLAGS) $(THREAD_CPPFLAGS) \
index a1ea69e1860eacd91f2d63f142f39054384816a0..4ff8298e7199c16cc1dbf3cbf907f281addab09d 100644 (file)
@@ -75,8 +75,8 @@ extern void add_descriptor(char *, char *);
 extern void drop_descriptor(char *, char *);
 extern struct descriptor *lookup_descriptor(char *, char *);
 extern struct variable *descriptor_variable(const char *name, int input);
-extern void add_variable(struct arguments **, struct variable *, struct variable *);
-extern void append_variable(struct arguments **, struct variable *, struct variable *);
+extern void add_variable_to_head(struct arguments **, struct variable *, struct variable *);
+extern void add_variable_to_tail(struct arguments **, struct variable *, struct variable *);
 extern void dump_variables(struct arguments *, int);
 extern struct typedefs *get_typedef(char *);
 extern void adjust_array(enum ECPGttype, char **, char **, char *, char *, int);
index c07e4a04930045192d5c7f247d7c901112c69282..9bd7e1a74afcf06d07083a38fc6055dda45f1811 100644 (file)
@@ -1,4 +1,4 @@
-/* $Header: /cvsroot/pgsql/src/interfaces/ecpg/preproc/Attic/preproc.y,v 1.263.2.2 2003/11/19 13:19:40 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/preproc/preproc.y,v 1.263.2.3 2003/12/17 15:31:51 meskes Exp $ */
 
 /* Copyright comment */
 %{
@@ -271,12 +271,12 @@ add_additional_variables(char *name, bool insert)
                /* add all those input variables that were given earlier 
                 * note that we have to append here but have to keep the existing order */
                for (p = ptr->argsinsert; p; p = p->next)
-                       append_variable(&argsinsert, p->variable, p->indicator);
+                       add_variable_to_tail(&argsinsert, p->variable, p->indicator);
        }
 
        /* add all those output variables that were given earlier */
        for (p = ptr->argsresult; p; p = p->next)
-               add_variable(&argsresult, p->variable, p->indicator);
+               add_variable_to_tail(&argsresult, p->variable, p->indicator);
        
        return ptr;
 }
@@ -4385,7 +4385,7 @@ ECPGCursorStmt:  DECLARE name cursor_options CURSOR opt_hold FOR prepared_name
                        sprintf(thisquery->name, "ECPGprepared_statement(%s)", $7);
 
                        this->argsinsert = NULL;
-                       add_variable(&(this->argsinsert), thisquery, &no_indicator);
+                       add_variable_to_head(&(this->argsinsert), thisquery, &no_indicator);
 
                        cur = this;
 
@@ -5211,7 +5211,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
                        thisquery->next = NULL;
                        thisquery->name = $3;
 
-                       add_variable(&argsinsert, thisquery, &no_indicator);
+                       add_variable_to_head(&argsinsert, thisquery, &no_indicator);
 
                        $$ = make_str("?");
                }
@@ -5225,7 +5225,7 @@ ECPGExecute : EXECUTE IMMEDIATE execstring
                        thisquery->name = (char *) mm_alloc(sizeof("ECPGprepared_statement()") + strlen($2));
                        sprintf(thisquery->name, "ECPGprepared_statement(%s)", $2);
 
-                       add_variable(&argsinsert, thisquery, &no_indicator);
+                       add_variable_to_head(&argsinsert, thisquery, &no_indicator);
                }
                execute_rest
                {
@@ -5270,14 +5270,14 @@ ecpg_using:     USING using_list        { $$ = EMPTY; }
 
 using_descriptor: USING opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
                {
-                       add_variable(&argsresult, descriptor_variable($4,0), &no_indicator);
+                       add_variable_to_head(&argsresult, descriptor_variable($4,0), &no_indicator);
                        $$ = EMPTY;
                }
                ;
 
 into_descriptor: INTO opt_sql SQL_DESCRIPTOR quoted_ident_stringvar
                {
-                       add_variable(&argsresult, descriptor_variable($4,0), &no_indicator);
+                       add_variable_to_head(&argsresult, descriptor_variable($4,0), &no_indicator);
                        $$ = EMPTY;
                }
                ;
@@ -5301,7 +5301,7 @@ UsingConst: AllConst
                                char *length = mm_alloc(32);
 
                                sprintf(length, "%d", (int) strlen($1));
-                               add_variable(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
+                               add_variable_to_head(&argsinsert, new_variable($1, ECPGmake_simple_type(ECPGt_const, length), 0), &no_indicator);
                        }
                }
                ;
@@ -6147,9 +6147,9 @@ c_args: /*EMPTY*/         { $$ = EMPTY; }
                ;
 
 coutputvariable: CVARIABLE indicator
-                       { add_variable(&argsresult, find_variable($1), find_variable($2)); }
+                       { add_variable_to_head(&argsresult, find_variable($1), find_variable($2)); }
                | CVARIABLE
-                       { add_variable(&argsresult, find_variable($1), &no_indicator); }
+                       { add_variable_to_head(&argsresult, find_variable($1), &no_indicator); }
                ;
 
 
@@ -6158,14 +6158,14 @@ civarind: CVARIABLE indicator
                        if (find_variable($2)->type->type == ECPGt_array)
                                mmerror(PARSE_ERROR, ET_ERROR, "arrays of indicators are not allowed on input");
 
-                       add_variable(&argsinsert, find_variable($1), find_variable($2));
+                       add_variable_to_head(&argsinsert, find_variable($1), find_variable($2));
                        $$ = create_questionmarks($1, false);
                }
                ;
 
 civar: CVARIABLE
                        {
-                               add_variable(&argsinsert, find_variable($1), &no_indicator);
+                               add_variable_to_head(&argsinsert, find_variable($1), &no_indicator);
                                $$ = create_questionmarks($1, false);
                        }
                ;
index 7a3875832ab132fd360c3417f70f61f0c76f7469..be1cb5f0b74e960b75a27ef2d098e6d7ca23c4c3 100644 (file)
@@ -299,7 +299,7 @@ remove_variables(int brace_level)
                                                        prevvar->next = varptr->next;
                                        }
                                }
-                               for (varptr = ptr->argsresult; varptr != NULL; varptr = varptr->next)
+                               for (varptr = prevvar = ptr->argsresult; varptr != NULL; varptr = varptr->next)
                                {
                                        if (p == varptr->variable)
                                        {
@@ -349,7 +349,7 @@ reset_variables(void)
  * Note: The list is dumped from the end,
  * so we have to add new entries at the beginning */
 void
-add_variable(struct arguments ** list, struct variable * var, struct variable * ind)
+add_variable_to_head(struct arguments ** list, struct variable * var, struct variable * ind)
 {
        struct arguments *p = (struct arguments *) mm_alloc(sizeof(struct arguments));
 
@@ -361,7 +361,7 @@ add_variable(struct arguments ** list, struct variable * var, struct variable *
 
 /* Append a new variable to our request list. */
 void
-append_variable(struct arguments ** list, struct variable * var, struct variable * ind)
+add_variable_to_tail(struct arguments ** list, struct variable * var, struct variable * ind)
 {
        struct arguments *p,
                           *new = (struct arguments *) mm_alloc(sizeof(struct arguments));