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