Changeset: f0b87cf94c3a for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f0b87cf94c3a
Modified Files:
sql/server/rel_statistics.c
Branch: properties
Log Message:
Separate statistics gathering per relation type
diffs (70 lines):
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
@@ -17,13 +17,13 @@
#include "sql_mvc.h"
static sql_exp *
-rel_get_statisitics(visitor *v, sql_rel *rel, sql_exp *e, int depth)
+rel_basetable_get_statistics(visitor *v, sql_rel *rel, sql_exp *e, int depth)
{
mvc *sql = v->sql;
sql_column *c = NULL;
- (void) depth;
- if (is_basetable(rel->op) && (c = name_find_column(rel, e->l, e->r, -2,
NULL))) {
+ (void)depth;
+ if ((c = name_find_column(rel, e->l, e->r, -2, NULL))) {
ValPtr min = NULL, max = NULL;
if (has_nil(e) && mvc_has_no_nil(sql, c))
@@ -41,11 +41,47 @@ rel_get_statisitics(visitor *v, sql_rel
return e;
}
+static sql_rel *
+rel_get_statisitics(visitor *v, sql_rel *rel)
+{
+ switch(rel->op){
+ case op_basetable:
+ rel->exps = exps_exp_visitor_bottomup(v, rel, rel->exps, 0,
&rel_basetable_get_statistics, false);
+ break;
+ case op_join:
+ case op_left:
+ case op_right:
+ case op_full:
+ case op_semi:
+ case op_anti:
+ case op_union:
+ case op_inter:
+ case op_except:
+ case op_select:
+ case op_project:
+ case op_groupby:
+ case op_insert:
+ case op_update:
+ case op_delete:
+ break;
+ /*These relations are less important for now
+ case op_ddl:
+ case op_table:
+ case op_truncate:
+ case op_topn:
+ case op_sample:*/
+ default:
+ break;
+ }
+
+ return rel;
+}
+
sql_rel *
rel_statistics(mvc *sql, sql_rel *rel)
{
- visitor v = { .sql = sql, .value_based_opt = 0, .storage_based_opt = 1
};
+ visitor v = { .sql = sql };
- rel = rel_exp_visitor_bottomup(&v, rel, &rel_get_statisitics, false);
+ rel = rel_visitor_bottomup(&v, rel, &rel_get_statisitics);
return rel;
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list