Changeset: d293d01edc48 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=d293d01edc48 Modified Files: sql/backends/monet5/sql.c sql/server/rel_exp.h sql/server/rel_psm.c sql/server/rel_select.c Branch: default Log Message:
Merge with Jul2015 branch. diffs (100 lines): 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 @@ -3372,7 +3372,7 @@ mvc_import_table_wrap(Client cntxt, MalB { backend *be; BAT **b = NULL; - unsigned char *tsep = NULL, *rsep = NULL, *ssep = NULL, *ns = NULL; + unsigned char *tsep = NULL, *rsep = NULL, *ssep = NULL, *ns = NULL, *fn = NULL; ssize_t len = 0; sql_table *t = *(sql_table **) getArgReference(stk, pci, pci->retc + 0); unsigned char **T = (unsigned char **) getArgReference_str(stk, pci, pci->retc + 1); @@ -3429,7 +3429,17 @@ mvc_import_table_wrap(Client cntxt, MalB if (!fname) { msg = mvc_import_table(cntxt, &b, be->mvc, be->mvc->scanner.rs, t, (char *) tsep, (char *) rsep, (char *) ssep, (char *) ns, *sz, *offset, *locked, *besteffort); } else { - ss = open_rastream(*fname); + len = strlen(*fname); + if ((fn = GDKmalloc(len + 1)) == NULL) { + GDKfree(ns); + GDKfree(tsep); + GDKfree(rsep); + GDKfree(ssep); + throw(MAL, "sql.copy_from", MAL_MALLOC_FAIL); + } + GDKstrFromStr(fn, (unsigned char*)*fname, len); + + ss = open_rastream((const char *) fn); if (!ss || mnstr_errnr(ss)) { int errnr = mnstr_errnr(ss); if (ss) @@ -3438,9 +3448,11 @@ mvc_import_table_wrap(Client cntxt, MalB GDKfree(rsep); GDKfree(ssep); GDKfree(ns); - msg = createException(IO, "sql.copy_from", "could not open file '%s': %s", *fname, strerror(errnr)); + msg = createException(IO, "sql.copy_from", "could not open file '%s': %s", fn, strerror(errnr)); + GDKfree(fn); return msg; } + GDKfree(fn); #if SIZEOF_VOID_P == 4 s = bstream_create(ss, 0x20000); #else diff --git a/sql/server/rel_exp.h b/sql/server/rel_exp.h --- a/sql/server/rel_exp.h +++ b/sql/server/rel_exp.h @@ -13,6 +13,8 @@ #include "sql_mvc.h" #include "sql_atom.h" +#define ERR_AMBIGUOUS 050000 + #define new_exp_list(sa) sa_list(sa) #define exp2list(sa,e) append(sa_list(sa),e) diff --git a/sql/server/rel_psm.c b/sql/server/rel_psm.c --- a/sql/server/rel_psm.c +++ b/sql/server/rel_psm.c @@ -602,6 +602,14 @@ sequential_block (mvc *sql, sql_subtype return l; } +static int +arg_cmp(void *A, void *N) +{ + sql_arg *a = A; + char *name = N; + return strcmp(a->name, name); +} + static list * result_type(mvc *sql, symbol *res) { @@ -618,6 +626,9 @@ result_type(mvc *sql, symbol *res) for(;n; n = n->next->next) { sql_subtype *ct = &n->next->data.typeval; + if (list_find(types, n->data.sval, &arg_cmp) != NULL) + return sql_error(sql, ERR_AMBIGUOUS, "CREATE FUNC: identifier '%s' ambiguous", n->data.sval); + a = sql_create_arg(sql->sa, n->data.sval, ct, ARG_OUT); list_append(types, a); } diff --git a/sql/server/rel_select.c b/sql/server/rel_select.c --- a/sql/server/rel_select.c +++ b/sql/server/rel_select.c @@ -3027,6 +3027,12 @@ rel_nop(mvc *sql, sql_rel **rel, symbol } if (sname) s = mvc_bind_schema(sql, sname); + + /* first try aggregate */ + f = find_func(sql, s, fname, nr_args, F_AGGR, NULL); + if (f) + return _rel_aggr(sql, rel, 0, s, fname, l->next->data.lval->h, fs); + f = bind_func_(sql, s, fname, tl, type); if (f) { return exp_op(sql->sa, exps, f); _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list