Changeset: 90dbcd5cc742 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/90dbcd5cc742
Modified Files:
rpm.mk.in
sql/server/rel_optimizer.c
Branch: Jun2020-mmt
Log Message:
Merged with Jun2020
diffs (89 lines):
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
@@ -4332,10 +4332,6 @@ rel_push_aggr_down(visitor *v, sql_rel *
}
}
- u = rel_setop(v->sql->sa, ul, ur, op_union);
- rel_setop_set_exps(v->sql, u, rel_projections(v->sql, ul, NULL,
1, 1));
- set_processed(u);
-
if (rel->r) {
list *ogbe = rel->r;
@@ -4343,15 +4339,27 @@ rel_push_aggr_down(visitor *v, sql_rel *
for (n = ogbe->h; n; n = n->next) {
sql_exp *e = n->data, *ne;
+ /* group by in aggreation list */
ne = exps_uses_exp( rel->exps, e);
- if (!ne)
- continue;
- ne = list_find_exp( u->exps, ne);
+ if (ne)
+ ne = list_find_exp( ul->exps, ne);
+ if (!ne) {
+ /* e only in the ul/ur->r (group by
list) */
+ ne = exp_ref(v->sql, e);
+ list_append(ul->exps, ne);
+ ne = exp_ref(v->sql, e);
+ list_append(ur->exps, ne);
+ }
assert(ne);
ne = exp_ref(v->sql, ne);
append(gbe, ne);
}
}
+
+ u = rel_setop(v->sql->sa, ul, ur, op_union);
+ rel_setop_set_exps(v->sql, u, rel_projections(v->sql, ul, NULL,
1, 1));
+ set_processed(u);
+
exps = new_exp_list(v->sql->sa);
for (n = u->exps->h, m = rel->exps->h; n && m; n = n->next, m =
m->next) {
sql_exp *ne, *e = n->data, *oa = m->data;
diff --git a/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.sql
b/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.sql
--- a/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.sql
+++ b/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.sql
@@ -54,4 +54,14 @@ select count(*) FROM (
FROM "myschema"."mymerge" myalias
GROUP BY field1, field2) AS mycount;
+-- These statements are related to the same issue
+create merge table merge_table (mcol1 int, mcol2 int, mcol3 int);
+create table child1 (mcol1 int, mcol2 int, mcol3 int);
+insert into child1 values (1,1,1);
+create table child2 (mcol1 int, mcol2 int, mcol3 int);
+insert into child2 values (2,2,2);
+alter table merge_table add table child1;
+alter table merge_table add table child2;
+select cast(sum(mcol1) as bigint), cast(sum(mcol2) as bigint) from merge_table
group by mcol1, mcol2, mcol3 order by mcol1 limit 2;
+
rollback;
diff --git
a/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.stable.out
b/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.stable.out
--- a/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.stable.out
+++ b/sql/test/mergetables/Tests/mergetable_rel_push_aggr_down.stable.out
@@ -80,6 +80,22 @@ stdout of test 'mergetable_rel_push_aggr
% bigint # type
% 1 # length
[ 0 ]
+#create merge table merge_table (mcol1 int, mcol2 int, mcol3 int);
+#create table child1 (mcol1 int, mcol2 int, mcol3 int);
+#insert into child1 values (1,1,1);
+[ 1 ]
+#create table child2 (mcol1 int, mcol2 int, mcol3 int);
+#insert into child2 values (2,2,2);
+[ 1 ]
+#alter table merge_table add table child1;
+#alter table merge_table add table child2;
+#select cast(sum(mcol1) as bigint), cast(sum(mcol2) as bigint) from
merge_table group by mcol1, mcol2, mcol3 order by mcol1 limit 2;
+% .%2, .%4 # table_name
+% %2, %4 # name
+% bigint, bigint # type
+% 1, 1 # length
+[ 1, 1 ]
+[ 2, 2 ]
#rollback;
# 12:55:05 >
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list