Changeset: 4a7598d5e858 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=4a7598d5e858
Modified Files:
        sql/server/rel_dump.c
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
        sql/server/rel_select.h
Branch: default
Log Message:

fix bug 3050, ie name all columns of an intermediate relation


diffs (143 lines):

diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c
--- a/sql/server/rel_dump.c
+++ b/sql/server/rel_dump.c
@@ -1054,7 +1054,7 @@ rel_read(mvc *sql, char *r, int *pos)
                skipWS(r, pos);
                exps = read_exps(sql, nrel, NULL, r, pos, '[', 1);
 
-               rel = rel_groupby(sql->sa, nrel, gexps);
+               rel = rel_groupby(sql, nrel, gexps);
                rel->exps = exps;
                return rel;
        case 's':
diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -1510,7 +1510,7 @@ rel_push_count_down(int *changes, mvc *s
 
                        exp_label(sql->sa, e, ++sql->label);
                        cnt = exp_column(sql->sa, NULL, exp_name(e), 
exp_subtype(e), e->card, has_nil(e), is_intern(e));
-                       gbl = rel_groupby(sql->sa, rel_dup(srel), NULL);
+                       gbl = rel_groupby(sql, rel_dup(srel), NULL);
                        rel_groupby_add_aggr(sql, gbl, e);
                        append(args, cnt);
                }
@@ -1522,7 +1522,7 @@ rel_push_count_down(int *changes, mvc *s
 
                        exp_label(sql->sa, e, ++sql->label);
                        cnt = exp_column(sql->sa, NULL, exp_name(e), 
exp_subtype(e), e->card, has_nil(e), is_intern(e));
-                       gbr = rel_groupby(sql->sa, rel_dup(srel), NULL);
+                       gbr = rel_groupby(sql, rel_dup(srel), NULL);
                        rel_groupby_add_aggr(sql, gbr, e);
                        append(args, cnt);
                }
@@ -2552,13 +2552,13 @@ rel_push_aggr_down(int *changes, mvc *sq
                        lgbe = exps_copy(sql->sa, gbe);
                        rgbe = exps_copy(sql->sa, gbe);
                }
-               ul = rel_groupby(sql->sa, ul, NULL);
+               ul = rel_groupby(sql, ul, NULL);
                ul->r = lgbe;
                ul->nrcols = g->nrcols;
                ul->card = g->card;
                ul->exps = exps_copy(sql->sa, g->exps);
 
-               ur = rel_groupby(sql->sa, ur, NULL);
+               ur = rel_groupby(sql, ur, NULL);
                ur->r = rgbe;
                ur->nrcols = g->nrcols;
                ur->card = g->card;
diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c
--- a/sql/server/rel_select.c
+++ b/sql/server/rel_select.c
@@ -31,7 +31,7 @@
 #include "rel_schema.h"
 #include "rel_sequence.h"
 
-#define rel_groupby_gbe(sa,r,e) rel_groupby(sa, r, append(new_exp_list(sa), e))
+#define rel_groupby_gbe(m,r,e) rel_groupby(m, r, append(new_exp_list(m->sa), 
e))
 #define ERR_AMBIGUOUS          050000
 
 sql_rel *
@@ -872,10 +872,10 @@ rel_project2groupby(mvc *sql, sql_rel *g
 }
 
 sql_rel *
-rel_groupby(sql_allocator *sa, sql_rel *l, list *groupbyexps )
+rel_groupby(mvc *sql, sql_rel *l, list *groupbyexps )
 {
-       sql_rel *rel = rel_create(sa);
-       list *aggrs = new_exp_list(sa);
+       sql_rel *rel = rel_create(sql->sa);
+       list *aggrs = new_exp_list(sql->sa);
        node *en;
 
        rel->card = CARD_ATOM;
@@ -886,7 +886,9 @@ rel_groupby(sql_allocator *sa, sql_rel *
 
                        /* after the group by the cardinality reduces */
                        e->card = rel->card;
-                       ne = exp_column(sa, exp_relname(e), exp_name(e), 
exp_subtype(e), exp_card(e), has_nil(e), 0);
+                       if (!exp_name(e))
+                               exp_label(sql->sa, e, ++sql->label);
+                       ne = exp_column(sql->sa, exp_relname(e), exp_name(e), 
exp_subtype(e), exp_card(e), has_nil(e), 0);
                        append(aggrs, ne);
                }
        }
@@ -4366,7 +4368,7 @@ rel_value_exp2(mvc *sql, sql_rel **rel, 
                                e = exp_aggr1(sql->sa, e, zero_or_one, 0, 0, 
CARD_ATOM, 0);
                                if (!*rel) {
                                        int processed = is_processed(r);
-                                       r = rel_groupby(sql->sa, r, NULL);
+                                       r = rel_groupby(sql, r, NULL);
                                        e = rel_groupby_add_aggr(sql, r, e);
                                        if (processed)
                                                set_processed(r);
@@ -4748,7 +4750,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
                                return NULL;
                        if (outer && pre_prj)
                                list_merge(gbe, pre_prj, (fdup)NULL);
-                       rel = rel_groupby(sql->sa, rel, gbe);
+                       rel = rel_groupby(sql, rel, gbe);
                        aggr = 1;
                }
 
@@ -4785,7 +4787,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
                                                        e->card = CARD_AGGR;
                                                }
                                        }
-                                       rel = rel_groupby_gbe(sql->sa, rel, e);
+                                       rel = rel_groupby_gbe(sql, rel, e);
                                }
                        } else {
                                node *m;
@@ -4803,7 +4805,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
                                }
        
                                /* now create a groupby on the inner */
-                               inner = rel_groupby(sql->sa, rel_dup(rel->r), 
gbexps);
+                               inner = rel_groupby(sql, rel_dup(rel->r), 
gbexps);
                                inner = rel_label(sql, inner);
                                for (n = ce->h, m = gbexps->h; n && m; n = 
n->next, m = m->next) {
                                        sql_exp *e = n->data;
@@ -4825,7 +4827,7 @@ rel_select_exp(mvc *sql, sql_rel *rel, s
        if (sn->having) {
                /* having implies group by, ie if not supplied do a group by */
                if (rel->op != op_groupby)
-                       rel = rel_groupby(sql->sa,  rel, NULL);
+                       rel = rel_groupby(sql,  rel, NULL);
                aggr = 1;
        }
 
diff --git a/sql/server/rel_select.h b/sql/server/rel_select.h
--- a/sql/server/rel_select.h
+++ b/sql/server/rel_select.h
@@ -78,7 +78,7 @@ extern void rel_destroy(sql_rel *rel);
 /* TODO shouldn't be needed (isn't save) ! */
 extern char * rel_name( sql_rel *r );
 
-extern sql_rel *rel_groupby(sql_allocator *sa, sql_rel *l, list *groupbyexps );
+extern sql_rel *rel_groupby(mvc *sql, sql_rel *l, list *groupbyexps );
 extern sql_exp *rel_groupby_add_aggr(mvc *sql, sql_rel *rel, sql_exp *e);
 extern sql_rel *rel_inplace_groupby(sql_rel *rel, sql_rel *l, list 
*groupbyexps, list *exps );
 extern sql_rel *rel_with_query(mvc *sql, symbol *q);
_______________________________________________
Checkin-list mailing list
[email protected]
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to