Changeset: 43084b097365 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/43084b097365 Modified Files: sql/server/rel_exp.c Branch: Dec2025 Log Message:
reset exp before mark free
diffs (154 lines):
diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c
--- a/sql/server/rel_exp.c
+++ b/sql/server/rel_exp.c
@@ -4026,6 +4026,50 @@ free_exps(allocator *sa, list *exps)
static void
+sql_exp_reset(sql_exp *e)
+{
+ if (!e)
+ return;
+
+ e->l = e->r = e->f = e->p = NULL;
+ e->comment = NULL;
+
+ // Reset basic fields
+ e->type = -1;
+ e->alias.label = 0;
+ e->alias.name = NULL;
+ e->alias.rname = NULL;
+ e->flag = 0;
+ e->tmp = 0;
+ e->nid = 0;
+
+ // Reset bitfields
+ e->card = 0;
+ e->freevar = 0;
+ e->intern = 0;
+ e->selfref = 0;
+ e->anti = 0;
+ e->partitioning = 0;
+ e->ascending = 0;
+ e->nulls_last = 0;
+ e->zero_if_empty = 0;
+ e->distinct = 0;
+ e->semantics = 0;
+ e->any = 0;
+ e->need_no_nil = 0;
+ e->has_no_nil = 0;
+ e->unique = 0;
+ e->base = 0;
+ e->ref = 0;
+ e->used = 0;
+ e->symmetric = 0;
+
+ // Reset subtype
+ memset(&e->tpe, 0, sizeof(e->tpe));
+}
+
+
+static void
_free_exp_internal(allocator *sa, sql_exp *e)
{
if (!e)
@@ -4034,7 +4078,7 @@ static void
// free_props(sa, e->p);
e->p = NULL;
}
- e->type = -1;
+ sql_exp_reset(e);
ma_free(sa, e);
}
@@ -4054,48 +4098,76 @@ free_exp(allocator *sa, sql_exp *e)
case e_cmp:
if (e->flag < cmp_filter) {
// l and r are exp
- if (e->l)
+ if (e->l) {
free_exp(sa, e->l);
- if (e->r)
+ e->l = NULL;
+ }
+ if (e->r) {
free_exp(sa, e->r);
- if (e->f)
+ e->r = NULL;
+ }
+ if (e->f) {
free_exp(sa, e->f);
+ e->f = NULL;
+ }
}
if (e->flag == cmp_filter) {
// l and r are list
- if (e->l)
+ if (e->l) {
free_exps(sa, e->l);
- if (e->r)
+ e->l = NULL;
+ }
+ if (e->r) {
free_exps(sa, e->r);
+ e->r = NULL;
+ }
}
break;
case e_func:
case e_aggr:
- if (e->l)
+ if (e->l) {
free_exps(sa, e->l);
+ e->l = NULL;
+ }
break;
case e_convert:
- if (e->l)
+ if (e->l) {
free_exp(sa, e->l);
+ e->l = NULL;
+ }
break;
case e_psm:
- if ((e->flag & PSM_SET) && e->l)
+ if ((e->flag & PSM_SET) && e->l) {
free_exp(sa, e->l);
- if ((e->flag & PSM_RETURN) && e->l)
+ e->l = NULL;
+ }
+ if ((e->flag & PSM_RETURN) && e->l) {
free_exp(sa, e->l);
+ e->l = NULL;
+ }
if (e->flag & PSM_WHILE) {
- if (e->l)
+ if (e->l) {
free_exp(sa, e->l);
- if (e->r)
+ e->l = NULL;
+ }
+ if (e->r) {
free_exps(sa, e->r);
+ e->r = NULL;
+ }
}
if (e->flag & PSM_IF) {
- if (e->l)
+ if (e->l) {
free_exp(sa, e->l);
- if (e->r)
+ e->l = NULL;
+ }
+ if (e->r) {
free_exps(sa, e->r);
- if (e->f)
+ e->r = NULL;
+ }
+ if (e->f) {
free_exps(sa, e->f);
+ e->f = NULL;
+ }
}
break;
case e_column:
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]
