Changeset: 221e5219491f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/221e5219491f
Modified Files:
        sql/server/rel_exp.c
Branch: default
Log Message:

For commutative functions use a more relaxed expression match criteria


diffs (30 lines):

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
@@ -1337,16 +1337,17 @@ exp_match_exp( sql_exp *e1, sql_exp *e2)
                            need_no_nil(e1) == need_no_nil(e2))
                                return 1;
                        break;
-               case e_func:
-                       if (!subfunc_cmp(e1->f, e2->f) && /* equal functions */
-                           exps_equal(e1->l, e2->l) &&
-                           /* optional order by expressions */
-                           exps_equal(e1->r, e2->r)) {
-                               sql_subfunc *f = e1->f;
-                               if (!f->func->side_effect)
+               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;
+
+                       if (!e1f->func->side_effect &&
+                               !subfunc_cmp(e1f, e2->f) && /* equal functions 
*/
+                               comp(e1->l, e2->l) &&
+                               /* optional order by expressions */
+                               exps_equal(e1->r, e2->r))
                                        return 1;
-                       }
-                       break;
+                       } break;
                case e_atom:
                        if (e1->l && e2->l && !atom_cmp(e1->l, e2->l))
                                return 1;
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to