Changeset: a82334ac1a76 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=a82334ac1a76
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_statistics.c
        sql/backends/monet5/sql_upgrades.c
        sql/include/sql_catalog.h
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_privileges.c
        sql/storage/bat/bat_storage.c
        sql/storage/sql_catalog.c
        sql/storage/sql_storage.h
        sql/storage/store.c
Branch: nospare
Log Message:

move catalog into its own structure


diffs (truncated from 1441 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
@@ -4400,7 +4400,7 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                cname = *getArgReference_str(stk, pci, pci->retc + 2);
 
        /* check for limited storage tables */
-       for (nsch = tr->schemas.set->h; nsch; nsch = nsch->next) {
+       for (nsch = tr->cat->schemas.set->h; nsch; nsch = nsch->next) {
                sql_base *b = nsch->data;
                sql_schema *s = (sql_schema *) nsch->data;
                if( sname && strcmp(b->name, sname) )
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -1058,7 +1058,7 @@ mal_function_find_implementation_address
        m->user_id = m->role_id = USER_MONETDB;
 
        store_lock();
-       m->session = sql_session_create(0);
+       m->session = sql_session_create(m->pa, 0);
        store_unlock();
        if (!m->session) {
                (void) sql_error(o, 02, SQLSTATE(HY013) MAL_MALLOC_FAIL);
diff --git a/sql/backends/monet5/sql_statistics.c 
b/sql/backends/monet5/sql_statistics.c
--- a/sql/backends/monet5/sql_statistics.c
+++ b/sql/backends/monet5/sql_statistics.c
@@ -46,14 +46,14 @@ sql_drop_statistics(mvc *m, sql_table *t
        if (!isTable(t))
                throw(SQL, "sql_drop_statistics", SQLSTATE(42S02) "DROP 
STATISTICS: %s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, 
t->properties), t->base.name);
        if (!table_privs(m, t, PRIV_SELECT))
-               throw(SQL, "sql_drop_statistics", SQLSTATE(42000) "DROP 
STATISTICS: access denied for %s to table '%s.%s'", 
+               throw(SQL, "sql_drop_statistics", SQLSTATE(42000) "DROP 
STATISTICS: access denied for %s to table '%s.%s'",
                          get_string_global_var(m, "current_user"), 
t->s->base.name, t->base.name);
        if (isTable(t) && t->columns.set) {
                for (ncol = (t)->columns.set->h; ncol; ncol = ncol->next) {
                        sql_column *c = (sql_column *) ncol->data;
 
                        if (!column_privs(m, c, PRIV_SELECT))
-                               throw(SQL, "sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: access denied for %s to column '%s' on table 
'%s.%s'", 
+                               throw(SQL, "sql_drop_statistics", 
SQLSTATE(42000) "DROP STATISTICS: access denied for %s to column '%s' on table 
'%s.%s'",
                                          get_string_global_var(m, 
"current_user"), c->base.name, t->s->base.name, t->base.name);
                }
        }
@@ -122,7 +122,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
        TRC_DEBUG(SQL_PARSER, "analyze %s.%s.%s sample " LLFMT "%s\n", (sch ? 
sch : ""), (tbl ? tbl : " "), (col ? col : " "), samplesize, 
(minmax)?"MinMax":"");
 
        /* Do all the validations before doing any analyze */
-       for (nsch = tr->schemas.set->h; nsch; nsch = nsch->next) {
+       for (nsch = tr->cat->schemas.set->h; nsch; nsch = nsch->next) {
                sql_schema *s = (sql_schema *) nsch->data;
                if (!isalpha((unsigned char) s->base.name[0]))
                        continue;
@@ -140,7 +140,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                                if (tbl && !isTable(t))
                                        throw(SQL, "analyze", SQLSTATE(42S02) 
"%s '%s' is not persistent", TABLE_TYPE_DESCRIPTION(t->type, t->properties), 
t->base.name);
                                if (!table_privs(m, t, PRIV_SELECT))
-                                       throw(SQL, "analyze", SQLSTATE(42000) 
"ANALYZE: access denied for %s to table '%s.%s'", 
+                                       throw(SQL, "analyze", SQLSTATE(42000) 
"ANALYZE: access denied for %s to table '%s.%s'",
                                                  get_string_global_var(m, 
"current_user"), t->s->base.name, t->base.name);
                                if (isTable(t) && t->columns.set) {
                                        for (ncol = (t)->columns.set->h; ncol; 
ncol = ncol->next) {
@@ -150,7 +150,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                                                        continue;
                                                cfnd = 1;
                                                if (!column_privs(m, c, 
PRIV_SELECT))
-                                                       throw(SQL, "analyze", 
SQLSTATE(42000) "ANALYZE: access denied for %s to column '%s' on table 
'%s.%s'", 
+                                                       throw(SQL, "analyze", 
SQLSTATE(42000) "ANALYZE: access denied for %s to column '%s' on table '%s.%s'",
                                                                  
get_string_global_var(m, "current_user"), c->base.name, t->s->base.name, 
t->base.name);
                                        }
                                }
@@ -163,7 +163,7 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
        if (col && !cfnd)
                throw(SQL, "analyze", SQLSTATE(38000) "Column '%s' does not 
exist", col);
 
-       for (nsch = tr->schemas.set->h; nsch; nsch = nsch->next) {
+       for (nsch = tr->cat->schemas.set->h; nsch; nsch = nsch->next) {
                sql_base *b = nsch->data;
                sql_schema *s = (sql_schema *) nsch->data;
                if (!isalpha((unsigned char) b->name[0]))
diff --git a/sql/backends/monet5/sql_upgrades.c 
b/sql/backends/monet5/sql_upgrades.c
--- a/sql/backends/monet5/sql_upgrades.c
+++ b/sql/backends/monet5/sql_upgrades.c
@@ -1041,7 +1041,7 @@ sql_update_nov2019_missing_dependencies(
        pos += snprintf(buf + pos, bufsize - pos, "insert into sys.dependencies 
select c1, c2, c3 from (values");
        ppos = pos; /* later check if found updatable database objects */
 
-       for (node *n = sql->session->tr->schemas.set->h; n; n = n->next) {
+       for (node *n = sql->session->tr->cat->schemas.set->h; n; n = n->next) {
                sql_schema *s = (sql_schema*) n->data;
 
                if (s->funcs.set)
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -239,26 +239,6 @@ extern void cs_remove_node(changeset * c
 typedef void *backend_code;
 typedef size_t backend_stack;
 
-typedef struct sql_trans {
-       char *name;
-       int stime;              /* start of transaction */
-       int wstime;             /* first write transaction time stamp */
-       int wtime;              /* timestamp of latest write performed in 
transaction*/
-       int schema_number;      /* schema timestamp */
-       int schema_updates;     /* set on schema changes */
-       int active;             /* active transaction */
-       int status;             /* status of the last query */
-       list *dropped;          /* protection against recursive cascade action*/
-       list *moved_tables;
-
-       changeset schemas;
-
-       sql_allocator *sa;      /* transaction allocator */
-
-       struct sql_trans *parent;       /* multilevel transaction support */
-       backend_stack stk;
-} sql_trans;
-
 typedef struct sql_schema {
        sql_base base;
        sqlid auth_id;
@@ -276,9 +256,33 @@ typedef struct sql_schema {
        list *triggers;         /* useful within a table */
 
        char *internal;         /* optional internal module name */
-       sql_trans *tr;
+       //sql_trans *tr;
 } sql_schema;
 
+typedef struct sql_catalog {
+       changeset schemas;
+} sql_catalog;
+
+typedef struct sql_trans {
+       char *name;
+       int stime;              /* start of transaction */
+       int wstime;             /* first write transaction time stamp */
+       int wtime;              /* timestamp of latest write performed in 
transaction*/
+       int schema_number;      /* schema timestamp */
+       int schema_updates;     /* set on schema changes */
+       int active;             /* active transaction */
+       int status;             /* status of the last query */
+       list *dropped;          /* protection against recursive cascade action*/
+       list *moved_tables;
+
+       sql_catalog *cat;
+       sql_schema *tmp;        /* each session has its own tmp schema */
+       sql_allocator *sa;      /* transaction allocator */
+
+       struct sql_trans *parent;       /* multilevel transaction support */
+       backend_stack stk;
+} sql_trans;
+
 typedef enum sql_class {
        EC_ANY,
        EC_TABLE,
@@ -702,6 +706,7 @@ typedef struct res_table {
 } res_table;
 
 typedef struct sql_session {
+       sql_allocator *sa;
        sql_trans *tr;          /* active transaction */
 
        char *schema_name; /* transaction's schema name */
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1500,6 +1500,9 @@ copyfrom(sql_query *query, dlist *qname,
        assert(!nr_offset || nr_offset->h->type == type_lng);
        assert(!nr_offset || nr_offset->h->next->type == type_lng);
 
+       if (locked)
+               locked = 0;
+
        if (strstr(rsep, "\r\n") != NULL)
                return sql_error(sql, 02, SQLSTATE(42000)
                                "COPY INTO: record separator contains '\\r\\n' 
but "
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -358,7 +358,7 @@ mvc_init(sql_allocator *pa, int debug, s
        }
 
        //as the sql_parser is not yet initialized in the storage, we determine 
the sql type of the sql_parts here
-       for (node *n = m->session->tr->schemas.set->h; n; n = n->next) {
+       for (node *n = m->session->tr->cat->schemas.set->h; n; n = n->next) {
                sql_schema *ss = (sql_schema*) n->data;
                if (ss->tables.set) {
                        for (node *nn = ss->tables.set->h; nn; nn = nn->next) {
@@ -762,7 +762,7 @@ mvc_create(sql_allocator *pa, int client
        m->cascade_action = NULL;
 
        store_lock();
-       m->session = sql_session_create(1 /*autocommit on*/);
+       m->session = sql_session_create(m->pa, 1 /*autocommit on*/);
        store_unlock();
        if (!m->session) {
                qc_destroy(m->qc);
diff --git a/sql/server/sql_privileges.c b/sql/server/sql_privileges.c
--- a/sql/server/sql_privileges.c
+++ b/sql/server/sql_privileges.c
@@ -723,18 +723,14 @@ mvc_set_schema(mvc *m, char *schema)
 {
        int ret = 0;
        sql_schema *s = find_sql_schema(m->session->tr, schema);
-       char* new_schema_name = _STRDUP(schema);
+       char* new_schema_name = sa_strdup(m->session->sa, schema);
 
        if (s && new_schema_name) {
-               if (m->session->schema_name)
-                       _DELETE(m->session->schema_name);
                m->session->schema_name = new_schema_name;
                m->type = Q_SCHEMA;
                if (m->session->tr->active)
                        m->session->schema = s;
                ret = 1;
-       } else if (new_schema_name) {
-               _DELETE(new_schema_name);
        }
        return ret;
 }
diff --git a/sql/storage/bat/bat_storage.c b/sql/storage/bat/bat_storage.c
--- a/sql/storage/bat/bat_storage.c
+++ b/sql/storage/bat/bat_storage.c
@@ -2272,7 +2272,7 @@ static int
        int ok = LOG_OK, tchanges = 0;
        node *sn;
 
-       for(sn = tr->schemas.set->h; sn && ok == LOG_OK; sn = sn->next) {
+       for(sn = tr->cat->schemas.set->h; sn && ok == LOG_OK; sn = sn->next) {
                int schanges = 0;
                sql_schema *s = sn->data;
 
@@ -2847,6 +2847,7 @@ update_table(sql_trans *tr, sql_table *f
        if (ok == LOG_OK && tt->idxs.set) {
                if (ot)
                        o = ot->idxs.set->h;
+               if (ft->idxs.set && tt->idxs.set)
                for (n = ft->idxs.set->h, m = tt->idxs.set->h; ok == LOG_OK && 
n && m; n = n->next, m = m->next, o=(o?o->next:NULL)) {
                        sql_idx *ci = n->data;
                        sql_idx *oi = m->data;
diff --git a/sql/storage/sql_catalog.c b/sql/storage/sql_catalog.c
--- a/sql/storage/sql_catalog.c
+++ b/sql/storage/sql_catalog.c
@@ -165,8 +165,8 @@ sql_trans_find_key(sql_trans *tr, sqlid 
        node *n, *m;
        sql_key *k = NULL;
 
-       if (tr->schemas.set) {
-               for (n = tr->schemas.set->h; n && !k; n = n->next) {
+       if (tr->cat->schemas.set) {
+               for (n = tr->cat->schemas.set->h; n && !k; n = n->next) {
                        m = find_sql_key_node(n->data, id);
                        if (m)
                                k = m->data;
@@ -193,8 +193,8 @@ sql_trans_find_idx(sql_trans *tr, sqlid 
        node *n, *m;
        sql_idx *i = NULL;
 
-       if (tr->schemas.set) {
-               for (n = tr->schemas.set->h; n && !i; n = n->next) {
+       if (tr->cat->schemas.set) {
+               for (n = tr->cat->schemas.set->h; n && !i; n = n->next) {
                        m = find_sql_idx_node(n->data, id);
                        if (m)
                                i = m->data;
@@ -245,8 +245,8 @@ sql_trans_find_table(sql_trans *tr, sqli
        node *n, *m;
        sql_table *t = NULL;
 
-       if (tr->schemas.set) {
-               for (n = tr->schemas.set->h; n && !t; n = n->next) {
+       if (tr->cat->schemas.set) {
+               for (n = tr->cat->schemas.set->h; n && !t; n = n->next) {
                        m = find_sql_table_node(n->data, id);
                        if (m)
                                t = m->data;
@@ -262,15 +262,15 @@ find_sql_sequence(sql_schema *s, const c
 }
 
 sql_schema *
-find_sql_schema(sql_trans *t, const char *sname)
+find_sql_schema(sql_trans *tr, const char *sname)
 {
-       return _cs_find_name(&t->schemas, sname);
+       return _cs_find_name(&tr->cat->schemas, sname);
 }
 
 sql_schema *
-find_sql_schema_id(sql_trans *t, sqlid id)
+find_sql_schema_id(sql_trans *tr, sqlid id)
 {
-       node *n = cs_find_id(&t->schemas, id);
+       node *n = cs_find_id(&tr->cat->schemas, id);
 
        if (n)
                return n->data;
@@ -278,9 +278,9 @@ find_sql_schema_id(sql_trans *t, sqlid i
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to