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