Changeset: b4b65d915789 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b4b65d915789
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_execute.c
sql/backends/monet5/sql_scenario.c
sql/server/rel_exp.c
sql/server/rel_psm.c
sql/server/rel_schema.c
sql/server/rel_select.c
sql/server/sql_parser.h
sql/server/sql_parser.y
sql/server/sql_scan.c
sql/server/sql_scan.h
Branch: context
Log Message:
continue to move malloc/free into allocators
diffs (truncated from 410 to 300 lines):
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
@@ -159,6 +159,15 @@ sqlcleanup(backend *be, int err)
}
/* some statements dynamically disable caching */
be->mvc->sym = NULL;
+#if 0
+ printf("#used memory %zu %zu %zu %zu\n",
+ be->mvc->pa->usedmem,
+ be->mvc->sa?be->mvc->sa->usedmem:0,
+ be->mvc->ta->usedmem,
+
be->mvc->session->tr?be->mvc->session->tr->sa->usedmem:0);
+#endif
+ if (be->mvc->ta)
+ be->mvc->ta = sa_reset(be->mvc->ta);
if (be->mvc->sa)
be->mvc->sa = sa_reset(be->mvc->sa);
if (err >0)
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
@@ -613,13 +613,10 @@ SQLengineIntern(Client c, backend *be)
str msg = MAL_SUCCEED;
char oldlang = be->language;
mvc *m = be->mvc;
- char *q;
if (oldlang == 'X') { /* return directly from X-commands */
sqlcleanup(be, 0);
- q = c->query;
c->query = NULL;
- GDKfree(q);
return MAL_SUCCEED;
}
@@ -639,9 +636,7 @@ SQLengineIntern(Client c, backend *be)
goto cleanup_engine;
}
sqlcleanup(be, 0);
- q = c->query;
c->query = NULL;
- GDKfree(q);
return MAL_SUCCEED;
}
@@ -685,9 +680,7 @@ cleanup_engine:
MSresetInstructions(c->curprg->def, 1);
freeVariables(c, c->curprg->def, NULL, be->vtop);
be->language = oldlang;
- q = c->query;
c->query = NULL;
- GDKfree(q);
/*
* Any error encountered during execution should block further
processing
* unless auto_commit has been set.
diff --git a/sql/backends/monet5/sql_scenario.c
b/sql/backends/monet5/sql_scenario.c
--- a/sql/backends/monet5/sql_scenario.c
+++ b/sql/backends/monet5/sql_scenario.c
@@ -942,12 +942,9 @@ SQLparser(Client c)
int oldvtop, oldstop;
int pstatus = 0;
int err = 0, opt = 0;
- char *q = NULL;
/* clean up old stuff */
- q = c->query;
c->query = NULL;
- GDKfree(q); /* may be NULL */
be = (backend *) c->sqlcontext;
if (be == 0) {
@@ -1095,10 +1092,9 @@ SQLparser(Client c)
* produce code.
*/
be->q = NULL;
- q = query_cleaned(QUERY(m->scanner));
- c->query = q;
+ c->query = query_cleaned(m->sa, QUERY(m->scanner));
- if (q == NULL) {
+ if (c->query == NULL) {
err = 1;
msg = createException(PARSE, "SQLparser", SQLSTATE(HY001)
MAL_MALLOC_FAIL);
} else {
@@ -1122,12 +1118,12 @@ SQLparser(Client c)
err = 0;
setVarType(c->curprg->def, 0, 0);
- if (backend_dumpstmt(be, c->curprg->def, r, 1, 0, q) <
0)
+ if (backend_dumpstmt(be, c->curprg->def, r, 1, 0,
c->query) < 0)
err = 1;
else
opt = 1;
} else {
- char *escaped_q = sa_escape_str(m->sa, q);
+ char *escaped_q = sa_escape_str(m->sa, c->query);
be->q = NULL;
if(!escaped_q) {
@@ -1215,9 +1211,7 @@ SQLparser(Client c)
finalize:
if (msg) {
sqlcleanup(be, 0);
- q = c->query;
c->query = NULL;
- GDKfree(q);
}
return msg;
}
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
@@ -2148,7 +2148,7 @@ create_table_part_atom_exp(mvc *sql, sql
assert(0);
}
if(buf)
- GDKfree(buf);
+ _DELETE(buf);
return res;
}
diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c
--- a/sql/server/rel_psm.c
+++ b/sql/server/rel_psm.c
@@ -913,9 +913,8 @@ rel_create_func(sql_query *query, dlist
sql_schema *old_schema = cur_schema(sql);
if (create) { /* needed for recursive functions */
- q = query_cleaned(q);
+ q = query_cleaned(sql->ta, q);
sql->forward = f = mvc_create_func(sql,
sql->sa, s, fname, l, restype, type, lang, "user", q, q, FALSE, vararg, FALSE);
- GDKfree(q);
}
sql->session->schema = s;
b = sequential_block(query, (ra)?&ra->type:NULL,
ra?NULL:restype, body, NULL, is_func);
@@ -946,9 +945,8 @@ rel_create_func(sql_query *query, dlist
return NULL;
sql->params = NULL;
if (create) {
- q = query_cleaned(q);
+ q = query_cleaned(sql->ta, q);
f = mvc_create_func(sql, sql->sa, s, fname, l,
restype, type, lang, fmod, fnme, q, FALSE, vararg, FALSE);
- GDKfree(q);
} else if (!sf) {
return sql_error(sql, 01, SQLSTATE(42000)
"CREATE %s%s: external name %s.%s not bound (%s.%s)", KF, F, fmod, fnme,
s->base.name, fname );
} else {
@@ -1244,12 +1242,11 @@ create_trigger(sql_query *query, dlist *
event = 2;
break;
}
- orientation = triggered_action->h->data.i_val;
- q = query_cleaned(QUERY(sql->scanner));
assert(triggered_action->h->type == type_int);
+ orientation = triggered_action->h->data.i_val;
+ q = query_cleaned(sql->ta, QUERY(sql->scanner));
r = rel_create_trigger(sql, t->s->base.name, t->base.name,
triggername, time, orientation, event, old_name, new_name, condition, q);
- GDKfree(q);
return r;
}
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -1200,9 +1200,8 @@ rel_create_view(sql_query *query, sql_sc
}
if (create) {
- q = query_cleaned(q);
+ q = query_cleaned(sql->ta, q);
t = mvc_create_view(sql, s, name, SQL_DECLARED_TABLE,
q, 0);
- _DELETE(q);
if (as_subquery( sql, t, sq, column_spec, "CREATE
VIEW") != 0) {
rel_destroy(sq);
return NULL;
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
@@ -3865,19 +3865,15 @@ static sql_exp *
}
if (!groupby) {
- char *uaname = GDKmalloc(strlen(aname) + 1);
+ char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s: missing
group by",
uaname ? toUpperCopy(uaname, aname) :
aname);
- if (uaname)
- GDKfree(uaname);
return e;
} else if(is_sql_groupby(f) || (is_sql_partitionby(f) && groupby->op !=
op_groupby)) {
const char *clause = is_sql_groupby(f) ? "GROUP BY":"PARTITION
BY";
- char *uaname = GDKmalloc(strlen(aname) + 1);
+ char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s: aggregate
function '%s' not allowed in %s clause",
uaname ?
toUpperCopy(uaname, aname) : aname, aname, clause);
- if (uaname)
- GDKfree(uaname);
return e;
}
@@ -3899,11 +3895,9 @@ static sql_exp *
return NULL;
if (!query_has_outer(query) && is_sql_where(f)) {
- char *uaname = GDKmalloc(strlen(aname) + 1);
+ char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s: not
allowed in WHERE clause",
uaname ? toUpperCopy(uaname, aname) :
aname);
- if (uaname)
- GDKfree(uaname);
return e;
}
@@ -3911,11 +3905,9 @@ static sql_exp *
sql_exp *e;
if (strcmp(aname, "count") != 0) {
- char *uaname = GDKmalloc(strlen(aname) + 1);
+ char *uaname = SA_NEW_ARRAY(sql->ta, char,
strlen(aname) + 1);
sql_exp *e = sql_error(sql, 02, SQLSTATE(42000) "%s:
unable to perform '%s(*)'",
uaname ? toUpperCopy(uaname,
aname) : aname, aname);
- if (uaname)
- GDKfree(uaname);
return e;
}
a = sql_bind_aggr(sql->sa, s, aname, NULL);
@@ -4098,18 +4090,14 @@ static sql_exp *
} else {
sql_exp *e;
char *type = "unknown";
- char *uaname = GDKmalloc(strlen(aname) + 1);
+ char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
if (exps->h) {
sql_exp *e = exps->h->data;
type = exp_subtype(e)->type->sqlname;
}
-
e = sql_error(sql, 02, SQLSTATE(42000) "%s: no such operator
'%s(%s)'",
uaname ? toUpperCopy(uaname, aname) : aname,
aname, type);
-
- if (uaname)
- GDKfree(uaname);
return e;
}
}
@@ -5104,12 +5092,10 @@ rel_rankop(sql_query *query, sql_rel **r
(strcmp(s->base.name, "sys") == 0 &&
((strcmp(aname, "first_value") == 0) || strcmp(aname, "last_value") == 0));
if (is_sql_where(f) || is_sql_groupby(f) || is_sql_having(f) ||
is_sql_orderby(f) || is_sql_partitionby(f)) {
- char *uaname = GDKmalloc(strlen(aname) + 1);
+ char *uaname = SA_NEW_ARRAY(sql->ta, char, strlen(aname) + 1);
const char *clause =
is_sql_where(f)?"WHERE":is_sql_groupby(f)?"GROUP
BY":is_sql_having(f)?"HAVING":is_sql_orderby(f)?"ORDER BY":"PARTITION BY";
(void) sql_error(sql, 02, SQLSTATE(42000) "%s: window function
'%s' not allowed in %s clause",
uaname ? toUpperCopy(uaname,
aname) : aname, aname, clause);
- if (uaname)
- GDKfree(uaname);
return NULL;
}
diff --git a/sql/server/sql_parser.h b/sql/server/sql_parser.h
--- a/sql/server/sql_parser.h
+++ b/sql/server/sql_parser.h
@@ -19,7 +19,7 @@
#define YYDEBUG 1
*/
-extern int find_subgeometry_type(char*);
+extern int find_subgeometry_type(mvc *m, char*);
extern char *token2string(tokens token);
extern int sqlparse(mvc *m);
diff --git a/sql/server/sql_parser.y b/sql/server/sql_parser.y
--- a/sql/server/sql_parser.y
+++ b/sql/server/sql_parser.y
@@ -24,6 +24,9 @@ static int sqlerror(mvc *sql, const char
static int sqlformaterror(mvc *sql, _In_z_ _Printf_format_string_ const char
*format, ...)
__attribute__((__format__(__printf__, 2, 3)));
+static void *ma_alloc(sql_allocator *sa, size_t sz);
+static void ma_free(void *p);
+
#include <unistd.h>
#include <string.h>
@@ -47,8 +50,9 @@ static int sqlformaterror(mvc *sql, _In_
#define _atom_string(t, v) atom_string(SA, t, v)
-#define YYMALLOC GDKmalloc
-#define YYFREE GDKfree
+#define Malloc(sz) ma_alloc(m->ta,sz)
+#define YYMALLOC Malloc
+#define YYFREE ma_free
#define YY_parse_LSP_NEEDED /* needed for bison++ 1.21.11-3 */
@@ -5412,7 +5416,7 @@ data_type:
}
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list