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