pgpool2.git / summary / log / commit / refs
commit e631ab577867671b25c9028f5183e2d7b455bf51
Author: Tatsuo Ishii <ishii at sraoss.co.jp>
Date: Sat Sep 26 00:05:44 2009 +0000
Fix parallel query
1. Fix JOIN Expr
Subquery was used on larg or rarg.
Subquery was used on ON-Cluase.
Full OUTER JOIN was not optimized.
2. Fail_on_error=false was passed to the 3rd arguments of dblink.
This patch was applied to only 2.2-STABLE tree by y-mori on 2009/09/08.
pool_process_query.c | 24 ++++++++++++++++++++----
1 file changed, 20 insertions(+), 4 deletions(-)
diff --git a/pool_process_query.c b/pool_process_query.c
index 4c42fb61d..3cac7da84 100644
--- a/pool_process_query.c
+++ b/pool_process_query.c
@@ -2883,6 +2883,7 @@ POOL_STATUS OneNode_do_command(POOL_CONNECTION *frontend, POOL_CONNECTION *backe
int len,sendlen;
int status;
char kind;
+ bool notice = false;
pool_debug("OneNode_do_command: Query: %s", query);
@@ -2906,8 +2907,16 @@ POOL_STATUS OneNode_do_command(POOL_CONNECTION *frontend, POOL_CONNECTION *backe
pool_error("OneNode_do_command: error while reading message kind");
return POOL_END;
}
-
- status = ParallelForwardToFrontend(kind, frontend, backend, database, true);
+
+ if (kind == 'N' && strstr(query,"dblink")) {
+ notice = true;
+ status = ParallelForwardToFrontend(kind, frontend, backend, database, false);
+ } else {
+ if(notice)
+ status = ParallelForwardToFrontend(kind, frontend, backend, database, false);
+ else
+ status = ParallelForwardToFrontend(kind, frontend, backend, database, true);
+ }
if (kind == 'C' || kind =='E')
{
break;
@@ -2918,6 +2927,12 @@ POOL_STATUS OneNode_do_command(POOL_CONNECTION *frontend, POOL_CONNECTION *backe
*
*/
status = pool_read(backend, &kind, sizeof(kind));
+
+ if(notice)
+ pool_send_error_message(frontend, 3, "XX000",
+ "pgpool2 sql restriction(notice from dblink)",query,"",
+ __FILE__,__LINE__);
+
if (status < 0)
{
pool_error("OneNode_do_command: error while reading message kind");
@@ -2930,8 +2945,9 @@ POOL_STATUS OneNode_do_command(POOL_CONNECTION *frontend, POOL_CONNECTION *backe
return POOL_END;
}
- status = ParallelForwardToFrontend(kind, frontend, backend, database, true);
- pool_flush(frontend);
+
+ status = ParallelForwardToFrontend(kind, frontend, backend, database, true);
+ pool_flush(frontend);
return status;
}
[parent: a9deec0b60a0]