- 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
+
#
# 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 $
#
#-------------------------------------------------------------------------
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) \
#
# 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 $
#
#-------------------------------------------------------------------------
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)
-/* $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.
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);
{
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;
}
}
#
# 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 $
#
#-------------------------------------------------------------------------
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
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;
-# $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) \
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);
-/* $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 */
%{
/* 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;
}
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;
thisquery->next = NULL;
thisquery->name = $3;
- add_variable(&argsinsert, thisquery, &no_indicator);
+ add_variable_to_head(&argsinsert, thisquery, &no_indicator);
$$ = make_str("?");
}
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
{
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;
}
;
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);
}
}
;
;
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); }
;
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);
}
;
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)
{
* 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));
/* 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));