mirror of
https://github.com/postgres/postgres.git
synced 2025-07-05 07:21:24 +03:00
Applied patch by Boszormenyi Zoltan <zb@cybertec.at> to add out-of-scope cursor support to native mode.
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.62 2009/10/01 18:03:54 meskes Exp $ */
|
||||
/* $PostgreSQL: pgsql/src/interfaces/ecpg/compatlib/informix.c,v 1.63 2010/01/26 09:07:31 meskes Exp $ */
|
||||
|
||||
#define POSTGRES_ECPG_INTERNAL
|
||||
#include "postgres_fe.h"
|
||||
@ -1004,57 +1004,16 @@ rtypwidth(int sqltype, int sqllen)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static struct var_list
|
||||
{
|
||||
int number;
|
||||
void *pointer;
|
||||
struct var_list *next;
|
||||
} *ivlist = NULL;
|
||||
|
||||
void
|
||||
ECPG_informix_set_var(int number, void *pointer, int lineno)
|
||||
{
|
||||
struct var_list *ptr;
|
||||
|
||||
for (ptr = ivlist; ptr != NULL; ptr = ptr->next)
|
||||
{
|
||||
if (ptr->number == number)
|
||||
{
|
||||
/* already known => just change pointer value */
|
||||
ptr->pointer = pointer;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
/* a new one has to be added */
|
||||
ptr = (struct var_list *) calloc(1L, sizeof(struct var_list));
|
||||
if (!ptr)
|
||||
{
|
||||
struct sqlca_t *sqlca = ECPGget_sqlca();
|
||||
|
||||
sqlca->sqlcode = ECPG_OUT_OF_MEMORY;
|
||||
strncpy(sqlca->sqlstate, "YE001", sizeof("YE001"));
|
||||
snprintf(sqlca->sqlerrm.sqlerrmc, sizeof(sqlca->sqlerrm.sqlerrmc), "out of memory on line %d", lineno);
|
||||
sqlca->sqlerrm.sqlerrml = strlen(sqlca->sqlerrm.sqlerrmc);
|
||||
/* free all memory we have allocated for the user */
|
||||
ECPGfree_auto_mem();
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr->number = number;
|
||||
ptr->pointer = pointer;
|
||||
ptr->next = ivlist;
|
||||
ivlist = ptr;
|
||||
}
|
||||
ECPGset_var(number, pointer, lineno);
|
||||
}
|
||||
|
||||
void *
|
||||
ECPG_informix_get_var(int number)
|
||||
{
|
||||
struct var_list *ptr;
|
||||
|
||||
for (ptr = ivlist; ptr != NULL && ptr->number != number; ptr = ptr->next);
|
||||
return (ptr) ? ptr->pointer : NULL;
|
||||
return ECPGget_var(number);
|
||||
}
|
||||
|
||||
void
|
||||
|
Reference in New Issue
Block a user