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