aboutsummaryrefslogtreecommitdiff
path: root/src/interfaces/ecpg/ecpglib/execute.c
diff options
context:
space:
mode:
authorMichael Meskes <meskes@postgresql.org>2007-10-02 09:50:00 +0000
committerMichael Meskes <meskes@postgresql.org>2007-10-02 09:50:00 +0000
commit0c2eb200d6e5fb59443ab31c6e9c38db9e2c7a7f (patch)
treecfd1f712dc166836f8cccf641c873b6b92548daf /src/interfaces/ecpg/ecpglib/execute.c
parentf1d37a9997ef8b00d53267ddfd0f5d7975017085 (diff)
downloadpostgresql-0c2eb200d6e5fb59443ab31c6e9c38db9e2c7a7f.tar.gz
postgresql-0c2eb200d6e5fb59443ab31c6e9c38db9e2c7a7f.zip
ITAGAKI Takahiro <itagaki.takahiro@oss.ntt.co.jp> added thread-safe
descriptor handling
Diffstat (limited to 'src/interfaces/ecpg/ecpglib/execute.c')
-rw-r--r--src/interfaces/ecpg/ecpglib/execute.c25
1 files changed, 8 insertions, 17 deletions
diff --git a/src/interfaces/ecpg/ecpglib/execute.c b/src/interfaces/ecpg/ecpglib/execute.c
index c5ae1dadf32..946f6811ff7 100644
--- a/src/interfaces/ecpg/ecpglib/execute.c
+++ b/src/interfaces/ecpg/ecpglib/execute.c
@@ -1,4 +1,4 @@
-/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.70 2007/09/26 10:57:00 meskes Exp $ */
+/* $PostgreSQL: pgsql/src/interfaces/ecpg/ecpglib/execute.c,v 1.71 2007/10/02 09:49:59 meskes Exp $ */
/*
* The aim is to get a simpler inteface to the database routines.
@@ -1088,17 +1088,9 @@ ECPGexecute(struct statement * stmt)
struct descriptor *desc;
struct descriptor_item *desc_item;
- for (desc = all_descriptors; desc; desc = desc->next)
- {
- if (strcmp(var->pointer, desc->name) == 0)
- break;
- }
-
+ desc = ECPGfind_desc(stmt->lineno, var->pointer);
if (desc == NULL)
- {
- ECPGraise(stmt->lineno, ECPG_UNKNOWN_DESCRIPTOR, ECPG_SQLSTATE_INVALID_SQL_DESCRIPTOR_NAME, var->pointer);
return false;
- }
desc_counter++;
for (desc_item = desc->items; desc_item; desc_item = desc_item->next)
@@ -1334,16 +1326,15 @@ ECPGexecute(struct statement * stmt)
if (var != NULL && var->type == ECPGt_descriptor)
{
- PGresult **resultpp = ECPGdescriptor_lvalue(stmt->lineno, (const char *) var->pointer);
-
- if (resultpp == NULL)
+ struct descriptor *desc = ECPGfind_desc(stmt->lineno, var->pointer);
+ if (desc == NULL)
status = false;
else
{
- if (*resultpp)
- PQclear(*resultpp);
- *resultpp = results;
- clear_result = FALSE;
+ if (desc->result)
+ PQclear(desc->result);
+ desc->result = results;
+ clear_result = false;
ECPGlog("ECPGexecute putting result (%d tuples) into descriptor '%s'\n", PQntuples(results), (const char *) var->pointer);
}
var = var->next;