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

Reply via email to