Changeset: b2624915d232 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b2624915d232
Modified Files:
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_statistics.c
        sql/backends/monet5/sql_upgrades.c
        sql/include/sql_catalog.h
        sql/server/sql_mvc.c
        sql/server/sql_semantic.c
        sql/storage/objectset.c
        sql/storage/sql_catalog.c
        sql/storage/store.c
Branch: nospare
Log Message:

Avoid malloc (rather SA_NEW) for object set iterators.


diffs (truncated from 665 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -4545,8 +4545,9 @@ cascade_ukey(backend *be, stmt **updates
 {
        /* now iterate over all keys */
        sql_trans *tr = be->mvc->session->tr;
-       struct os_iter *oi = os_iterator(k->t->s->keys, tr, NULL);
-       for (sql_base *b = oi_next(oi); b; b=oi_next(oi)) {
+       struct os_iter oi;
+       os_iterator(&oi, k->t->s->keys, tr, NULL);
+       for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
                sql_key *fk = (sql_key*)b;
                sql_fkey *rk = (sql_fkey*)b;
 
@@ -5125,9 +5126,10 @@ sql_delete_ukey(backend *be, stmt *utids
        sql_subtype *lng = sql_bind_localtype("lng");
        sql_subtype *bt = sql_bind_localtype("bit");
        sql_trans *tr = be->mvc->session->tr;
-       struct os_iter *oi = os_iterator(k->t->s->keys, tr, NULL);
-
-       for (sql_base *b = oi_next(oi); b; b=oi_next(oi)) {
+       struct os_iter oi;
+
+       os_iterator(&oi, k->t->s->keys, tr, NULL);
+       for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
                sql_key *fk = (sql_key*)b;
                sql_fkey *rk = (sql_fkey*)b;
 
@@ -5309,8 +5311,9 @@ check_for_foreign_key_references(mvc *sq
                        sql_key *k = n->data;
 
                        if (k->type == ukey || k->type == pkey) {
-                               struct os_iter *oi = os_iterator(k->t->s->keys, 
tr, NULL);
-                               for (sql_base *b = oi_next(oi); b; 
b=oi_next(oi)) {
+                               struct os_iter oi;
+                               os_iterator(&oi, k->t->s->keys, tr, NULL);
+                               for (sql_base *b = oi_next(&oi); b; 
b=oi_next(&oi)) {
                                        sql_key *fk = (sql_key*)b;
                                        sql_fkey *rk = (sql_fkey*)b;
 
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
@@ -1407,8 +1407,9 @@ mvc_delta_values(Client cntxt, MalBlkPtr
                        nrows = (BUN) t->columns.set->cnt;
                }
        } else if (s->tables) {
-               struct os_iter *oi = os_iterator(s->tables, tr, NULL);
-               for (sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, s->tables, tr, NULL);
+               for (sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                        t = (sql_table *)b;
                        if (isTable(t))
                                nrows += t->columns.set->cnt;
@@ -1459,8 +1460,9 @@ mvc_delta_values(Client cntxt, MalBlkPtr
                                }
                        }
                } else if (s->tables) {
-                       struct os_iter *oi = os_iterator(s->tables, tr, NULL);
-                       for (sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+                       struct os_iter oi;
+                       os_iterator(&oi, s->tables, tr, NULL);
+                       for (sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                                t = (sql_table *)b;
                                if (isTable(t)) {
                                        cleared = 0;//(t->cleared != 0);
@@ -4377,7 +4379,7 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
        str sname = 0;
        str tname = 0;
        str cname = 0;
-       struct os_iter *si = NULL;
+       struct os_iter si = {0};
 
        if ((msg = getSQLContext(cntxt, mb, &m, NULL)) != NULL)
                return msg;
@@ -4417,16 +4419,17 @@ sql_storage(Client cntxt, MalBlkPtr mb, 
                cname = *getArgReference_str(stk, pci, pci->retc + 2);
 
        /* check for limited storage tables */
-       si = os_iterator(tr->cat->schemas, tr, NULL);
-       for (sql_base *b = oi_next(si); b; b = oi_next(si)) {
+       os_iterator(&si, tr->cat->schemas, tr, NULL);
+       for (sql_base *b = oi_next(&si); b; b = oi_next(&si)) {
                sql_schema *s = (sql_schema *) b;
                if( sname && strcmp(b->name, sname) )
                        continue;
                if (isalpha((unsigned char) b->name[0]))
                        if (s->tables) {
-                               struct os_iter *oi = os_iterator(s->tables, tr, 
NULL);
-
-                               for (sql_base *bt = oi_next(oi); bt; bt = 
oi_next(oi)) {
+                               struct os_iter oi;
+
+                               os_iterator(&oi, s->tables, tr, NULL);
+                               for (sql_base *bt = oi_next(&oi); bt; bt = 
oi_next(&oi)) {
                                        sql_table *t = (sql_table *) bt;
                                        if( tname && strcmp(bt->name, tname) )
                                                continue;
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
@@ -123,8 +123,9 @@ 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 */
-       struct os_iter *si = os_iterator(tr->cat->schemas, tr, NULL);
-       for(sql_base *b = oi_next(si); b; b = oi_next(si)) {
+       struct os_iter si;
+       os_iterator(&si, tr->cat->schemas, tr, NULL);
+       for(sql_base *b = oi_next(&si); b; b = oi_next(&si)) {
                sql_schema *s = (sql_schema *)b;
                if (!isalpha((unsigned char) s->base.name[0]))
                        continue;
@@ -132,8 +133,9 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                if (sch && strcmp(s->base.name, sch))
                        continue;
                sfnd = 1;
-               struct os_iter *oi = os_iterator(s->tables, tr, NULL);
-               for(sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, s->tables, tr, NULL);
+               for(sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                        sql_table *t = (sql_table *)b;
 
                        if (tbl && strcmp(t->base.name, tbl))
@@ -166,16 +168,17 @@ sql_analyze(Client cntxt, MalBlkPtr mb, 
                throw(SQL, "analyze", SQLSTATE(38000) "Column '%s' does not 
exist", col);
 
        sqlstore *store = tr->store;
-       si = os_iterator(tr->cat->schemas, tr, NULL);
-       for(sql_base *b = oi_next(si); b; b = oi_next(si)) {
+       os_iterator(&si, tr->cat->schemas, tr, NULL);
+       for(sql_base *b = oi_next(&si); b; b = oi_next(&si)) {
                sql_schema *s = (sql_schema *)b;
                if (!isalpha((unsigned char) b->name[0]))
                        continue;
 
                if (sch && strcmp(sch, b->name))
                        continue;
-               struct os_iter *oi = os_iterator(s->tables, tr, NULL);
-               for(sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, s->tables, tr, NULL);
+               for(sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                        sql_table *t = (sql_table *) b;
 
                        if (tbl && strcmp(b->name, tbl))
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
@@ -1031,7 +1031,7 @@ sql_update_nov2019_missing_dependencies(
        sql_allocator *old_sa = sql->sa;
        bool first = true;
        sql_trans *tr = sql->session->tr;
-       struct os_iter *si = NULL;
+       struct os_iter si;
 
        if (buf == NULL)
                throw(SQL, __func__, SQLSTATE(HY013) MAL_MALLOC_FAIL);
@@ -1044,12 +1044,13 @@ 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 */
 
-       si = os_iterator(sql->session->tr->cat->schemas, sql->session->tr, 
NULL);
-       for (sql_base *b = oi_next(si); b; oi_next(si)) {
+       os_iterator(&si, sql->session->tr->cat->schemas, sql->session->tr, 
NULL);
+       for (sql_base *b = oi_next(&si); b; oi_next(&si)) {
                sql_schema *s = (sql_schema*)b;
 
-               struct os_iter *oi = os_iterator(s->funcs, sql->session->tr, 
NULL);
-               for (sql_base *b = oi_next(oi); b; oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, s->funcs, sql->session->tr, NULL);
+               for (sql_base *b = oi_next(&oi); b; oi_next(&oi)) {
                        sql_func *f = (sql_func*)b;
 
                        if (f->query && f->lang == FUNC_LANG_SQL) {
@@ -1083,8 +1084,9 @@ sql_update_nov2019_missing_dependencies(
                        }
                }
                if (s->tables) {
-            struct os_iter *oi = os_iterator(s->tables, tr, NULL);
-            for (sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+            struct os_iter oi;
+                       os_iterator(&oi, s->tables, tr, NULL);
+            for (sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                                sql_table *t = (sql_table*) b;
 
                                if (t->query && isView(t)) {
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
@@ -222,7 +222,13 @@ typedef void *sql_store;
 struct sql_trans;
 struct sql_change;
 struct objectset;
-struct os_iter;
+struct object_node;
+struct os_iter {
+       struct objectset *os;
+       struct sql_trans *tr;
+       struct object_node *n;
+       const char *name;
+};
 
 /* transaction changes */
 typedef int (*tc_validate_fptr) (struct sql_trans *tr, struct sql_change *c, 
ulng commit_ts, ulng oldest);
@@ -241,7 +247,7 @@ extern int os_remove(struct objectset *o
 extern sql_base *os_find_name(struct objectset *os, struct sql_trans *tr, 
const char *name);
 extern sql_base *os_find_id(struct objectset *os, struct sql_trans *tr, sqlid 
id);
 /* iterating (for example for location functinos) */
-extern struct os_iter *os_iterator(struct objectset *os, struct sql_trans *tr, 
const char *name /*optional*/);
+extern void os_iterator(struct os_iter *oi, struct objectset *os, struct 
sql_trans *tr, const char *name /*optional*/);
 extern sql_base *oi_next(struct os_iter *oi);
 extern bool os_obj_intransaction(struct objectset *os, struct sql_trans *tr, 
sql_base *b);
 
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,11 +358,13 @@ 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
 
-       struct os_iter *si = os_iterator(m->session->tr->cat->schemas, 
m->session->tr, NULL);
-       for(sql_base *b = oi_next(si); b; b = oi_next(si)) {
+       struct os_iter si;
+       os_iterator(&si, m->session->tr->cat->schemas, m->session->tr, NULL);
+       for(sql_base *b = oi_next(&si); b; b = oi_next(&si)) {
                sql_schema *ss = (sql_schema*)b;
-               struct os_iter *oi = os_iterator(ss->tables, m->session->tr, 
NULL);
-               for(sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, ss->tables, m->session->tr, NULL);
+               for(sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                        sql_table *tt = (sql_table*)b;
                        if (isPartitionedByColumnTable(tt) || 
isPartitionedByExpressionTable(tt)) {
                                char *err;
diff --git a/sql/server/sql_semantic.c b/sql/server/sql_semantic.c
--- a/sql/server/sql_semantic.c
+++ b/sql/server/sql_semantic.c
@@ -344,8 +344,9 @@ os_find_func_internal(mvc *sql, struct o
        sql_ftype filt = (type == F_FUNC)?F_FILT:type;
 
        if (ff) {
-               struct os_iter *oi = os_iterator(ff, sql->session->tr, fname);
-               for (sql_base *b = oi_next(oi); b; b = oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, ff, sql->session->tr, fname);
+               for (sql_base *b = oi_next(&oi); b; b = oi_next(&oi)) {
                        sql_func *f = (sql_func*)b;
                        if (prev && prev->func != f)
                                continue;
@@ -437,8 +438,9 @@ os_bind_member_internal(mvc *sql, struct
 {
        assert(nrargs);
        if (ff) {
-               struct os_iter *oi = os_iterator(ff, sql->session->tr, fname);
-               for (sql_base *b = oi_next(oi); b; b=oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, ff, sql->session->tr, fname);
+               for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
                        sql_func *f = (sql_func*)b;
                        if (prev && prev->func != f)
                                continue;
@@ -535,8 +537,9 @@ os_bind_func__(mvc *sql, struct objectse
                input_type = ops->h->data;
 
        if (ff) {
-               struct os_iter *oi = os_iterator(ff, sql->session->tr, fname);
-               for (sql_base *b = oi_next(oi); b; b=oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, ff, sql->session->tr, fname);
+               for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
                        sql_func *f = (sql_func*)b;
 
                        if (f->type != type && f->type != filt)
@@ -595,8 +598,9 @@ os_bind_func_result_internal(mvc *sql, s
        sql_subtype *tp = sql_bind_localtype("bit");
 
        if (ff) {
-               struct os_iter *oi = os_iterator(ff, sql->session->tr, fname);
-               for (sql_base *b = oi_next(oi); b; b=oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, ff, sql->session->tr, fname);
+               for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
                        sql_func *f = (sql_func*)b;
                        sql_arg *firstres = NULL;
 
@@ -675,8 +679,9 @@ os_resolve_function_with_undefined_param
        sql_ftype filt = (type == F_FUNC)?F_FILT:type;
 
        if (ff) {
-               struct os_iter *oi = os_iterator(ff, sql->session->tr, fname);
-               for (sql_base *b = oi_next(oi); b; b=oi_next(oi)) {
+               struct os_iter oi;
+               os_iterator(&oi, ff, sql->session->tr, fname);
+               for (sql_base *b = oi_next(&oi); b; b=oi_next(&oi)) {
                        sql_func *f = (sql_func*)b;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to