Changeset: f3896bec855d for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=f3896bec855d
Modified Files:
        sql/server/rel_select.c
Branch: Dec2016
Log Message:

fixed bug 6314, ie recursive lateral


diffs (32 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
@@ -4904,11 +4904,17 @@ rel_query(mvc *sql, sql_rel *rel, symbol
                for (n = fl->h; n ; n = n->next) {
                        int lateral = check_is_lateral(n->data.sym), 
lateral_used = 0;
 
+                       /* just used current expression */
                        fnd = table_ref(sql, NULL, n->data.sym, 0);
                        if (!fnd && (rel || lateral) && sql->session->status != 
-ERR_AMBIGUOUS) {
                                /* reset error */
                                sql->session->status = 0;
                                sql->errstr[0] = 0;
+                               /* here we have 2 cases; the query could be 
+                                * using the outer relation (correlated query)
+                                * or we could have a lateral query.
+                                * Also we could have both.
+                                */ 
                                if (used && rel)
                                        rel = rel_dup(rel);
                                if (!used && (!sn->lateral && !lateral) && rel) 
{
@@ -4921,6 +4927,10 @@ rel_query(mvc *sql, sql_rel *rel, symbol
                                        /* create dummy single row project */
                                        rel = rel_project(sql->sa, NULL, 
applyexps = rel_projections(sql, o, NULL, 1, 1)); 
                                }
+                               if (lateral && rel) {
+                                       res = rel_crossproduct(sql->sa, res, 
rel, op_join);
+                                       rel = NULL;
+                               }
                                if (lateral) {
                                        list *pre_exps = rel_projections(sql, 
res, NULL, 1, 1);
                                        fnd = table_ref(sql, res, n->data.sym, 
lateral);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to