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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list