Changeset: 8c41694f7605 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=8c41694f7605 Modified Files: gdk/gdk_private.h monetdb5/modules/atoms/Makefile.ag sql/backends/monet5/rel_bin.c sql/backends/monet5/sql_statement.c sql/backends/monet5/sql_statement.h sql/scripts/Makefile.ag sql/server/rel_select.c Branch: graph0 Log Message:
MAL entry point diffs (171 lines): diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -155,8 +155,9 @@ void BBPdump(void); /* never called: fo __attribute__((__visibility__("hidden"))); __hidden Hash *HASHnew(Heap *hp, int tpe, BUN size, BUN mask, BUN count) __attribute__((__visibility__("hidden"))); -__hidden gdk_return HEAPalloc(Heap *h, size_t nitems, size_t itemsize) - __attribute__((__visibility__("hidden"))); +//__hidden gdk_return HEAPalloc(Heap *h, size_t nitems, size_t itemsize) +// __attribute__((__visibility__("hidden"))); +gdk_return HEAPalloc(Heap *h, size_t nitems, size_t itemsize); __hidden gdk_return HEAPcopy(Heap *dst, Heap *src) __attribute__((__visibility__("hidden"))); __hidden int HEAPdelete(Heap *h, const char *o, const char *ext) diff --git a/monetdb5/modules/atoms/Makefile.ag b/monetdb5/modules/atoms/Makefile.ag --- a/monetdb5/modules/atoms/Makefile.ag +++ b/monetdb5/modules/atoms/Makefile.ag @@ -23,6 +23,7 @@ lib_atoms = { json.c json.h \ mcurl.c \ mtime.c mtime.h \ + nested.c \ str.c str.h \ streams.c streams.h \ url.c url.h \ @@ -42,6 +43,7 @@ headers_mal = { json.mal \ mcurl.mal \ mtime.mal \ + nested.mal \ streams.mal \ str.mal \ url.mal \ diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c --- a/sql/backends/monet5/rel_bin.c +++ b/sql/backends/monet5/rel_bin.c @@ -495,7 +495,11 @@ exp_bin(backend *be, sql_exp *e, stmt *l as = const_column(be, as); } } - s = stmt_aggr(be, as, grp, ext, a, 1, need_no_nil(e) /* ignore nil*/ ); + if(strcmp(a->aggr->base.name, "nest") == 0 && strcmp(a->aggr->s->base.name, "sys") == 0){ + s = stmt_nest(be, as, grp, ext, cnt, a); + } else { + s = stmt_aggr(be, as, grp, ext, a, 1, need_no_nil(e) /* ignore nil*/ ); + } if (find_prop(e->p, PROP_COUNT)) /* propagate count == 0 ipv NULL in outer joins */ s->flag |= OUTER_ZERO; } break; diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -2878,6 +2878,36 @@ stmt_aggr(backend *be, stmt *op1, stmt * return NULL; } +stmt *stmt_nest(backend *be, stmt *ops, stmt *grp, stmt *ext, stmt *histo, sql_subaggr *aggr){ + InstrPtr q = NULL; + + (void) ext; // not used ftm + assert(ops->type == st_list); + + q = newStmt(be->mb, aggr->aggr->mod, aggr->aggr->imp); + if(!q) return NULL; + setVarType(be->mb, getArg(q, 0), newBatType( ((sql_subtype*) aggr->res->h->data)->type->localtype )); + setVarUDFtype(be->mb, getArg(q, 0)); // TODO: what is this? + q = pushArgument(be->mb, q, grp->nr); + q = pushArgument(be->mb, q, histo->nr); + + if(q) { // same as stmt_aggr + stmt *s = stmt_create(be->mvc->sa, st_aggr); + s->op1 = ops; + s->op2 = grp; + s->op3 = histo; + s->nrcols = 1; + s->key = s->aggr = true; + s->flag = 1; + s->op4.aggrval = aggr; + s->nr = getDestVar(q); + s->q = q; + return s; + } + return NULL; + +} + static stmt * stmt_alias_(backend *be, stmt *op1, const char *tname, const char *alias) { diff --git a/sql/backends/monet5/sql_statement.h b/sql/backends/monet5/sql_statement.h --- a/sql/backends/monet5/sql_statement.h +++ b/sql/backends/monet5/sql_statement.h @@ -217,6 +217,7 @@ extern stmt *stmt_binop(backend *be, stm extern stmt *stmt_Nop(backend *be, stmt *ops, sql_subfunc *op); extern stmt *stmt_func(backend *be, stmt *ops, const char *name, sql_rel *imp, int f_union); extern stmt *stmt_aggr(backend *be, stmt *op1, stmt *grp, stmt *ext, sql_subaggr *op, int reduce, int no_nil); +extern stmt *stmt_nest(backend *be, stmt *ops, stmt *grp, stmt *ext, stmt *histo, sql_subaggr *aggr); extern stmt *stmt_alias(backend *be, stmt *op1, const char *tname, const char *name); diff --git a/sql/scripts/Makefile.ag b/sql/scripts/Makefile.ag --- a/sql/scripts/Makefile.ag +++ b/sql/scripts/Makefile.ag @@ -26,6 +26,7 @@ headers_sql = { 25_debug.sql \ 26_sysmon.sql \ 27_rejects.sql \ + 35_nested.sql \ 39_analytics.sql \ 40_json.sql \ 41_md5sum.sql \ 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 @@ -3237,33 +3237,41 @@ rel_nop(mvc *sql, sql_rel **rel, symbol dnode *ops = l->next->data.lval->h; list *exps = new_exp_list(sql->sa); list *tl = sa_list(sql->sa); - sql_subfunc *f = NULL; sql_subtype *obj_type = NULL; char *fname = qname_fname(l->data.lval); char *sname = qname_schema(l->data.lval); sql_schema *s = sql->session->schema; exp_kind iek = {type_value, card_column, FALSE}; - - for (; ops; ops = ops->next, nr_args++) { + bool bind_error = false; + + for (; ops && !bind_error; ops = ops->next, nr_args++) { sql_exp *e = rel_value_exp(sql, rel, ops->data.sym, fs, iek); sql_subtype *tpe; - if (!e) - return NULL; - append(exps, e); - tpe = exp_subtype(e); - if (!nr_args) - obj_type = tpe; - append(tl, tpe); + if (!e) { + bind_error = true; + } else { + append(exps, e); + tpe = exp_subtype(e); + if (!nr_args) + obj_type = tpe; + append(tl, tpe); + } } if (sname) s = mvc_bind_schema(sql, sname); - /* first try aggregate */ - f = find_func(sql, s, fname, nr_args, F_AGGR, NULL); - if (f) + /* try again with an aggregate */ + if (bind_error) { + sql_subfunc *f = find_func(sql, s, fname, nr_args, F_AGGR, NULL); + if (!f) return NULL; // no match in the aggr~ world => error + // reset the error + sql->session->status = 0; + sql->errstr[0] = '\0'; return _rel_aggr(sql, rel, 0, s, fname, l->next->data.lval->h, fs); - return _rel_nop(sql, s, fname, tl, exps, obj_type, nr_args, ek); + } else { + return _rel_nop(sql, s, fname, tl, exps, obj_type, nr_args, ek); + } } _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list