Changeset: 55fd678c6070 for MonetDB URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=55fd678c6070 Modified Files: monetdb5/modules/mal/mal_mapi.c sql/backends/monet5/mal_backend.h sql/backends/monet5/sql.c sql/backends/monet5/sql_execute.c sql/backends/monet5/sql_result.c sql/backends/monet5/sql_scenario.c sql/server/sql_qc.c sql/storage/bat/res_table.c Branch: pyapi Log Message:
Merge with embedded branch. diffs (184 lines): diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c --- a/monetdb5/modules/mal/mal_mapi.c +++ b/monetdb5/modules/mal/mal_mapi.c @@ -443,6 +443,11 @@ SERVERlisten(int *Port, str *Usockfile, accept_any = GDKgetenv_istrue("mapi_open"); autosense = GDKgetenv_istrue("mapi_autosense"); + /* early way out, we do not want to listen on any port when running in embedded mode */ + if (GDKgetenv_istrue("mapi_disable")) { + return MAL_SUCCEED; + } + psock = GDKmalloc(sizeof(SOCKET) * 3); if (psock == NULL) throw(MAL,"mal_mapi.listen", MAL_MALLOC_FAIL); diff --git a/sql/backends/monet5/mal_backend.h b/sql/backends/monet5/mal_backend.h --- a/sql/backends/monet5/mal_backend.h +++ b/sql/backends/monet5/mal_backend.h @@ -26,7 +26,8 @@ typedef enum output_format { OFMT_CSV = 0, - OFMT_JSON = 1 + OFMT_JSON = 1, + OFMT_NONE = 3 } ofmt; typedef struct backend { 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 @@ -3166,6 +3166,13 @@ mvc_scalar_value_wrap(Client cntxt, MalB b = cntxt->sqlcontext; if (ATOMextern(mtype)) p = *(ptr *) p; + + // scalar values are single-column result sets + mvc_result_table(b->mvc, 1, 1, NULL); + mvc_result_value(b->mvc, *tn, *cn, *type, *digits, *scale, p, mtype); + if (b->output_format == OFMT_NONE) { + return MAL_SUCCEED; + } if (b->out == NULL || mvc_export_value(b, b->out, 1, *tn, *cn, *type, *digits, *scale, *eclass, p, mtype, "", "NULL") != SQL_OK) throw(SQL, "sql.exportValue", "failed"); return MAL_SUCCEED; diff --git a/sql/backends/monet5/sql_execute.c b/sql/backends/monet5/sql_execute.c --- a/sql/backends/monet5/sql_execute.c +++ b/sql/backends/monet5/sql_execute.c @@ -85,7 +85,9 @@ SQLstatementIntern(Client c, str *expr, if (!o) throw(SQL, "SQLstatement", "Out of memory"); *o = *m; - + + /* hide query cache, this causes crashes in SQLtrans() due to uninitialized memory otherwise */ + m->qc = NULL; /* create private allocator */ m->sa = NULL; SQLtrans(m); @@ -95,6 +97,10 @@ SQLstatementIntern(Client c, str *expr, be = sql; sql = backend_create(m, c); sql->output_format = be->output_format; + if (!output) { + sql->output_format = OFMT_NONE; + } + // and do it again m->qc = NULL; m->caching = 0; m->user_id = m->role_id = USER_MONETDB; diff --git a/sql/backends/monet5/sql_result.c b/sql/backends/monet5/sql_result.c --- a/sql/backends/monet5/sql_result.c +++ b/sql/backends/monet5/sql_result.c @@ -1778,7 +1778,11 @@ mvc_export_result(backend *b, stream *s, if (!s || !t) return 0; - + + /* Proudly supporting SQLstatementIntern's output flag */ + if (b->output_format == OFMT_NONE) { + return 0; + } /* we shouldn't have anything else but Q_TABLE here */ assert(t->query_type == Q_TABLE); if (t->tsep) diff --git a/sql/backends/monet5/sql_scenario.c b/sql/backends/monet5/sql_scenario.c --- a/sql/backends/monet5/sql_scenario.c +++ b/sql/backends/monet5/sql_scenario.c @@ -178,8 +178,8 @@ SQLprelude(void *ret) tmp = SQLinit(); if (tmp != MAL_SUCCEED) return (tmp); - fprintf(stdout, "# MonetDB/SQL module loaded\n"); - fflush(stdout); /* make merovingian see this *now* */ + mnstr_printf(GDKout, "# MonetDB/SQL module loaded\n"); + mnstr_flush(GDKout); /* make merovingian see this *now* */ /* only register availability of scenarios AFTER we are inited! */ s->name = "sql"; @@ -443,13 +443,14 @@ SQLinitClient(Client c) if (m->session->tr) reset_functions(m->session->tr); /* pass through credentials of the user if not console */ - schema = monet5_user_get_def_schema(m, c->user); - if (!schema) { + if (!isAdministrator(c)) { + schema = monet5_user_get_def_schema(m, c->user); + if (!schema) { + _DELETE(schema); + throw(PERMD, "SQLinitClient", "08004!schema authorization error"); + } _DELETE(schema); - throw(PERMD, "SQLinitClient", "08004!schema authorization error"); } - _DELETE(schema); - /*expect SQL text first */ be->language = 'S'; /* Set state, this indicates an initialized client scenario */ @@ -480,7 +481,7 @@ SQLinitClient(Client c) if (fullname) { str filename = fullname; str p, n; - fprintf(stdout, "# SQL catalog created, loading sql scripts once\n"); + mnstr_printf(GDKout, "# SQL catalog created, loading sql scripts once\n"); do { p = strchr(filename, PATH_SEP); if (p) @@ -490,7 +491,7 @@ SQLinitClient(Client c) } else { n++; } - fprintf(stdout, "# loading sql script: %s\n", n); + mnstr_printf(GDKout, "# loading sql script: %s\n", n); fd = open_rastream(filename); if (p) filename = p + 1; diff --git a/sql/server/sql_qc.c b/sql/server/sql_qc.c --- a/sql/server/sql_qc.c +++ b/sql/server/sql_qc.c @@ -115,7 +115,6 @@ void qc_destroy(qc *cache) { cq *q, *n; - for (q = cache->q; q; q = n) { n = q->next; diff --git a/sql/storage/bat/res_table.c b/sql/storage/bat/res_table.c --- a/sql/storage/bat/res_table.c +++ b/sql/storage/bat/res_table.c @@ -52,6 +52,7 @@ res_col * res_col_create(sql_trans *tr, res_table *t, const char *tn, const char *name, const char *typename, int digits, int scale, int mtype, void *val) { res_col *c = t->cols + t->cur_col; + BAT *b; if (!sql_find_subtype(&c->type, typename, digits, scale)) sql_init_subtype(&c->type, sql_trans_bind_type(tr, NULL, typename), digits, scale); @@ -61,13 +62,17 @@ res_col_create(sql_trans *tr, res_table c->p = NULL; c->mtype = mtype; if (mtype == TYPE_bat) { - BAT *b = (BAT*)val; - - c->b = b->batCacheid; - bat_incref(c->b); - } else { - c->p = ATOMdup(mtype, val); + b = (BAT*)val; + } else { // wrap scalar values in BATs for result consistency + b = BATnew(TYPE_void, mtype, 0, TRANSIENT); + assert (b != NULL); + BUNappend(b, val, FALSE); + BATsetcount(b, 1); + BATseqbase(b, 0); + BATsettrivprop(b); } + c->b = b->batCacheid; + bat_incref(c->b); t->cur_col++; assert(t->cur_col <= t->nr_cols); return c; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list