Changeset: f5e97fd4b691 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f5e97fd4b691
Modified Files:
        sql/server/rel_optimizer.c
Branch: Dec2016
Log Message:

fix for bug 6140, ie the push project up properly detects more ambigious
expression names


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
@@ -5417,8 +5417,22 @@ rel_push_project_up(int *changes, mvc *s
                if (is_join(rel->op) && r) {
                        t = (l->op == op_project && l->l)?l->l:l;
                        l_exps = rel_projections(sql, t, NULL, 1, 1);
+                       /* conflict with old right expressions */
+                       r_exps = rel_projections(sql, r, NULL, 1, 1);
+                       for(n = l_exps->h; n; n = n->next) {
+                               sql_exp *e = n->data;
+                               const char *rname = exp_relname(e);
+                               const char *name = exp_name(e);
+       
+                               if (exp_is_atom(e))
+                                       continue;
+                               if ((rname && exps_bind_column2(r_exps, rname, 
name) != NULL) || 
+                                   (!rname && exps_bind_column(r_exps, name, 
NULL) != NULL)) 
+                                       return rel;
+                       }
                        t = (r->op == op_project && r->l)?r->l:r;
                        r_exps = rel_projections(sql, t, NULL, 1, 1);
+                       /* conflict with new right expressions */
                        for(n = l_exps->h; n; n = n->next) {
                                sql_exp *e = n->data;
        
@@ -5428,6 +5442,7 @@ rel_push_project_up(int *changes, mvc *s
                                   (exps_bind_column(r_exps, e->r, NULL) != 
NULL && (!e->l || !e->r)))
                                        return rel;
                        }
+                       /* conflict with new left expressions */
                        for(n = r_exps->h; n; n = n->next) {
                                sql_exp *e = n->data;
        
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to