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

Reply via email to