11/* dynamic SQL support routines
22 *
3- * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/descriptor.c,v 1.20 2001/12/23 12:17:41 meskes Exp $
3+ * $Header: /cvsroot/pgsql/src/interfaces/ecpg/lib/Attic/descriptor.c,v 1.21 2002/01/11 14:43:11 meskes Exp $
44 */
55
66#include "postgres_fe.h"
1010#include "ecpglib.h"
1111#include "ecpgerrno.h"
1212#include "extern.h"
13+ #include "sqlca.h"
1314#include "sql3types.h"
1415
1516struct descriptor * all_descriptors = NULL ;
@@ -49,12 +50,15 @@ ECPGDynamicType_DDT(Oid type)
4950bool
5051ECPGget_desc_header (int lineno ,char * desc_name ,int * count )
5152{
52- PGresult * ECPGresult = ECPGresultByDescriptor ( lineno , desc_name ) ;
53+ PGresult * ECPGresult ;
5354
55+ ECPGinit_sqlca ();
56+ ECPGresult = ECPGresultByDescriptor (lineno ,desc_name );
5457if (!ECPGresult )
5558return false;
5659
5760* count = PQnfields (ECPGresult );
61+ sqlca .sqlerrd [2 ]= 1 ;
5862ECPGlog ("ECPGget_desc_header: found %d attributes.\n" ,* count );
5963return true;
6064}
@@ -140,13 +144,15 @@ bool
140144ECPGget_desc (int lineno ,char * desc_name ,int index ,...)
141145{
142146va_list args ;
143- PGresult * ECPGresult = ECPGresultByDescriptor ( lineno , desc_name ) ;
147+ PGresult * ECPGresult ;
144148enum ECPGdtype type ;
145149int ntuples ,
146150act_tuple ;
147151struct variable data_var ;
148152
149153va_start (args ,index );
154+ ECPGinit_sqlca ();
155+ ECPGresult = ECPGresultByDescriptor (lineno ,desc_name );
150156if (!ECPGresult )
151157return (false);
152158
@@ -359,7 +365,7 @@ ECPGget_desc(int lineno, char *desc_name, int index,...)
359365ECPGlog ("ECPGget_desc: INDICATOR[%d] = %d\n" ,act_tuple ,- PQgetisnull (ECPGresult ,act_tuple ,index ));
360366}
361367}
362-
368+ sqlca . sqlerrd [ 2 ] = ntuples ;
363369return (true);
364370}
365371
@@ -369,6 +375,7 @@ ECPGdeallocate_desc(int line, const char *name)
369375struct descriptor * i ;
370376struct descriptor * * lastptr = & all_descriptors ;
371377
378+ ECPGinit_sqlca ();
372379for (i = all_descriptors ;i ;lastptr = & i -> next ,i = i -> next )
373380{
374381if (!strcmp (name ,i -> name ))
@@ -387,11 +394,26 @@ ECPGdeallocate_desc(int line, const char *name)
387394bool
388395ECPGallocate_desc (int line ,const char * name )
389396{
390- struct descriptor * new = ( struct descriptor * ) ECPGalloc ( sizeof ( struct descriptor ), line ) ;
397+ struct descriptor * new ;
391398
399+ ECPGinit_sqlca ();
400+ new = (struct descriptor * )ECPGalloc (sizeof (struct descriptor ),line );
401+ if (!new )return false;
392402new -> next = all_descriptors ;
393403new -> name = ECPGalloc (strlen (name )+ 1 ,line );
404+ if (!new -> name )
405+ {
406+ ECPGfree (new );
407+ return false;
408+ }
394409new -> result = PQmakeEmptyPGresult (NULL ,0 );
410+ if (!new -> result )
411+ {
412+ ECPGfree (new -> name );
413+ ECPGfree (new );
414+ ECPGraise (line ,ECPG_OUT_OF_MEMORY ,NULL );
415+ return false;
416+ }
395417strcpy (new -> name ,name );
396418all_descriptors = new ;
397419return true;