Changeset: c57a7d481da1 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c57a7d481da1
Modified Files:
        sql/server/rel_optimizer.c
        sql/server/rel_select.c
Branch: window-tunning
Log Message:

A copy is still needed, leave for the optimizer to remove duplicate call


diffs (34 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
@@ -3261,7 +3261,7 @@ rel_push_down_bounds(visitor *v, sql_rel
                for (n = exps->h; n ; n = n->next) {
                        sql_exp *e = n->data;
                        int cnt, fcnt, is_value, i = 0;
-                       sql_exp *b1, *b2;
+                       sql_exp *b1, *b2, *last, *found;
                        sql_subfunc *f;
                        list *l;
 
@@ -3316,6 +3316,9 @@ rel_push_down_bounds(visitor *v, sql_rel
                                                                n->data = 
exp_ref(v->sql, b1);
                                                }
                                        }
+                                       last = l->t->data; /* find duplicate 
diff call for partition finding and reference the original one */
+                                       if (last->type == e_func && 
!strcmp(((sql_subfunc*) last->f)->func->base.name, "diff") && (found = 
exps_any_match(((sql_rel*)rel->l)->exps, last)))
+                                               l->t->data = exp_ref(v->sql, 
found);
                                }
                        }
                }
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
@@ -4918,7 +4918,7 @@ rel_rankop(sql_query *query, sql_rel **r
                } else if (frame_type == FRAME_UNBOUNDED_TILL_CURRENT_ROW || 
frame_type == FRAME_CURRENT_ROW_TILL_UNBOUNDED)
                        list_append(args, oe);
                if (gbe && !is_value)
-                       list_append(args, start && eend ? exp_ref(sql, pe) : 
pe);
+                       list_append(args, start && eend ? exp_copy(sql, pe) : 
pe);
        }
        call = exp_rank_op(sql->sa, list_empty(args) ? NULL : args, gbe, obe, 
wf);
        if (call && !exp_name(call))
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to