Changeset: 49731ed2a581 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/49731ed2a581 Modified Files: sql/server/rel_basetable.c sql/server/rel_basetable.h sql/server/rel_dump.c sql/server/rel_select.c sql/server/rel_statistics.c Branch: Aug2024 Log Message:
backport fixes on statistics not using name_find_col diffs (103 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 @@ -72,6 +72,17 @@ rel_base_idx_nid(sql_rel *r, sql_idx *i) return 0; } +sql_column* +rel_base_find_column(sql_rel *r, int nid) +{ + rel_base_t *ba = r->r; + sql_table *b = r->l; + nid = -nid; + if ((nid - ba->basenr) >= ol_length(b->columns)) + return NULL; + return ol_fetch(b->columns, nid - ba->basenr); +} + int rel_base_nid(sql_rel *r, sql_column *c) { @@ -572,6 +583,8 @@ rel_rename_part(mvc *sql, sql_rel *p, sq { sql_exp *ne = NULL; sql_table *mt = rel_base_table(mt_rel), *t = rel_base_table(p); + rel_base_t *mt_ba = mt_rel->r, *p_ba = p->r; + p_ba->basenr = mt_ba->basenr; assert(!p->exps); p->exps = sa_list(sql->sa); 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 @@ -44,6 +44,7 @@ extern sql_exp *rel_base_bind_column( mv extern sql_rel *rel_base_bind_column2_( sql_rel *rel, const char *tname, const char *cname); extern sql_exp *rel_base_bind_column2( mvc *sql, sql_rel *rel, const char *tname, const char *cname); extern sql_exp *rel_base_bind_column3( mvc *sql, sql_rel *rel, const char *sname, const char *tname, const char *cname); +extern sql_column *rel_base_find_column( sql_rel *rel, int nid); extern list *rel_base_projection( mvc *sql, sql_rel *rel, int intern); extern list *rel_base_project_all( mvc *sql, sql_rel *rel, char *tname); /* select * from t */ diff --git a/sql/server/rel_dump.c b/sql/server/rel_dump.c --- a/sql/server/rel_dump.c +++ b/sql/server/rel_dump.c @@ -121,7 +121,7 @@ exp_print(mvc *sql, stream *fout, sql_ex if (!e) return; /*mnstr_printf(fout, "%p ", e);*/ - if (mvc_debug_on(sql, 16) && e->alias.label < 0) + if (mvc_debug_on(sql, 4) && e->alias.label < 0) mnstr_printf(fout, "%d: ", e->alias.label); switch(e->type) { case e_psm: { @@ -248,7 +248,7 @@ exp_print(mvc *sql, stream *fout, sql_ex case e_column: { if (is_freevar(e)) mnstr_printf(fout, "!!!FREE!!! "); - if (mvc_debug_on(sql, 16) && e->nid) + if (mvc_debug_on(sql, 4) && e->nid) mnstr_printf(fout, "<%d", e->nid); if (e->l) mnstr_printf(fout, "\"%s\".", dump_escape_ident(sql->ta, (char*)e->l)); 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 @@ -439,9 +439,15 @@ rel_get_count(sql_rel *rel) if (rel->p && (p = find_prop(rel->p, PROP_COUNT)) != NULL) return p->value.lval; else if(is_munion(rel->op)) { + lng cnt = 0; list *l = rel->l; - sql_rel *f = l->h->data; - return rel_get_count(f); + for (node *n = l->h; n; n = n->next) { + lng lcnt = rel_get_count(n->data); + if (lcnt == BUN_MAX) + return BUN_MAX; + cnt += lcnt; + } + return cnt; } else if(rel->l) { if (is_select(rel->op) || is_project(rel->op)) return rel_get_count(rel->l); diff --git a/sql/server/rel_statistics.c b/sql/server/rel_statistics.c --- a/sql/server/rel_statistics.c +++ b/sql/server/rel_statistics.c @@ -13,6 +13,7 @@ #include "monetdb_config.h" #include "rel_optimizer_private.h" #include "rel_statistics.h" +#include "rel_basetable.h" #include "rel_rewriter.h" static sql_exp * @@ -286,7 +287,7 @@ rel_basetable_column_get_statistics(mvc return; sql_column *c = NULL; - if ((c = name_find_column(rel, exp_relname(e), exp_name(e), -2, NULL))) { + if ((c = rel_base_find_column(rel, e->nid))) { sql_column_get_statistics(sql, c, e); } } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org