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]