pgpool2.git / summary / log / commit / refs

commit    b00d136252481908f032cb443f5aae826d74af38
Author:   Yoshiharu Mori <y-mori at sraoss.co.jp>
Date:     Fri Jul 04 13:00:44 2008 +0000

    FIX: query rewrite of DISTINCT ON


pool_rewrite_outfuncs.c | 64 +++++++++++++++++++------------------------------ 1 file changed, 24 insertions(+), 40 deletions(-) diff --git a/pool_rewrite_outfuncs.c b/pool_rewrite_outfuncs.c index 326610396..4ebaad6e6 100644 --- a/pool_rewrite_outfuncs.c +++ b/pool_rewrite_outfuncs.c @@ -1106,45 +1106,31 @@ static void append_join_using(AnalyzeSelect *analyze,char **col_list,char **type for(i = 0; i < join->col_num; i++) { char *colname = join->col_list[i]; - int match = 0; - int array = 0; for(j = 0; j < num; j++) { if(!strcmp(colname, using[j])) { - match++; - array = j; + same[sc] = i; + sc++; + } else { + lvalid[lc] = i; + lc++; } } - if(match == 0) - { - lvalid[lc] = i; - lc++; - } - else if (match == 1) - { - same[sc] = array; - sc++; - } - /* XXX */ } + for(i = 0; i < col_num; i++) { char *colname = col_list[i]; - int match = 0; for(j = 0; j < num; j++) { - if(!strcmp(colname, using[j])) + if(strcmp(colname, using[j])) { - match++; + rvalid[rc] = i; + rc++; } } - if(match == 0) - { - rvalid[rc] = i; - rc++; - } } total= sc + lc + rc; @@ -1157,24 +1143,14 @@ static void append_join_using(AnalyzeSelect *analyze,char **col_list,char **type { new->col_list[k] = join->col_list[same[k]]; new->type_list[k] = join->type_list[same[k]]; - if(table_name) - { - new->table_list[k] = table_name; - } - else - new->table_list[k] = join->table_list[same[k]]; + new->table_list[k] = join->table_list[same[k]]; } for(k = sc; k < sc + lc; k++) { new->col_list[k] = join->col_list[lvalid[k - sc]]; new->type_list[k] = join->type_list[lvalid[k - sc]]; - if(table_name) - { - new->table_list[k] = table_name; - } - else - new->table_list[k] = join->table_list[lvalid[k - sc]]; + new->table_list[k] = join->table_list[lvalid[k - sc]]; } for(k = sc + lc; k < sc + lc + rc; k++) { @@ -2876,8 +2852,8 @@ static void writeSelectHeader(RewriteQuery *message,ConInfoTodblink *dblink, Str if(first == 0) { - delay_string_append_char(message, str, analyze->virtual->table_list[i]); - delay_string_append_char(message, str, "."); + //delay_string_append_char(message, str, analyze->virtual->table_list[i]); + //delay_string_append_char(message, str, "ooo."); if(strcmp(col_name,"\"?column?\"")) delay_string_append_char(message, str, col_name); else @@ -3516,9 +3492,15 @@ _rewriteSelectStmt(Node *BaseSelect, RewriteQuery *message, ConInfoTodblink *dbl if (node->distinctClause) { + if(message->r_code == SELECT_ANALYZE) + analyze->partstate[SELECT_TARGETLIST] = 'S'; +#if 0 + /* TODO + * DISTINCT optimization + */ if(message->r_code == SELECT_ANALYZE) analyze->aggregate = true; - +#endif delay_string_append_char(message, str, "DISTINCT "); if (lfirst(list_head(node->distinctClause)) != NIL) { @@ -5030,8 +5012,10 @@ _rewriteColumnRef(Node *BaseSelect, RewriteQuery *message, ConInfoTodblink *dbli AppendAggregate(analyze,NULL,node); if(!DetectValidColumn(message,table_name,column_name,message->current_select,-1)) - pool_debug("_rewriteColumnRef: wrong column select_no=%d",message->current_select); - + { + message->is_loadbalance = true; + pool_debug("_rewriteColumnRef: wrong column select_no=%d",message->current_select); + } if(strcmp(column_name,"*")) ChangeStatebyColumnRef(message,node); } [parent: ebd5b622169c]