Changeset: ba5703c02dc2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ba5703c02dc2
Modified Files:
        sql/backends/monet5/Tests/createorreplace.stable.err
        sql/backends/monet5/mal_backend.c
        sql/backends/monet5/mal_backend.h
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_cat.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_scenario.c
        sql/common/exception_buffer.c
        sql/common/sql_mem.c
        sql/common/sql_types.c
        sql/common/sql_types.h
        sql/include/exception_buffer.h
        sql/include/sql_mem.h
        sql/server/rel_dump.c
        sql/server/rel_prop.c
        sql/server/rel_prop.h
        sql/server/rel_propagate.c
        sql/server/rel_psm.c
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/sql_atom.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/server/sql_partition.c
        sql/server/sql_privileges.c
        sql/server/sql_qc.c
        sql/server/sql_semantic.c
        sql/server/sql_semantic.h
        sql/storage/bat/bat_table.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/Tests/function_syntax.stable.err
        sql/test/Tests/procedure_syntax.stable.err
        sql/test/pg_regress/Tests/drop.stable.err
Branch: context
Log Message:

use more allocators


diffs (truncated from 1747 to 300 lines):

diff --git a/sql/backends/monet5/Tests/createorreplace.stable.err 
b/sql/backends/monet5/Tests/createorreplace.stable.err
--- a/sql/backends/monet5/Tests/createorreplace.stable.err
+++ b/sql/backends/monet5/Tests/createorreplace.stable.err
@@ -31,7 +31,7 @@ stderr of test 'createorreplace` in dire
 
 MAPI  = (monetdb) /var/tmp/mtest-26151/.s.monetdb.34646
 QUERY = CREATE FUNCTION createorreplacefunc(i INTEGER) RETURNS INTEGER 
LANGUAGE PYTHON { return i * 3; };
-ERROR = !CREATE FUNCTION: name 'createorreplacefunc' (int(32)) already in use
+ERROR = !CREATE FUNCTION: name 'createorreplacefunc' (int) already in use
 CODE  = 42000
 
 # 14:49:52 >  
diff --git a/sql/backends/monet5/mal_backend.c 
b/sql/backends/monet5/mal_backend.c
--- a/sql/backends/monet5/mal_backend.c
+++ b/sql/backends/monet5/mal_backend.c
@@ -35,10 +35,11 @@ backend_reset(backend *b)
 backend *
 backend_create(mvc *m, Client c)
 {
-       backend *b = MNEW(backend);
+       backend *b = SA_NEW(m->pa, backend);
 
-       if( b== NULL)
+       if (!b)
                return NULL;
+       b->sa = m->pa; 
        b->mvc = m;
        b->client = c;
        b->mvc_var = 0;
@@ -46,10 +47,3 @@ backend_create(mvc *m, Client c)
        b->output_format = OFMT_CSV;
        return backend_reset(b);
 }
-
-void
-backend_destroy(backend *b)
-{
-       _DELETE(b);
-}
-
diff --git a/sql/backends/monet5/mal_backend.h 
b/sql/backends/monet5/mal_backend.h
--- a/sql/backends/monet5/mal_backend.h
+++ b/sql/backends/monet5/mal_backend.h
@@ -32,6 +32,8 @@ typedef enum output_format {
 } ofmt;
 
 typedef struct backend {
+       sql_allocator *sa;      /* backend/session level allocator */
+
        char    language;               /* 'S' or 's' or 'X' */
        char    depth;                  /* depth >= 1 means no output for 
trans/schema statements */
        int     remote;                 /* counter to make remote function 
names unique */
@@ -62,6 +64,5 @@ typedef struct backend {
 
 extern backend *backend_reset(backend *b);
 extern backend *backend_create(mvc *m, Client c);
-extern void backend_destroy(backend *b);
 
 #endif /*MAL_BACKEND_H*/
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
@@ -285,6 +285,28 @@ SQLshutdown_wrap(Client cntxt, MalBlkPtr
        return msg;
 }
 
+static char *
+subtype2default(sql_allocator *sa, sql_subtype *tpe) //distinguish char(n), 
decimal(n,m) from other SQL types
+{
+       char buf[BUFSIZ];
+
+       switch (tpe->type->eclass) {
+               case EC_SEC:
+                       snprintf(buf, BUFSIZ, "BIGINT");
+                       break;
+               case EC_MONTH:
+                       snprintf(buf, BUFSIZ, "INT");
+                       break;
+               case EC_CHAR:
+               case EC_STRING:
+               case EC_DEC:
+                       return subtype2string(sa, tpe);
+               default:
+                       snprintf(buf, BUFSIZ, "%s", tpe->type->sqlname);
+       }
+       return sa_strdup(sa, buf);
+}
+
 str
 create_table_or_view(mvc *sql, char* sname, char *tname, sql_table *t, int 
temp)
 {
@@ -309,7 +331,7 @@ create_table_or_view(mvc *sql, char* sna
        }
 
        osa = sql->sa;
-       sql->sa = NULL;
+       sql->sa = sql->ta;
 
        nt = sql_trans_create_table(sql->session->tr, s, tname, t->query, 
t->type, t->system, temp, t->commit_action,
                                                                t->sz, 
t->properties);
@@ -323,39 +345,33 @@ create_table_or_view(mvc *sql, char* sna
                        sql_rel *r = NULL;
                        list *id_l;
 
-                       sql->sa = sa_create(sql->eb);
-                       if(!sql->sa) {
+                       sql->sa = sql->ta;
+                       typestr = subtype2default(sql->ta, &c->type);
+                       if(!typestr) {
+                               sa_reset(sql->ta);
                                sql->sa = osa;
                                throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                        }
-                       buf = sa_alloc(sql->sa, strlen(c->def) + 8);
+                       buf = sa_alloc(sql->ta, strlen(c->def) + 
strlen(typestr) + 32);
                        if(!buf) {
-                               sa_destroy(sql->sa);
-                               sql->sa = osa;
-                               throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-                       }
-                       typestr = subtype2string2(&c->type);
-                       if(!typestr) {
-                               sa_destroy(sql->sa);
+                               sa_reset(sql->ta);
                                sql->sa = osa;
                                throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                        }
                        snprintf(buf, BUFSIZ, "select cast(%s as %s);", c->def, 
typestr);
-                       _DELETE(typestr);
                        r = rel_parse(sql, s, buf, m_deps);
                        if (!r || !is_project(r->op) || !r->exps || 
list_length(r->exps) != 1 ||
                                rel_check_type(sql, &c->type, r, 
r->exps->h->data, type_equal) == NULL) {
                                if(r)
                                        rel_destroy(r);
-                               sa_destroy(sql->sa);
+                               sa_reset(sql->ta);
                                sql->sa = osa;
                                throw(SQL, "sql.catalog", SQLSTATE(42000) "%s", 
sql->errstr);
                        }
                        id_l = rel_dependencies(sql, r);
                        mvc_create_dependencies(sql, id_l, nt->base.id, 
FUNC_DEPENDENCY);
                        rel_destroy(r);
-                       sa_destroy(sql->sa);
-                       sql->sa = NULL;
+                       sa_reset(sql->ta);
                }
        }
 
@@ -363,6 +379,7 @@ create_table_or_view(mvc *sql, char* sna
                sql_column *c = n->data, *copied = mvc_copy_column(sql, nt, c);
 
                if (copied == NULL) {
+                       sa_reset(sql->ta);
                        sql->sa = osa;
                        throw(SQL, "sql.catalog", SQLSTATE(42000) "CREATE 
TABLE: %s_%s_%s conflicts", s->base.name, t->base.name, c->base.name);
                }
@@ -373,17 +390,9 @@ create_table_or_view(mvc *sql, char* sna
                char *err = NULL;
 
                nt->part.pexp->exp = sa_strdup(sql->session->tr->sa, 
t->part.pexp->exp);
-
-               sql->sa = sa_create(sql->eb);
-               if(!sql->sa) {
-                       sql->sa = osa;
-                       throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               }
-
                err = bootstrap_partition_expression(sql, sql->session->tr->sa, 
nt, 1);
-               sa_destroy(sql->sa);
-               sql->sa = NULL;
-               if(err) {
+               sa_reset(sql->ta);
+               if (err) {
                        sql->sa = osa;
                        return err;
                }
@@ -408,15 +417,8 @@ create_table_or_view(mvc *sql, char* sna
                        sql_key *k = n->data;
                        char *err = NULL;
 
-                       sql->sa = sa_create(sql->eb);
-                       if(!sql->sa) {
-                               sql->sa = osa;
-                               throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-                       }
-
                        err = sql_partition_validate_key(sql, nt, k, "CREATE");
-                       sa_destroy(sql->sa);
-                       sql->sa = NULL;
+                       sa_reset(sql->ta);
                        if(err) {
                                sql->sa = osa;
                                return err;
@@ -440,11 +442,6 @@ create_table_or_view(mvc *sql, char* sna
        if (nt->query && isView(nt)) {
                sql_rel *r = NULL;
 
-               sql->sa = sa_create(sql->eb);
-               if(!sql->sa) {
-                       sql->sa = osa;
-                       throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               }
                r = rel_parse(sql, s, nt->query, m_deps);
                if (r)
                        r = rel_unnest(sql, r);
@@ -455,7 +452,7 @@ create_table_or_view(mvc *sql, char* sna
 
                        mvc_create_dependencies(sql, id_l, nt->base.id, 
VIEW_DEPENDENCY);
                }
-               sa_destroy(sql->sa);
+               sa_reset(sql->ta);
        }
        sql->sa = osa;
        return MAL_SUCCEED;
@@ -476,7 +473,7 @@ create_table_from_emit(Client cntxt, cha
                return msg;
 
        /* for some reason we don't have an allocator here, so make one */
-       sql->sa = sa_create(sql->eb);
+       sql->sa = sa_create(sql->pa);
        if (!sql->sa) {
                msg = sql_error(sql, 02, SQLSTATE(HY001) "CREATE TABLE: %s", 
MAL_MALLOC_FAIL);
                goto cleanup;
@@ -556,7 +553,7 @@ append_to_table_from_emit(Client cntxt, 
                return msg;
 
        /* for some reason we don't have an allocator here, so make one */
-       sql->sa = sa_create(sql->eb);
+       sql->sa = sa_create(sql->pa);
        if (!sql->sa) {
                msg = sql_error(sql, 02, SQLSTATE(HY001) "CREATE TABLE: %s", 
MAL_MALLOC_FAIL);
                goto cleanup;
diff --git a/sql/backends/monet5/sql_cat.c b/sql/backends/monet5/sql_cat.c
--- a/sql/backends/monet5/sql_cat.c
+++ b/sql/backends/monet5/sql_cat.c
@@ -439,7 +439,7 @@ create_trigger(mvc *sql, char *sname, ch
                sql_rel *r = NULL;
                sql_allocator *sa = sql->sa;
 
-               sql->sa = sa_create(sql->eb);
+               sql->sa = sa_create(sql->pa);
                if(!sql->sa)
                        throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                buf = sa_strdup(sql->sa, query);
@@ -773,7 +773,7 @@ create_func(mvc *sql, char *sname, char 
                sql_rel *r = NULL;
                sql_allocator *sa = sql->sa;
 
-               sql->sa = sa_create(sql->eb);
+               sql->sa = sa_create(sql->pa);
                if(!sql->sa)
                        throw(SQL, "sql.catalog",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
                buf = sa_strdup(sql->sa, nf->query);
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
@@ -397,7 +397,7 @@ SQLstatementIntern(Client c, str *expr, 
        m->params = NULL;
        m->session->auto_commit = 0;
        if (!m->sa)
-               m->sa = sa_create(m->eb);
+               m->sa = sa_create(m->pa);
        if (!m->sa) {
                *m = *o;
                _DELETE(o);
@@ -414,7 +414,7 @@ SQLstatementIntern(Client c, str *expr, 
                sql_rel *r;
 
                if (!m->sa)
-                       m->sa = sa_create(m->eb);
+                       m->sa = sa_create(m->pa);
                if (!m->sa) {
                        msg = createException(PARSE, 
"SQLparser",SQLSTATE(HY001) MAL_MALLOC_FAIL);
                        goto endofcompile;
@@ -583,7 +583,6 @@ endofcompile:
                MSresetInstructions(c->curprg->def, 1);
 
        c->sqlcontext = be;
-       backend_destroy(sql);
        GDKfree(n);
        GDKfree(b);
        bstream_destroy(m->scanner.rs);
@@ -718,7 +717,7 @@ RAstatement(Client c, MalBlkPtr mb, MalS
        if ((msg = checkSQLContext(c)) != NULL)
                return msg;
        if (!m->sa)
-               m->sa = sa_create(m->eb);
+               m->sa = sa_create(m->pa);
        if (!m->sa)
                return createException(SQL,"RAstatement",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
        refs = sa_list(m->sa);
@@ -787,7 +786,7 @@ RAstatement2(Client cntxt, MalBlkPtr mb,
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
        if (!m->sa)
-               m->sa = sa_create(m->eb);
+               m->sa = sa_create(m->pa);
        if (!m->sa)
                return createException(SQL,"RAstatement2",SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
 
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to