Changeset: 741e2fcf7992 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/741e2fcf7992
Modified Files:
gdk/gdk_utils.c
sql/backends/monet5/sql.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_statement.c
sql/server/rel_basetable.c
sql/server/rel_distribute.c
sql/server/rel_exp.c
sql/server/rel_exp.h
sql/server/rel_optimize_others.c
sql/server/rel_optimize_proj.c
sql/server/rel_optimize_sel.c
sql/server/rel_optimizer.c
sql/server/rel_prop.c
sql/server/rel_prop.h
sql/server/rel_propagate.c
sql/server/rel_rel.c
sql/server/rel_rel.h
sql/server/rel_rewriter.c
sql/server/rel_rewriter.h
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/rel_statistics.c
sql/server/rel_unnest.c
sql/server/rel_updates.c
sql/server/sql_atom.c
sql/server/sql_atom.h
sql/server/sql_var.c
Branch: resource_management
Log Message:
wip free in sql layer
diffs (truncated from 1679 to 300 lines):
diff --git a/gdk/gdk_utils.c b/gdk/gdk_utils.c
--- a/gdk/gdk_utils.c
+++ b/gdk/gdk_utils.c
@@ -2098,7 +2098,6 @@ typedef struct freed_t {
static void
sa_free_obj(allocator *pa, void *obj, size_t sz)
{
- assert(sz > 0);
size_t i;
char *obj_start = (char *) obj;
@@ -2169,6 +2168,7 @@ sa_use_freed_obj(allocator *pa, size_t s
pa->freelist = curr->n;
}
pa->freelist_hits += 1;
+ pa->inuse += 1;
return curr;
} else {
prev = curr;
@@ -2240,7 +2240,6 @@ static void *
#undef sa_realloc
-#undef sa_alloc
void *
sa_realloc( allocator *sa, void *p, size_t sz, size_t oldsz )
{
@@ -2315,6 +2314,7 @@ static void *
return r;
}
+#undef sa_alloc
void *
sa_alloc( allocator *sa, size_t sz )
{
@@ -2380,7 +2380,6 @@ void sa_destroy( allocator *sa )
if (sa->pa) {
sa_reset(sa);
sa_free_blk(sa->pa, sa->blks[0]);
- sa_free_obj(sa->pa, sa, sizeof(allocator));
return;
}
// root allocator
diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c
--- a/sql/backends/monet5/sql.c
+++ b/sql/backends/monet5/sql.c
@@ -360,7 +360,7 @@ create_table_or_view(mvc *sql, char *sna
if (!r || !is_project(r->op) || !r->exps ||
list_length(r->exps) != 1 ||
exp_check_type(sql, &c->type, r,
r->exps->h->data, type_equal) == NULL) {
if (r)
- rel_destroy(r);
+ rel_destroy(sql, r);
sa_destroy(nsa);
sql->sa = osa;
if (strlen(sql->errstr) > 6 && sql->errstr[5]
== '!')
diff --git a/sql/backends/monet5/sql_execute.c
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -699,7 +699,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS
resetMalBlk(c->curprg->def);
SQLremoveQueryFromCache(c);
}
- rel_destroy(rel);
+ rel_destroy(m, rel);
}
return RAcommit_statement(be, msg);
}
@@ -932,7 +932,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
}
if (!msg && monet5_create_relational_function(m, mod, nme, rel, NULL,
ops, 0) < 0)
msg = createException(SQL, "RAstatement2", "%s", m->errstr);
- rel_destroy(rel);
+ rel_destroy(m, rel);
return RAstatement2_return(be, m, nlevels, gvars, gentries, msg);
}
diff --git a/sql/backends/monet5/sql_statement.c
b/sql/backends/monet5/sql_statement.c
--- a/sql/backends/monet5/sql_statement.c
+++ b/sql/backends/monet5/sql_statement.c
@@ -4376,7 +4376,7 @@ stmt_func(backend *be, stmt *ops, const
goto bailout;
if ((p = find_prop(rel->p, PROP_REMOTE)))
- rel->p = prop_remove(rel->p, p);
+ rel->p = prop_remove(be->mvc->sa, rel->p, p);
/* sql_processrelation may split projections, so make sure the topmost
relation only contains references */
rel = rel_project(be->mvc->sa, rel, rel_projections(be->mvc, rel, NULL,
1, 1));
if (!(rel = sql_processrelation(be->mvc, rel, 0, 0, 1, 1)))
diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c
--- a/sql/server/rel_basetable.c
+++ b/sql/server/rel_basetable.c
@@ -398,7 +398,7 @@ rel_base_add_columns( mvc *sql, sql_rel
r->exps = new_exp_list(sql->sa);
if(!r->exps) {
- rel_destroy(r);
+ rel_destroy(sql, r);
return NULL;
}
@@ -413,7 +413,7 @@ rel_base_add_columns( mvc *sql, sql_rel
sql_exp *e = exp_alias(sql, atname, c->base.name, tname,
c->base.name, &c->type, CARD_MULTI, c->null, is_column_unique(c), 0);
if (e == NULL) {
- rel_destroy(r);
+ rel_destroy(sql, r);
return NULL;
}
e->nid = -(ba->basenr + i);
@@ -442,7 +442,7 @@ rewrite_basetable(mvc *sql, sql_rel *rel
rel->exps = new_exp_list(sa);
if(!rel->exps) {
- rel_destroy(rel);
+ rel_destroy(sql, rel);
return NULL;
}
@@ -462,7 +462,7 @@ rewrite_basetable(mvc *sql, sql_rel *rel
sql_exp *e = exp_alias(sql, atname, c->base.name,
tname, c->base.name, &c->type, CARD_MULTI, c->null, is_column_unique(c), 0);
if (e == NULL) {
- rel_destroy(rel);
+ rel_destroy(sql, rel);
return NULL;
}
e->nid = -(ba->basenr + i);
@@ -481,7 +481,7 @@ rewrite_basetable(mvc *sql, sql_rel *rel
if (rel_base_is_used(ba, i) || list_empty(rel->exps)) { /* Add
TID column if no column is used */
sql_exp *e = exp_alias(sql, atname, TID, tname, TID,
sql_bind_localtype("oid"), CARD_MULTI, 0, 1, 1);
if (e == NULL) {
- rel_destroy(rel);
+ rel_destroy(sql, rel);
return NULL;
}
e->nid = -(ba->basenr + i);
@@ -515,7 +515,7 @@ rewrite_basetable(mvc *sql, sql_rel *rel
unique = list_length(i->columns) == 1 &&
is_column_unique(((sql_kc*)i->columns->h->data)->c);
e = exp_alias(sql, atname, iname, tname, iname, t,
CARD_MULTI, has_nils, unique, 1);
if (e == NULL) {
- rel_destroy(rel);
+ rel_destroy(sql, rel);
return NULL;
}
/* index names are prefixed, to make them independent */
diff --git a/sql/server/rel_distribute.c b/sql/server/rel_distribute.c
--- a/sql/server/rel_distribute.c
+++ b/sql/server/rel_distribute.c
@@ -209,7 +209,7 @@ replica_rewrite(visitor *v, sql_table *t
/* if we resolved the replica to a local table
we have to
* go and remove the remote property from the
subtree */
sql_rel *r = ((rps*)v->data)->orig;
- r->p = prop_remove(r->p, rp);
+ r->p = prop_remove(v->sql->sa, r->p, rp);
break;
}
}
@@ -232,7 +232,7 @@ eliminate_remote_or_replica_refs(visitor
if (rel_is_ref(*rel) && !((*rel)->flag&MERGE_LEFT)) {
if (has_remote_or_replica(*rel)) {
sql_rel *nrel = rel_copy(v->sql, *rel, 1);
- rel_destroy(*rel);
+ rel_destroy(v->sql, *rel);
*rel = nrel;
return true;
} else {
@@ -286,7 +286,7 @@ rel_rewrite_replica_(visitor *v, sql_rel
return rel;
sql_rel *r = replica_rewrite(v, t, rel->exps);
- rel_destroy(rel);
+ rel_destroy(v->sql, rel);
rel = r;
}
}
@@ -390,7 +390,7 @@ rel_rewrite_remote_(visitor *v, sql_rel
case op_table:
if (IS_TABLE_PROD_FUNC(rel->flag) || rel->flag ==
TABLE_FROM_RELATION) {
if (l && (p = find_prop(l->p, PROP_REMOTE)) != NULL) {
- l->p = prop_remove(l->p, p);
+ l->p = prop_remove(v->sql->sa, l->p, p);
if (!find_prop(rel->p, PROP_REMOTE)) {
p->p = rel->p;
rel->p = p;
@@ -425,8 +425,8 @@ rel_rewrite_remote_(visitor *v, sql_rel
/* if there are common uris pull the REMOTE prop with
the common uris up */
if (!list_empty(uris)) {
- l->p = prop_remove(l->p, pl);
- r->p = prop_remove(r->p, pr);
+ l->p = prop_remove(v->sql->sa, l->p, pl);
+ r->p = prop_remove(v->sql->sa, r->p, pr);
if (!find_prop(rel->p, PROP_REMOTE)) {
/* remove local tid ONLY if no subtree
has local parts */
if (pl->id == 0 || pr->id == 0)
@@ -453,7 +453,7 @@ rel_rewrite_remote_(visitor *v, sql_rel
case op_truncate:
/* if the subtree has the REMOTE property just pull it up */
if (l && (p = find_prop(l->p, PROP_REMOTE)) != NULL) {
- l->p = prop_remove(l->p, p);
+ l->p = prop_remove(v->sql->sa, l->p, p);
if (!find_prop(rel->p, PROP_REMOTE)) {
p->p = rel->p;
rel->p = p;
@@ -463,7 +463,7 @@ rel_rewrite_remote_(visitor *v, sql_rel
case op_ddl:
if (rel->flag == ddl_output || rel->flag == ddl_create_seq ||
rel->flag == ddl_alter_seq /*|| rel->flag == ddl_alter_table || rel->flag ==
ddl_create_table || rel->flag == ddl_create_view*/) {
if (l && (p = find_prop(l->p, PROP_REMOTE)) != NULL) {
- l->p = prop_remove(l->p, p);
+ l->p = prop_remove(v->sql->sa, l->p, p);
if (!find_prop(rel->p, PROP_REMOTE)) {
p->p = rel->p;
rel->p = p;
@@ -477,8 +477,8 @@ rel_rewrite_remote_(visitor *v, sql_rel
/* if there are common uris pull the REMOTE
prop with the common uris up */
if (!list_empty(uris)) {
- l->p = prop_remove(l->p, pl);
- r->p = prop_remove(r->p, pr);
+ l->p = prop_remove(v->sql->sa, l->p,
pl);
+ r->p = prop_remove(v->sql->sa, r->p,
pr);
if (!find_prop(rel->p, PROP_REMOTE)) {
/* remove local tid ONLY if no
subtree has local parts */
if (pl->id == 0 || pr->id == 0)
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
@@ -3900,3 +3900,67 @@ list_find_exp( list *exps, sql_exp *e)
return NULL;
return exps_bind_nid(exps, e->nid);
}
+
+void
+free_exps_list(allocator *sa, list *exps)
+{
+ if (!list_empty(exps))
+ for (node *n=exps->h; n ; n=n->next) {
+ free_exp(sa, n->data);
+ n->data = NULL;
+ }
+}
+
+
+static void
+_free_exp_internal(allocator *sa, sql_exp *e)
+{
+ if (!e)
+ return;
+ if (e->p) {
+ // free_props(sa, e->p);
+ e->p = NULL;
+ }
+ // reset
+ *e = (sql_exp) {};
+ sa_free(sa, e);
+}
+
+static void
+_free_exp_atom(allocator *sa, sql_exp *e)
+{
+ if (!e || e->type != e_atom)
+ return;
+
+ if (e->l) {
+ // free_atom(sa, e->l);
+ e->l = NULL;
+ }
+ //if (e->r) {
+ // ((sql_var_name*) e->r)->sname = NULL;
+ // ((sql_var_name*) e->r)->name = NULL;
+ // e->r = NULL;
+ //}
+ if (e->f) {
+ free_exps_list(sa, e->f);
+ e->f = NULL;
+ }
+ return _free_exp_internal(sa, e);
+}
+
+void
+free_exp(allocator *sa, sql_exp *e)
+{
+ if (!e)
+ return;
+ switch(e->type) {
+ case e_atom:
+ return _free_exp_atom(sa, e);
+ case e_column:
+ case e_cmp:
+ case e_func:
+ case e_aggr:
+ case e_convert:
+ case e_psm:
+ }
+}
diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h
--- a/sql/server/rel_exp.h
+++ b/sql/server/rel_exp.h
@@ -228,5 +228,7 @@ extern int rel_set_type_param(mvc *sql,
extern sql_exp *exp_convert_inplace(mvc *sql, sql_subtype *t, sql_exp *exp);
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]