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

Reply via email to