pgpool2.git / summary / log / commit / refs
commit 9c7e195db0d3e92a2a42e008b092de111cb30ec7
Author: Yoshiyuki Asaba <y-asaba at pgfoundry.org>
Date: Thu Sep 27 02:46:21 2007 +0000
Call read_kind_from_backend() function instead of pool_read_kind() in
Execute(), Parse() and SimpleForwardToFrontend().
pool_process_query.c | 71 ++++++++++++++++++++++++++--------------------------
1 file changed, 35 insertions(+), 36 deletions(-)
diff --git a/pool_process_query.c b/pool_process_query.c
index fed246760..5d0c3d82a 100644
--- a/pool_process_query.c
+++ b/pool_process_query.c
@@ -1233,6 +1233,7 @@ static POOL_STATUS Execute(POOL_CONNECTION *frontend,
char *string1;
PrepareStmt *p_stmt;
int deadlock_detected = 0;
+ POOL_STATUS ret;
/* read Execute packet */
if (pool_read(frontend, &len, sizeof(len)) < 0)
@@ -1384,20 +1385,22 @@ static POOL_STATUS Execute(POOL_CONNECTION *frontend,
}
}
- while ((kind = pool_read_kind(backend)),
- (kind != 'C' && kind != 'E' && kind != 'I' && kind != 's'))
+ while ((ret = read_kind_from_backend(frontend, backend, &kind)) == POOL_CONTINUE)
{
- if (kind < 0)
- {
- pool_error("Execute: pool_read_kind error");
- return POOL_ERROR;
- }
-
+ /*
+ * forward message until receiving CommandComplete,
+ * ErrorResponse, EmptyQueryResponse or PortalSuspend.
+ */
+ if (kind == 'C' || kind == 'E' || kind != 'I' || kind != 's')
+ break;
status = SimpleForwardToFrontend(kind, frontend, backend);
if (status != POOL_CONTINUE)
return status;
pool_flush(frontend);
}
+ if (ret != POOOL_CONTINUE)
+ return ret;
+
status = SimpleForwardToFrontend(kind, frontend, backend);
if (status != POOL_CONTINUE)
return status;
@@ -1602,12 +1605,12 @@ static POOL_STATUS Parse(POOL_CONNECTION *frontend,
for (;;)
{
- kind = pool_read_kind(backend);
- if (kind < 0)
- {
- pool_error("Parse: pool_read_kind error");
- return POOL_ERROR;
- }
+ POOL_STATUS ret;
+ ret = read_kind_from_backend(frontend, backend, &kind);
+
+ if (ret != POOL_CONTINUE)
+ return ret;
+
SimpleForwardToFrontend(kind, frontend, backend);
if (pool_flush(frontend) < 0)
return POOL_ERROR;
@@ -3455,6 +3458,8 @@ POOL_STATUS SimpleForwardToFrontend(char kind, POOL_CONNECTION *frontend, POOL_C
int i;
int command_ok_row_count = 0;
int delete_or_update = 0;
+ char kind1;
+ POOL_STATUS ret;
/*
* Check if packet kind == 'C'(Command complete), '1'(Parse
@@ -3615,7 +3620,7 @@ POOL_STATUS SimpleForwardToFrontend(char kind, POOL_CONNECTION *frontend, POOL_C
}
else if (kind == 'E') /* error response? */
{
- int i, k;
+ int i;
int res1;
char *p1;
@@ -3683,21 +3688,20 @@ POOL_STATUS SimpleForwardToFrontend(char kind, POOL_CONNECTION *frontend, POOL_C
}
}
- while ((k = pool_read_kind(backend)) != 'Z')
+ while ((ret = read_kind_from_backend(frontend, backend, &kind1)) == POOL_CONTINUE)
{
- POOL_STATUS ret;
- if (k < 0)
- {
- pool_error("SimpleForwardToBackend: pool_read_kind error");
- return POOL_ERROR;
- }
+ if (kind1 == 'Z') /* ReadyForQuery? */
+ break;
- ret = SimpleForwardToFrontend(k, frontend, backend);
+ ret = SimpleForwardToFrontend(kind1, frontend, backend);
if (ret != POOL_CONTINUE)
return ret;
pool_flush(frontend);
}
+ if (ret != POOL_CONTINUE)
+ return ret;
+
for (i = 0; i < NUM_BACKENDS; i++)
{
if (VALID_BACKEND(i))
@@ -3725,6 +3729,7 @@ POOL_STATUS SimpleForwardToBackend(char kind, POOL_CONNECTION *frontend, POOL_CO
char *p;
int i;
char *name;
+ POOL_STATUS ret;
for (i=0;i<NUM_BACKENDS;i++)
{
@@ -3815,7 +3820,7 @@ POOL_STATUS SimpleForwardToBackend(char kind, POOL_CONNECTION *frontend, POOL_CO
if (kind == 'B' || kind == 'D' || kind == 'C')
{
int i;
- int kind1;
+ char kind1;
for (i = 0;i < NUM_BACKENDS; i++)
{
@@ -3843,24 +3848,18 @@ POOL_STATUS SimpleForwardToBackend(char kind, POOL_CONNECTION *frontend, POOL_CO
*/
if (kind == 'D' && *p == 'S')
{
- kind1 = pool_read_kind(backend);
- if (kind1 < 0)
- {
- pool_error("SimpleForwardToBackend: pool_read_kind error");
- return POOL_ERROR;
- }
+ ret = read_kind_from_backend(frontend, backend, &kind1);
+ if (ret != POOL_CONTINUE)
+ return ret;
SimpleForwardToFrontend(kind1, frontend, backend);
pool_flush(frontend);
}
for (;;)
{
- kind1 = pool_read_kind(backend);
- if (kind1 < 0)
- {
- pool_error("SimpleForwardToBackend: pool_read_kind error");
- return POOL_ERROR;
- }
+ ret = read_kind_from_backend(frontend, backend, &kind1);
+ if (ret != POOL_CONTINUE)
+ return ret;
SimpleForwardToFrontend(kind1, frontend, backend);
if (pool_flush(frontend) < 0)
return POOL_ERROR;
[parent: 571b42dab111]