Changeset: 73584ff38ca3 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=73584ff38ca3
Modified Files:
sql/server/rel_statistics_functions.c
Branch: properties
Log Message:
min/max for coalesce
diffs (64 lines):
diff --git a/sql/server/rel_statistics_functions.c
b/sql/server/rel_statistics_functions.c
--- a/sql/server/rel_statistics_functions.c
+++ b/sql/server/rel_statistics_functions.c
@@ -289,7 +289,49 @@ sql_abs_propagate_statistics(mvc *sql, s
}
}
-static struct function_properties functions_list[13] = {
+static void
+sql_coalesce_propagate_statistics(mvc *sql, sql_exp *e)
+{
+ list *l = e->l;
+ sql_exp *first = l->h->data;
+ ValPtr curmin = NULL, curmax = NULL, lval;
+
+ if ((lval = find_prop_and_get(first->p, PROP_MAX)))
+ curmax = lval;
+ if ((lval = find_prop_and_get(first->p, PROP_MIN)))
+ curmin = lval;
+ for (node *n = l->h->next ; n && curmin && curmax ; n = n->next) {
+ sql_exp *next = n->data;
+
+ if ((lval = find_prop_and_get(next->p, PROP_MAX))) {
+ ValRecord verify1;
+
+ VARcalcgt(&verify1, lval, curmax);
+ curmax = verify1.val.btval == 1 ? lval : curmax;
+ } else {
+ curmax = NULL;
+ }
+ if ((lval = find_prop_and_get(next->p, PROP_MIN))) {
+ ValRecord verify1;
+
+ VARcalcgt(&verify1, lval, curmin);
+ curmin = verify1.val.btval == 1 ? curmin : lval;
+ } else {
+ curmin = NULL;
+ }
+ }
+
+ if (curmin && curmax) {
+ ValPtr res1 = (ValPtr) sa_zalloc(sql->sa, sizeof(ValRecord)),
res2 = (ValPtr) sa_zalloc(sql->sa, sizeof(ValRecord));
+
+ VALcopy(res2, curmax);
+ VALcopy(res1, curmin);
+ set_property(sql, e, PROP_MAX, res2);
+ set_property(sql, e, PROP_MIN, res1);
+ }
+}
+
+static struct function_properties functions_list[14] = {
{"sql_add", &sql_add_propagate_statistics},
{"sql_sub", &sql_sub_propagate_statistics},
{"sql_mul", &sql_mul_propagate_statistics},
@@ -302,7 +344,8 @@ static struct function_properties functi
{"least", &sql_least_greatest_propagate_statistics},
{"greatest", &sql_least_greatest_propagate_statistics},
{"ifthenelse", &sql_ifthenelse_propagate_statistics},
- {"nullif", &sql_nullif_propagate_statistics}
+ {"nullif", &sql_nullif_propagate_statistics},
+ {"coalesce", &sql_coalesce_propagate_statistics}
};
void
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list