Changeset: b496d502ec4e for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b496d502ec4e Modified Files: monetdb5/mal/mal_module.c sql/backends/monet5/sql_cat.c sql/backends/monet5/sql_gencode.c Branch: Nov2019 Log Message:
Merge with Apr2019 branch. diffs (75 lines): diff --git a/monetdb5/mal/mal_module.c b/monetdb5/mal/mal_module.c --- a/monetdb5/mal/mal_module.c +++ b/monetdb5/mal/mal_module.c @@ -117,7 +117,7 @@ Module getModule(str name) { int index = getModuleIndex(name); Module m = moduleIndex[index]; while(m) { - if (strcmp(name, m->name) == 0) + if (name == m->name) return m; m = m->link; } 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 @@ -782,10 +782,15 @@ create_func(mvc *sql, char *sname, char s = cur_schema(sql); nf = mvc_create_func(sql, NULL, s, f->base.name, f->ops, f->res, f->type, f->lang, f->mod, f->imp, f->query, f->varres, f->vararg, f->system); assert(nf); - if (nf->lang == FUNC_LANG_INT || nf->lang == FUNC_LANG_MAL) { /* FUNC_LANG_INT shouldn't be reachable, but leave it here */ + switch (nf->lang) { + case FUNC_LANG_INT: + case FUNC_LANG_MAL: /* shouldn't be reachable, but leave it here */ if (!backend_resolve_function(sql, nf)) throw(SQL,"sql.create_func", SQLSTATE(3F000) "CREATE %s%s: external name %s.%s not bound", KF, F, nf->mod, nf->base.name); - } else if (nf->lang == FUNC_LANG_SQL) { + if (nf->query == NULL) + break; + /* fall through */ + case FUNC_LANG_SQL: { char *buf; sql_rel *r = NULL; sql_allocator *sa = sql->sa; @@ -825,6 +830,9 @@ create_func(mvc *sql, char *sname, char sa_destroy(sql->sa); sql->sa = sa; } + default: + break; + } return MAL_SUCCEED; } 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 @@ -855,19 +855,19 @@ backend_call(backend *be, Client c, cq * int monet5_resolve_function(ptr M, sql_func *f) { + str mname = getName(f->mod), fname = getName(f->imp); (void) M; - for (Module m = getModule(f->mod); m; m = m->link) { - if (strcmp(m->name, f->mod) == 0) { - Symbol s = m->space[(int) (getSymbolIndex(f->imp))]; - for (; s; s = s->peer) { - InstrPtr sig = getSignature(s); - int argc = sig->argc - sig->retc; + if (!mname || !fname) + return 0; - if (strcmp(s->name, f->imp) == 0 && ((!f->ops && argc == 0) || list_length(f->ops) == argc || (sig->varargs & VARARGS) == VARARGS)) - return 1; + for (Module m = getModule(mname); m; m = m->link) { + for (Symbol s = findSymbolInModule(m, fname); s; s = s->peer) { + InstrPtr sig = getSignature(s); + int argc = sig->argc - sig->retc; - } + if ((!f->ops && argc == 0) || list_length(f->ops) == argc || (sig->varargs & VARARGS) == VARARGS) + return 1; } } return 0; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list