Changeset: db324d2a4e34 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/db324d2a4e34
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: default
Log Message:
don't use name_find_column in rel_statistics
use sql_debug=4 for extra info/print on labels
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 -- [email protected]
To unsubscribe send an email to [email protected]