Changeset: 5e614a469d41 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5e614a469d41
Modified Files:
        sql/backends/monet5/rel_bin.c
Branch: default
Log Message:

Fixed sqlancer crash by improving joinable filter comparisons detection


diffs (48 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -2432,33 +2432,36 @@ split_join_exps(sql_rel *rel, list *join
                                                }
                                        } else {
                                                if (l->card != CARD_ATOM || 
!exp_is_atom(l)) {
-                                                       left_reference += 
rel_find_exp(rel->l, l) != NULL;
-                                                       right_reference += 
rel_find_exp(rel->r, l) != NULL;
+                                                       left_reference |= 
rel_find_exp(rel->l, l) != NULL;
+                                                       right_reference |= 
rel_find_exp(rel->r, l) != NULL;
                                                }
                                                if (r->card != CARD_ATOM || 
!exp_is_atom(r)) {
-                                                       left_reference += 
rel_find_exp(rel->l, r) != NULL;
-                                                       right_reference += 
rel_find_exp(rel->r, r) != NULL;
+                                                       left_reference |= 
rel_find_exp(rel->l, r) != NULL;
+                                                       right_reference |= 
rel_find_exp(rel->r, r) != NULL;
                                                }
                                        }
                                } else if (flag == cmp_filter) {
                                        list *l = e->l, *r = e->r;
+                                       int ll = 0, lr = 0, rl = 0, rr = 0;
 
                                        for (node *n = l->h ; n ; n = n->next) {
                                                sql_exp *ee = n->data;
 
                                                if (ee->card != CARD_ATOM || 
!exp_is_atom(ee)) {
-                                                       left_reference += 
rel_find_exp(rel->l, ee) != NULL;
-                                                       right_reference += 
rel_find_exp(rel->r, ee) != NULL;
+                                                       ll |= 
rel_find_exp(rel->l, ee) != NULL;
+                                                       rl |= 
rel_find_exp(rel->r, ee) != NULL;
                                                }
                                        }
                                        for (node *n = r->h ; n ; n = n->next) {
                                                sql_exp *ee = n->data;
 
                                                if (ee->card != CARD_ATOM || 
!exp_is_atom(ee)) {
-                                                       left_reference += 
rel_find_exp(rel->l, ee) != NULL;
-                                                       right_reference += 
rel_find_exp(rel->r, ee) != NULL;
+                                                       lr |= 
rel_find_exp(rel->l, ee) != NULL;
+                                                       rr |= 
rel_find_exp(rel->r, ee) != NULL;
                                                }
                                        }
+                                       if ((ll && !lr && !rl && rr) || (!ll && 
lr && rl && !rr))
+                                               right_reference = 
left_reference = 1;
                                }
                        }
                        if (left_reference && right_reference) {
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to