Changeset: 89f51cbe3402 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=89f51cbe3402 Modified Files: sql/server/rel_optimizer.c sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 Branch: Jun2020 Log Message:
Performance fix for tpcds q95, ignore exps_bind_column2 check for non column expressions, because it will never find them. With this, common aggregates on an expression list are eliminated diffs (74 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 @@ -3800,7 +3800,7 @@ rel_project_cse(mvc *sql, sql_rel *rel, for (m=nexps->h; m; m = m->next){ sql_exp *e2 = m->data; - if (exp_name(e2) && exp_match_exp(e1, e2) && exps_bind_column2(nexps, exp_relname(e1), exp_name(e1)) == e1) { + if (exp_name(e2) && exp_match_exp(e1, e2) && (e1->type != e_column || exps_bind_column2(nexps, exp_relname(e1), exp_name(e1)) == e1)) { sql_exp *ne = exp_alias(sql->sa, exp_relname(e1), exp_name(e1), exp_relname(e2), exp_name(e2), exp_subtype(e2), e2->card, has_nil(e2), is_intern(e1)); ne = exp_propagate(sql->sa, ne, e1); diff --git a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out --- a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out +++ b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out @@ -29,11 +29,11 @@ stdout of test 'crash_on_alias.Bug-2798` % .plan # table_name % rel # name % clob # type -% 114 # length +% 103 # length project ( | group by ( | | table(sys.dbg) [ "dbg"."a", "dbg"."b" ] COUNT -| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", sys.sum no nil ("dbg"."b") as "%2"."%2" ] +| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", "%1"."%1" as "%2"."%2" ] ) [ "d", "%1"."%1", sys.sql_mul(sys.sql_div("%2"."%2", tinyint "2" as "%3"."%3"), tinyint "2") as "f" ] #set optimizer = 'sequential_pipe'; #set optimizer = 'default_pipe'; @@ -53,11 +53,11 @@ project ( % .plan # table_name % rel # name % clob # type -% 114 # length +% 110 # length project ( | group by ( | | table(sys.dbg) [ "dbg"."a", "dbg"."b" ] COUNT -| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", sys.sum no nil ("dbg"."b") as "%2"."%2" ] +| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", "%1"."%1" as "%2"."%2" ] ) [ "d", "%1"."%1" as "e", sys.sql_mul(sys.sql_div("%2"."%2", tinyint "2" as "%3"."%3"), tinyint "2") as "f" ] #set optimizer = 'sequential_pipe'; #set optimizer = 'default_pipe'; diff --git a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 --- a/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 +++ b/sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128 @@ -29,11 +29,11 @@ stdout of test 'crash_on_alias.Bug-2798` % .plan # table_name % rel # name % clob # type -% 114 # length +% 103 # length project ( | group by ( | | table(sys.dbg) [ "dbg"."a", "dbg"."b" ] COUNT -| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", sys.sum no nil ("dbg"."b") as "%2"."%2" ] +| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", "%1"."%1" as "%2"."%2" ] ) [ "d", "%1"."%1", sys.sql_mul(sys.sql_div("%2"."%2", tinyint "2" as "%3"."%3"), tinyint "2") as "f" ] #set optimizer = 'sequential_pipe'; #set optimizer = 'default_pipe'; @@ -53,11 +53,11 @@ project ( % .plan # table_name % rel # name % clob # type -% 114 # length +% 110 # length project ( | group by ( | | table(sys.dbg) [ "dbg"."a", "dbg"."b" ] COUNT -| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", sys.sum no nil ("dbg"."b") as "%2"."%2" ] +| ) [ "dbg"."a" as "d" ] [ "d", sys.sum no nil ("dbg"."b") as "%1"."%1", "%1"."%1" as "%2"."%2" ] ) [ "d", "%1"."%1" as "e", sys.sql_mul(sys.sql_div("%2"."%2", tinyint "2" as "%3"."%3"), tinyint "2") as "f" ] #set optimizer = 'sequential_pipe'; #set optimizer = 'default_pipe'; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list