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