pgpool2.git / summary / log / commit / refs
commit 99d42a00c217ed10fdbde9126ca2f9a24704bf0b
Author: Yoshiyuki Asaba <y-asaba at pgfoundry.org>
Date: Wed Oct 04 05:57:02 2006 +0000
Fix rewriting a query which refers pg_catalog.
Patch contributed by Yoshiharu Mori.
pool_rewrite_query.c | 69 +++++++++++++++++++++++++++-------------------------
1 file changed, 36 insertions(+), 33 deletions(-)
diff --git a/pool_rewrite_query.c b/pool_rewrite_query.c
index 65bf7e5cf..a9a9e76a2 100644
--- a/pool_rewrite_query.c
+++ b/pool_rewrite_query.c
@@ -299,51 +299,54 @@ RewriteQuery *rewrite_query_stmt(Node *node,POOL_CONNECTION *frontend,POOL_CONNE
switch(node->type)
{
case T_SelectStmt:
+ {
+ SelectStmt *stmt = (SelectStmt *)node;
+ if(stmt->into)
{
- SelectStmt *stmt = (SelectStmt *)node;
- if(stmt->into)
- {
- pool_send_error_message(frontend, MAJOR(backend), "XX000",
+ pool_send_error_message(frontend, MAJOR(backend), "XX000",
"pgpool2 sql restriction",
"cannot use select into ...", "", __FILE__,
__LINE__);
- pool_send_readyforquery(frontend);
- message.status=POOL_CONTINUE;
- break;
- }
-
- examSelectStmt(node,backend,&message);
+ pool_send_readyforquery(frontend);
+ message.status=POOL_CONTINUE;
+ break;
+ }
- if(message.r_code != SELECT_PGCATALOG &&
- message.r_code != SELECT_RELATION_ERROR)
- {
- POOL_CONNECTION_POOL_SLOT *system_db = pool_system_db_connection();
- message.status = OneNode_do_command(frontend,
+ examSelectStmt(node,backend,&message);
+
+ if (message.r_code != SELECT_PGCATALOG &&
+ message.r_code != SELECT_RELATION_ERROR)
+ {
+ POOL_CONNECTION_POOL_SLOT *system_db = pool_system_db_connection();
+ message.status = OneNode_do_command(frontend,
system_db->con,
message.rewrite_query,
backend->info->database);
- } else {
- if(TSTATE(backend) == 'T' && SELECT_RELATION_ERROR)
- {
- pool_debug("pool_rewrite_stmt(select): inside transaction");
- message.rewrite_query = nodeToString(node);
- message.status = pool_parallel_exec(frontend,backend,message.rewrite_query,node,true);
- }
- else {
-
- pool_debug("pool_rewrite_stmt: executed by Master");
- message.rewrite_query = nodeToString(node);
- message.status = OneNode_do_command(frontend,
- MASTER(backend),
- message.rewrite_query,
- backend->info->database);
- }
+ }
+ else
+ {
+ if(TSTATE(backend) == 'T' &&
+ message.r_code == SELECT_RELATION_ERROR)
+ {
+ pool_debug("pool_rewrite_stmt(select): inside transaction");
+ message.rewrite_query = nodeToString(node);
+ message.status = pool_parallel_exec(frontend,backend,message.rewrite_query,node,true);
+ }
+ else
+ {
+ pool_debug("pool_rewrite_stmt: executed by Master");
+ message.rewrite_query = nodeToString(node);
+ message.status = OneNode_do_command(frontend,
+ MASTER(backend),
+ message.rewrite_query,
+ backend->info->database);
}
- pool_debug("pool_rewrite_stmt: XXX message_code %d",message.r_code);
}
- break;
+ pool_debug("pool_rewrite_stmt: XXX message_code %d",message.r_code);
+ }
+ break;
case T_InsertStmt:
examInsertStmt(node,backend,&message);
[parent: 96597895cffd]