Changeset: 19ae041a81a3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/19ae041a81a3
Modified Files:
        sql/server/rel_rel.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

If attributes are present, don't add identity. Also attempt to bind TID column 
as identity if available


diffs (42 lines):

diff --git a/sql/server/rel_rel.c b/sql/server/rel_rel.c
--- a/sql/server/rel_rel.c
+++ b/sql/server/rel_rel.c
@@ -1565,6 +1565,8 @@ rel_add_identity(mvc *sql, sql_rel *rel,
 {
        if (rel && is_simple_project(rel->op) && !need_distinct(rel) && (*exp = 
exps_find_identity(rel->exps, rel->l)) != NULL)
                return rel;
+       if (rel && is_basetable(rel->op) && rel->exps && (*exp = 
exps_bind_column(rel->exps, TID, NULL, NULL, 0)) != NULL)
+               return rel;
        return _rel_add_identity(sql, rel, exp);
 }
 
@@ -1575,6 +1577,8 @@ rel_add_identity2(mvc *sql, sql_rel *rel
 
        if (rel && is_simple_project(rel->op) && !need_distinct(rel) && (*exp = 
exps_find_identity(rel->exps, rel->l)) != NULL)
                return rel;
+       if (rel && is_basetable(rel->op) && rel->exps && (*exp = 
exps_bind_column(rel->exps, TID, NULL, NULL, 0)) != NULL)
+               return rel;
        while(l && !is_set(l->op) && rel_has_freevar(sql, l) && l->l) {
                p = l;
                l = l->l;
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
@@ -916,14 +916,14 @@ push_up_project(mvc *sql, sql_rel *rel, 
                                        rel_projections(sql, rel->l, NULL, 1, 
1));
 
                        /* only pass bound variables */
-                       if (is_left(rel->op) && exps_have_freevar(sql, 
r->exps)) {
+                       if (list_empty(rel->attr) && is_left(rel->op) && 
exps_have_freevar(sql, r->exps)) {
                                id = rel_bound_exp(sql, r);
                                id = rel_project_add_exp(sql, n, id);
                        }
-                       if (is_left(rel->op) && rel->attr) {
+                       if (is_left(rel->op) && !list_empty(rel->attr)) {
                                rel_project_add_exp(sql, n, exp_ref(sql, 
rel->attr->h->data));
                        }
-                       if (!rel->attr)
+                       if (list_empty(rel->attr))
                        for (m=r->exps->h; m; m = m->next) {
                                sql_exp *e = m->data;
 
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to