Changeset: 017835379a7c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/017835379a7c
Modified Files:
        sql/server/rel_basetable.c
        sql/server/rel_basetable.h
        sql/server/rel_partition.c
        sql/server/rel_planner.c
        sql/server/rel_rel.c
Branch: Jul2021
Log Message:

Do a better job copying and more cleanup


diffs (119 lines):

diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -118,6 +118,26 @@ rel_basetable(mvc *sql, sql_table *t, co
        return rel;
 }
 
+void
+rel_base_copy(mvc *sql, sql_rel *in, sql_rel *out)
+{
+       sql_allocator *sa = sql->sa;
+       sql_table *t = in->l;
+       rel_base_t *ba = in->r;
+
+       assert(is_basetable(in->op) && is_basetable(out->op));
+       int nrcols = ol_length(t->columns), end = nrcols + 1 + 
ol_length(t->idxs);
+       size_t bsize = sizeof(rel_base_t) + sizeof(int)*USED_LEN(end);
+       rel_base_t *nba = (rel_base_t*)sa_alloc(sa, bsize);
+
+       memcpy(nba, ba, bsize);
+       if (ba->name)
+               nba->name = sa_strdup(sa, ba->name);
+
+       out->l = t;
+       out->r = nba;
+}
+
 sql_rel *
 rel_base_bind_column_( sql_rel *rel, const char *cname)
 {
diff --git a/sql/server/rel_basetable.h b/sql/server/rel_basetable.h
--- a/sql/server/rel_basetable.h
+++ b/sql/server/rel_basetable.h
@@ -21,6 +21,8 @@ extern sql_table *rel_ddl_table_get(sql_
 extern sql_rel *rel_ddl_basetable_get(sql_rel *r);
 
 extern sql_rel *rel_basetable(mvc *sql, sql_table *t, const char *tname);
+extern void rel_base_copy(mvc *sql, sql_rel *in, sql_rel *out);
+
 extern void rel_base_disallow(sql_rel *r);             /* set flag to check 
per column access */
 extern int rel_base_use(mvc *ql, sql_rel *rt, int nr); /* return error on 
(read) access violation */
 extern void rel_base_use_tid(mvc *sql, sql_rel *rt);
diff --git a/sql/server/rel_partition.c b/sql/server/rel_partition.c
--- a/sql/server/rel_partition.c
+++ b/sql/server/rel_partition.c
@@ -31,8 +31,6 @@ rel_getcount(mvc *sql, sql_rel *rel)
                        sqlstore *store = sql->session->tr->store;
                        return 
(lng)store->storage_api.count_col(sql->session->tr, 
ol_first_node(t->columns)->data, 0);
                }
-               if (!t && rel->r) /* dict */
-                       return (lng)sql_trans_dist_count(sql->session->tr, 
rel->r);
                return 0;
        }
        default:
diff --git a/sql/server/rel_planner.c b/sql/server/rel_planner.c
--- a/sql/server/rel_planner.c
+++ b/sql/server/rel_planner.c
@@ -123,8 +123,6 @@ rel_getcount(mvc *sql, sql_rel *rel)
                        sqlstore *store = sql->session->tr->store;
                        return 
(lng)store->storage_api.count_col(sql->session->tr, 
ol_first_node(t->columns)->data, 0);
                }
-               if (!t && rel->r) /* dict */
-                       return (lng)sql_trans_dist_count(sql->session->tr, 
rel->r);
                return 0;
        }
        case op_select:
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
@@ -147,14 +147,9 @@ rel_copy(mvc *sql, sql_rel *i, int deep)
        if (!rel)
                return NULL;
 
-       rel->l = NULL;
-       rel->r = NULL;
-       rel->card = i->card;
-       rel->flag = i->flag;
-
        switch(i->op) {
        case op_basetable:
-               rel->l = i->l;
+               rel_base_copy(sql, i, rel);
                break;
        case op_table:
                rel->l = i->l;
@@ -212,6 +207,22 @@ rel_copy(mvc *sql, sql_rel *i, int deep)
                break;
        }
        rel->op = i->op;
+       rel->card = i->card;
+       rel->flag = i->flag;
+       rel->nrcols = i->nrcols;
+       rel->grouped = i->grouped;
+       rel->used = i->used;
+       if (is_processed(i))
+               set_processed(rel);
+       if (is_dependent(i))
+               set_dependent(rel);
+       if (is_outer(i))
+               set_outer(rel);
+       if (is_single(i))
+               set_single(rel);
+       if (need_distinct(i))
+               set_distinct(rel);
+       rel->p = prop_copy(sql->sa, i->p);
        rel->exps = (!i->exps)?NULL:deep?exps_copy(sql, 
i->exps):list_dup(i->exps, (fdup)NULL);
        return rel;
 }
@@ -1709,10 +1720,6 @@ rel_deps(mvc *sql, sql_rel *r, list *ref
        switch (r->op) {
        case op_basetable: {
                sql_table *t = r->l;
-               sql_column *c = r->r;
-
-               if (!t && c)
-                       t = c->t;
 
                cond_append(l, &t->base);
                /* find all used columns */
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to