[prev in list] [next in list] [prev in thread] [next in thread] 

List:       monetdb-checkins
Subject:    MonetDB: Jul2021 - exp_relname is recursive, so check the stack ...
From:       Pedro_Ferreira <commits+pedro.ferreira=monetdbsolutions.com () mon
Date:       2021-05-31 11:48:46
Message-ID: hg.9dce0c3e63cd.1622461726.7379446580971568969 () monetdb-vm0 ! spin-off ! cwi ! nl
[Download RAW message or body]

Changeset: 9dce0c3e63cd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/9dce0c3e63cd
Modified Files:
	sql/server/rel_optimizer.c
Branch: Jul2021
Log Message:

exp_relname is recursive, so check the stack beforehand. Also don't attempt to \
destroy the selection over the merge table multiple times


diffs (44 lines):

diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c
--- a/sql/server/rel_optimizer.c
+++ b/sql/server/rel_optimizer.c
@@ -8906,14 +8906,14 @@ typedef struct {
 static sql_rel *
 merge_table_prune_and_unionize(visitor *v, sql_rel *mt_rel, merge_table_prune_info \
*info)  {
+	if (mvc_highwater(v->sql))
+		return sql_error(v->sql, 10, SQLSTATE(42000) "Query too complex: running out of \
stack space"); +
 	sql_rel *nrel = NULL;
 	sql_table *mt = (sql_table*) mt_rel->l;
 	const char *mtalias = exp_relname(mt_rel->exps->h->data);
 	list *tables = sa_list(v->sql->sa);
 
-	if (mvc_highwater(v->sql))
-		return sql_error(v->sql, 10, SQLSTATE(42000) "Query too complex: running out of \
                stack space");
-
 	for (node *nt = mt->members->h; nt; nt = nt->next) {
 		sql_part *pd = nt->data;
 		sql_table *pt = find_sql_table_id(v->sql->session->tr, mt->s, pd->member);
@@ -9223,10 +9223,7 @@ merge_table_prune_and_unionize(visitor *
 			}
 		}
 	}
-	if (info)
-		rel_destroy(info->sel); /* mt_rel must be under info->sel */
-	else
-		rel_destroy(mt_rel);
+	rel_destroy(mt_rel);
 	return nrel;
 }
 
@@ -9308,6 +9305,10 @@ rel_merge_table_rewrite(visitor *v, sql_
 			}
 			if (!(rel = merge_table_prune_and_unionize(v, bt, info)))
 				return NULL;
+			if (sel) {
+				sel->l = NULL; /* The mt relation has already been destroyed */
+				rel_destroy(sel);
+			}
 			v->changes++;
 		}
 	}
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic