Changeset: d998debe17db for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d998debe17db
Modified Files:
        monetdb5/mal/Tests/tst275.stable.out
        sql/server/rel_unnest.c
        sql/test/mergetables/Tests/sqlsmith-exist-lateral.stable.out
Branch: sq2default
Log Message:

small fixes, make sure we only use one expression inside an exists


diffs (84 lines):

diff --git a/monetdb5/mal/Tests/tst275.stable.out 
b/monetdb5/mal/Tests/tst275.stable.out
--- a/monetdb5/mal/Tests/tst275.stable.out
+++ b/monetdb5/mal/Tests/tst275.stable.out
@@ -33,8 +33,8 @@ stdout of test 'tst275` in directory 'mo
 # t    t       t  # name
 # void str     str  # type
 #--------------------------#
-[ 0@0, "batId",        "tmp_15"        ]
-[ 1@0, "batCacheid",   "13"    ]
+[ 0@0, "batId",        "tmp_264"       ]
+[ 1@0, "batCacheid",   "180"   ]
 [ 2@0, "tparentid",    "0"     ]
 [ 3@0, "batSharecnt",  "0"     ]
 [ 4@0, "batCount",     "0"     ]
@@ -49,7 +49,7 @@ stdout of test 'tst275` in directory 'mo
 [ 13@0,        "hseqbase",     "0@0"   ]
 [ 14@0,        "tident",       "t"     ]
 [ 15@0,        "tdense",       "0"     ]
-[ 16@0,        "tseqbase",     "0@0"   ]
+[ 16@0,        "tseqbase",     nil     ]
 [ 17@0,        "tsorted",      "1"     ]
 [ 18@0,        "trevsorted",   "1"     ]
 [ 19@0,        "tkey", "1"     ]
@@ -69,7 +69,7 @@ stdout of test 'tst275` in directory 'mo
 [ 33@0,        "tail.size",    "1024"  ]
 [ 34@0,        "tail.storage", "malloced"      ]
 [ 35@0,        "tail.newstorage",      "malloced"      ]
-[ 36@0,        "tail.filename",        "15.tail"       ]
+[ 36@0,        "tail.filename",        "02/264.tail"   ]
 [ 37@0,        "tvheap->dirty",        "clean" ]
 #~EndVariableOutput~#
 #--------------------------#
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
@@ -517,6 +517,27 @@ exp_rewrite(mvc *sql, sql_rel *rel, sql_
 }
 
 static sql_exp *
+rel_reduce2one_exp(mvc *sql, sql_rel *sq)
+{
+       sql_exp *e = NULL;
+       
+       if (list_empty(sq->exps))
+               return NULL;
+       if (list_length(sq->exps) == 1)
+               return sq->exps->t->data;
+       for(node *n = sq->exps->h; n && !e; n = n->next) {
+               sql_exp *t = n->data;
+
+               if (!is_freevar(t))
+                       e = t;
+       }
+       if (!e)
+               e = sq->exps->t->data;
+       sq->exps = append(sa_list(sql->sa), e);
+       return e;
+}
+
+static sql_exp *
 rel_bound_exp(mvc *sql, sql_rel *rel )
 {
        while (rel->l) {
@@ -2169,7 +2190,7 @@ rewrite_exists(mvc *sql, sql_rel *rel, s
 
                        sq = exp_rel_get_rel(sql->sa, ie); /* get subquery */
 
-                       le = sq->exps->t->data;
+                       le = rel_reduce2one_exp(sql, sq);
                        if (!exp_name(le))
                                le = exp_label(sql->sa, le, ++sql->label);
                        le = exp_ref(sql->sa, le);
diff --git a/sql/test/mergetables/Tests/sqlsmith-exist-lateral.stable.out 
b/sql/test/mergetables/Tests/sqlsmith-exist-lateral.stable.out
--- a/sql/test/mergetables/Tests/sqlsmith-exist-lateral.stable.out
+++ b/sql/test/mergetables/Tests/sqlsmith-exist-lateral.stable.out
@@ -42,7 +42,7 @@ stdout of test 'sqlsmith-exist-lateral` 
 #                    ref_13.var_id as c1,
 #                    ref_11.commit_action as c2,
 #                    ref_11.system as c3
-% .L35,        .L37 # table_name
+% .ref_11,     .ref_12 # table_name
 % c0,  c1 # name
 % smallint,    boolean # type
 % 1,   5 # length
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to