From 051a4f233f707a56130f44b4b3940eecc91c9c91 Mon Sep 17 00:00:00 2001 From: Michael Meskes Date: Fri, 11 Jan 2002 14:43:11 +0000 Subject: [PATCH] Added Christof's fixes. --- src/interfaces/ecpg/ChangeLog | 5 +++++ src/interfaces/ecpg/lib/descriptor.c | 32 +++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/interfaces/ecpg/ChangeLog b/src/interfaces/ecpg/ChangeLog index 37a2b826c0..70ad65acf7 100644 --- a/src/interfaces/ecpg/ChangeLog +++ b/src/interfaces/ecpg/ChangeLog @@ -1196,5 +1196,10 @@ Tue Jan 8 15:16:37 CET 2002 Thu Jan 10 11:12:14 CET 2002 - Include sqlca.h automatically. + +Fri Jan 11 15:43:39 CET 2002 + + - clear sqlca on : [de]allocate descriptor & get descriptor and set + sqlca.sqlerrd[2] accordingly (Christof). - Set ecpg version to 2.9.0. - Set library version to 3.3.0. diff --git a/src/interfaces/ecpg/lib/descriptor.c b/src/interfaces/ecpg/lib/descriptor.c index 66fb6b1d86..749272394c 100644 --- a/src/interfaces/ecpg/lib/descriptor.c +++ b/src/interfaces/ecpg/lib/descriptor.c @@ -1,6 +1,6 @@ /* dynamic SQL support routines * - * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/descriptor.c,v 1.20 2001/12/23 12:17:41 meskes Exp $ + * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/descriptor.c,v 1.21 2002/01/11 14:43:11 meskes Exp $ */ #include "postgres_fe.h" @@ -10,6 +10,7 @@ #include "ecpglib.h" #include "ecpgerrno.h" #include "extern.h" +#include "sqlca.h" #include "sql3types.h" struct descriptor *all_descriptors = NULL; @@ -49,12 +50,15 @@ ECPGDynamicType_DDT(Oid type) bool ECPGget_desc_header(int lineno, char *desc_name, int *count) { - PGresult *ECPGresult = ECPGresultByDescriptor(lineno, desc_name); + PGresult *ECPGresult; + ECPGinit_sqlca(); + ECPGresult = ECPGresultByDescriptor(lineno, desc_name); if (!ECPGresult) return false; *count = PQnfields(ECPGresult); + sqlca.sqlerrd[2]=1; ECPGlog("ECPGget_desc_header: found %d attributes.\n", *count); return true; } @@ -140,13 +144,15 @@ bool ECPGget_desc(int lineno, char *desc_name, int index,...) { va_list args; - PGresult *ECPGresult = ECPGresultByDescriptor(lineno, desc_name); + PGresult *ECPGresult; enum ECPGdtype type; int ntuples, act_tuple; struct variable data_var; va_start(args, index); + ECPGinit_sqlca(); + ECPGresult = ECPGresultByDescriptor(lineno, desc_name); if (!ECPGresult) return (false); @@ -359,7 +365,7 @@ ECPGget_desc(int lineno, char *desc_name, int index,...) ECPGlog("ECPGget_desc: INDICATOR[%d] = %d\n", act_tuple, -PQgetisnull(ECPGresult, act_tuple, index)); } } - + sqlca.sqlerrd[2]=ntuples; return (true); } @@ -369,6 +375,7 @@ ECPGdeallocate_desc(int line, const char *name) struct descriptor *i; struct descriptor **lastptr = &all_descriptors; + ECPGinit_sqlca(); for (i = all_descriptors; i; lastptr = &i->next, i = i->next) { if (!strcmp(name, i->name)) @@ -387,11 +394,26 @@ ECPGdeallocate_desc(int line, const char *name) bool ECPGallocate_desc(int line, const char *name) { - struct descriptor *new = (struct descriptor *) ECPGalloc(sizeof(struct descriptor), line); + struct descriptor *new; + ECPGinit_sqlca(); + new = (struct descriptor *) ECPGalloc(sizeof(struct descriptor), line); + if (!new) return false; new->next = all_descriptors; new->name = ECPGalloc(strlen(name) + 1, line); + if (!new->name) + { + ECPGfree(new); + return false; + } new->result = PQmakeEmptyPGresult(NULL, 0); + if (!new->result) + { + ECPGfree(new->name); + ECPGfree(new); + ECPGraise(line, ECPG_OUT_OF_MEMORY, NULL); + return false; + } strcpy(new->name, name); all_descriptors = new; return true; -- 2.40.0