Changeset: ef467f07050e for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/ef467f07050e
Modified Files:
        sql/server/rel_select.c
        sql/server/rel_unnest.c
Branch: default
Log Message:

small fixes for sqlancer bufs


diffs (43 lines):

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
@@ -5215,8 +5215,9 @@ rel_value_exp(sql_query *query, sql_rel 
                        if (list_length(r->exps) > 1) { /* Todo make sure the 
in handling can handle a list ( value lists), instead of just a list of 
relations */
                                e = exp_values(query->sql->sa, r->exps);
                        } else {
-                               e = r->exps->h->data;
-                               if (rel && *rel && !exp_has_rel(e)) {
+                               sql_exp *ne = r->exps->h->data;
+                               if (rel && *rel && !exp_has_rel(ne)) {
+                                       e = ne;
                                        rel_bind_var(query->sql, *rel, e);
                                        if (exp_has_freevar(query->sql, e) && 
is_sql_aggr(f)) {
                                                sql_rel *outer = 
query_fetch_outer(query, exp_has_freevar(query->sql, e)-1);
diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c
--- a/sql/server/rel_unnest.c
+++ b/sql/server/rel_unnest.c
@@ -760,7 +760,12 @@ rel_general_unnest(mvc *sql, sql_rel *re
                sql_rel *D = rel_project(sql->sa, rel_dup(l), exps_copy(sql, 
ad));
                set_distinct(D);
 
+               int single = is_single(r);
+               reset_single(r);
+               sql_rel *or = r;
                r = rel_crossproduct(sql->sa, D, r, rel->op);
+               if (single)
+                       set_single(or);
                r->op = op_join;
                move_join_exps(sql, rel, r);
                set_dependent(r);
@@ -2595,8 +2600,10 @@ rewrite_anyequal(visitor *v, sql_rel *re
                                if (rsq) {
                                        if (on_right) {
                                                sql_rel *join = rel->l; /* the 
introduced join */
-                                               join->r = 
rel_crossproduct(sql->sa, join->r, rsq, op_join);
+                                               join->r = 
rel_crossproduct(sql->sa, join->r, rsq, depth?op_right:op_join);
                                                set_dependent(join);
+                                               if (depth)
+                                                       reset_has_nil(le);
                                        } else {
                                                operator_type op = 
!is_tuple?((depth>0)?op_left:op_join):is_anyequal(sf)?op_semi:op_anti;
                                                (void)rewrite_inner(sql, rel, 
rsq, &op);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to