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

Reply via email to