Changeset: fd36be23fae0 for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/fd36be23fae0 Modified Files: sql/backends/monet5/sql_statement.c sql/server/rel_multiset.c Branch: nested Log Message:
initial version of insert from json string diffs (62 lines): 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 @@ -3981,10 +3981,8 @@ static stmt * stmt_from_json(backend *be, stmt *v, stmt *sel, sql_subtype *t) { (void)sel; - int nrcols = composite_type_resultsize(t); - printf("%d\n", nrcols); InstrPtr q = newStmtArgs(be->mb, "sql", "from_json", nrcols + 2); if (q == NULL) goto bailout; diff --git a/sql/server/rel_multiset.c b/sql/server/rel_multiset.c --- a/sql/server/rel_multiset.c +++ b/sql/server/rel_multiset.c @@ -209,8 +209,19 @@ fm_join(visitor *v, sql_rel *rel) static sql_rel * fm_project(visitor *v, sql_rel *rel) { - if ((!rel->l || rel->card == CARD_ATOM) && rel->exps) { /* check for type multiset */ + sql_rel *l = rel->l; + + if ((!l || (l && rel->card == CARD_ATOM && is_project(l->op))) && rel->exps) { /* check for type multiset */ bool needed = false; + for(node *n = rel->exps->h; n; n = n->next) { + sql_exp *e = n->data; + sql_subtype *t = exp_subtype(e); + needed = (t && t->multiset); + if (needed && is_intern(e)) { + needed = false; + break; + } + } for(node *n = rel->exps->h; n && !needed; n = n->next) { sql_subtype *t = exp_subtype(n->data); needed = (t && t->multiset); @@ -285,6 +296,8 @@ fm_project(visitor *v, sql_rel *rel) sql_subtype *t = exp_subtype(e); if (t->multiset) { sql_exp *rowid = exps_bind_column(exps, exp_name(e), NULL, NULL, 0); + if (!rowid) + rowid = exps_bind_column(exps, "rowid", NULL, NULL, 0); rowid = exp_ref(v->sql, rowid); append(nexps, rowid); for(node *f = t->type->d.fields->h; f; f = f->next) { @@ -294,10 +307,14 @@ fm_project(visitor *v, sql_rel *rel) append(nexps, mse); } sql_exp *msid = exps_bind_column(exps, "id", NULL, NULL, 0); + if (!msid) + msid = exps_bind_column(exps, "multisetid", NULL, NULL, 0); msid = exp_ref(v->sql, msid); append(nexps, msid); if (t->multiset == MS_ARRAY) { sql_exp *msnr = exps_bind_column(exps, "nr", NULL, NULL, 0); + if (!msnr) + msnr = exps_bind_column(exps, "multisetnr", NULL, NULL, 0); msnr = exp_ref(v->sql, msnr); append(nexps, msnr); } _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org