Changeset: 72f2e92bcc3c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/72f2e92bcc3c Modified Files: sql/common/sql_types.c sql/common/sql_types.h sql/server/rel_exp.c sql/server/rel_select.c Branch: Jul2021 Log Message:
Only internal functions are known to be commutative diffs (61 lines): diff --git a/sql/common/sql_types.c b/sql/common/sql_types.c --- a/sql/common/sql_types.c +++ b/sql/common/sql_types.c @@ -150,9 +150,9 @@ int sql_type_convert (int from, int to) return convert_matrix[from][to]; } -bool is_commutative(const char *fnm) +bool is_commutative(const char *sname, const char *fnm) { - return strcmp("sql_add", fnm) == 0 || strcmp("sql_mul", fnm) == 0 || strcmp("scale_up", fnm) == 0; + return (!sname || strcmp("sys", sname) == 0) && (strcmp("sql_add", fnm) == 0 || strcmp("sql_mul", fnm) == 0 || strcmp("scale_up", fnm) == 0); } void diff --git a/sql/common/sql_types.h b/sql/common/sql_types.h --- a/sql/common/sql_types.h +++ b/sql/common/sql_types.h @@ -26,7 +26,7 @@ extern unsigned int digits2bits(unsigned extern unsigned int type_digits_to_char_digits(sql_subtype *t); extern int sql_type_convert(int form, int to); /* return 1, convert possible but it's a down cast, 2 convert possible can be done savely */ -extern bool is_commutative(const char *fnm); /* return true if commutative */ +extern bool is_commutative(const char *sname, const char *fnm); /* return true if commutative */ extern char *sql_bind_alias(const char *alias); diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -1348,7 +1348,8 @@ exp_match_exp( sql_exp *e1, sql_exp *e2) break; case e_func: { sql_subfunc *e1f = (sql_subfunc*) e1->f; - int (*comp)(list*, list*) = !e1f->func->s && is_commutative(e1f->func->base.name) ? exp_match_list : exps_equal; + const char *sname = e1f->func->s ? e1f->func->s->base.name : NULL; + int (*comp)(list*, list*) = is_commutative(sname, e1f->func->base.name) ? exp_match_list : exps_equal; if (!e1f->func->side_effect && !subfunc_cmp(e1f, e2->f) && /* equal functions */ 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 @@ -2924,7 +2924,7 @@ rel_binop_(mvc *sql, sql_rel *rel, sql_e if (card == card_loader) card = card_none; - if (is_commutative(fname) && l->card < r->card) { /* move constants to the right if possible */ + if (is_commutative(sname, fname) && l->card < r->card) { /* move constants to the right if possible */ sql_subtype *tmp = t1; t1 = t2; t2 = tmp; @@ -2983,7 +2983,7 @@ rel_binop_(mvc *sql, sql_rel *rel, sql_e sql->session->status = 0; /* if the function was not found clean the error */ sql->errstr[0] = '\0'; } - if (!f && is_commutative(fname)) { + if (!f && is_commutative(sname, fname)) { if ((f = bind_func(sql, sname, fname, t2, t1, type, &found))) { sql_subtype *tmp = t1; t1 = t2; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list