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