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