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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list