Changeset: 54cf697b5e7d for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=54cf697b5e7d Modified Files: sql/include/sql_relation.h sql/server/rel_optimizer.c sql/server/rel_unnest.c Branch: default Log Message:
Moved rewrite_empty_project after rewrite_groupings at rel_unnest, so empty group relations get to project at least an expression always. The GROUPING_TOTALS flag is now obsolete diffs (76 lines): diff --git a/sql/include/sql_relation.h b/sql/include/sql_relation.h --- a/sql/include/sql_relation.h +++ b/sql/include/sql_relation.h @@ -50,7 +50,7 @@ typedef struct expression { } sql_exp; #define EXP_DISTINCT 1 -#define NO_NIL 2 +#define NO_NIL 2 #define TOPN_INCLUDING 4 #define ZERO_IF_EMPTY 8 @@ -62,13 +62,11 @@ typedef struct expression { #define get_cmp(e) (e->flag&CMPMASK) #define HAS_NO_NIL 32 #define NULLS_LAST 64 -#define GROUPING_TOTALS 128 -#define UPD_COMP 1 -#define UPD_LOCKED 2 +#define UPD_COMP 1 +#define UPD_LOCKED 2 #define UPD_NO_CONSTRAINT 4 - -#define REL_PARTITION 8 +#define REL_PARTITION 8 /* We need bit wise exclusive numbers as we merge the level also in the flag */ #define PSM_SET 1 @@ -284,11 +282,6 @@ typedef enum operator_type { #define set_nodistinct(e) \ e->flag &= (~EXP_DISTINCT) -#define set_grouping_totals(e) \ - e->flag |= GROUPING_TOTALS -#define is_grouping_totals(e) \ - ((e->flag&GROUPING_TOTALS)==GROUPING_TOTALS) - #define is_processed(rel) \ ((rel)->processed) #define set_processed(rel) \ 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 @@ -1456,7 +1456,7 @@ project_unsafe(sql_rel *rel, int allow_i sql_rel *sub = rel->l; node *n; - if (need_distinct(rel) || rel->r /* order by */ || is_grouping_totals(rel)) + if (need_distinct(rel) || rel->r /* order by */) return 1; if (!rel->exps) return 0; diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2565,7 +2565,6 @@ rewrite_groupings(mvc *sql, sql_rel *rel } nrel->exps = exps; nrel = rel_project(sql->sa, nrel, pexps); - set_grouping_totals(nrel); if (!unions) unions = nrel; @@ -2632,10 +2631,10 @@ rel_unnest(mvc *sql, sql_rel *rel) rel = rel_exp_visitor(sql, rel, &rewrite_ifthenelse); /* add isnull handling */ rel = rel_exp_visitor(sql, rel, &rewrite_exp_rel); rel = rel_visitor(sql, rel, &rewrite_compare_exp); /* only allow for e_cmp in selects and handling */ - rel = rel_visitor(sql, rel, &rewrite_empty_project); rel = _rel_unnest(sql, rel); rel = rel_visitor(sql, rel, &rewrite_fix_count); /* fix count inside a left join (adds a project (if (cnt IS null) then (0) else (cnt)) */ rel = rel_visitor(sql, rel, &rewrite_remove_xp); /* remove crossproducts with project [ atom ] */ rel = rel_visitor(sql, rel, &rewrite_groupings); /* transform group combinations into union of group relations */ + rel = rel_visitor(sql, rel, &rewrite_empty_project); return rel; } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list