Changeset: 6774196d9fba for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=6774196d9fba
Modified Files:
        monetdb5/mal/mal_runtime.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_result.h
        sql/include/sql_catalog.h
        sql/storage/bat/res_table.c
        sql/storage/sql_storage.h
Branch: queryid2
Log Message:

queryid re-implementation


diffs (287 lines):

diff --git a/monetdb5/mal/mal_runtime.c b/monetdb5/mal/mal_runtime.c
--- a/monetdb5/mal/mal_runtime.c
+++ b/monetdb5/mal/mal_runtime.c
@@ -82,6 +82,7 @@ runtimeProfileInit(Client cntxt, MalBlkP
        // add new invokation
        QRYqueue[i].mb = mb;    
        QRYqueue[i].tag = qtag++;
+       mb->tag = QRYqueue[i].tag;
        QRYqueue[i].stk = stk;                          // for status pause 
'p'/running '0'/ quiting 'q'
        QRYqueue[i].start = (lng)time(0);
        QRYqueue[i].runtime = mb->runtime;      // the estimated execution time
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
@@ -1705,7 +1705,7 @@ mvc_result_set_wrap( Client cntxt, MalBl
        b = BATdescriptor(bid);
        if ( b == NULL)
                throw(MAL,"sql.resultset","Failed to access order column");
-       res = *res_id = mvc_result_table(m, pci->argc - (pci->retc + 5), 1, b);
+       res = *res_id = mvc_result_table(m, mb->tag, pci->argc - (pci->retc + 
5), 1, b);
        if (res < 0)
                msg = createException(SQL, "sql.resultSet", "failed");
        BBPunfix(b->batCacheid);
@@ -1796,7 +1796,7 @@ mvc_export_table_wrap( Client cntxt, Mal
        order = BATdescriptor(bid);
        if ( order == NULL)
                throw(MAL,"sql.resultset","Failed to access order column");
-       res = *res_id = mvc_result_table(m, pci->argc - (pci->retc + 11), 1, 
order);
+       res = *res_id = mvc_result_table(m, mb->tag, pci->argc - (pci->retc + 
11), 1, order);
        t = m->results;
        if (res < 0){
                msg = createException(SQL, "sql.resultSet", "failed");
@@ -1895,7 +1895,7 @@ mvc_row_result_wrap( Client cntxt, MalBl
                return msg;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
-       res = *res_id = mvc_result_table(m, pci->argc - (pci->retc + 5), 1, 
NULL);
+       res = *res_id = mvc_result_table(m, mb->tag, pci->argc - (pci->retc + 
5), 1, NULL);
 
        tbl = BATdescriptor(tblId);
        atr = BATdescriptor(atrId);
@@ -1970,7 +1970,7 @@ mvc_export_row_wrap( Client cntxt, MalBl
                return msg;
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
-       res = *res_id = mvc_result_table(m, pci->argc - (pci->retc + 11), 1, 
NULL);
+       res = *res_id = mvc_result_table(m, mb->tag, pci->argc - (pci->retc + 
11), 1, NULL);
 
        t = m->results;
        if (res < 0){
@@ -2071,7 +2071,7 @@ mvc_table_result_wrap(Client cntxt, MalB
        if ((order = BATdescriptor(*order_bid)) == NULL) {
                throw(SQL, "sql.resultSet", "Cannot access descriptor");
        }
-       *res_id = mvc_result_table(m, *nr_cols, *qtype, order);
+       *res_id = mvc_result_table(m, mb->tag, *nr_cols, *qtype, order);
        if (*res_id < 0)
                res = createException(SQL, "sql.resultSet", "failed");
        BBPunfix(order->batCacheid);
@@ -2203,7 +2203,7 @@ mvc_affected_rows_wrap(Client cntxt, Mal
        assert(mtype == TYPE_lng);
        nr = *getArgReference_lng(stk, pci, 2);
        b = cntxt->sqlcontext;
-       error = mvc_export_affrows(b, b->out, nr, "");
+       error = mvc_export_affrows(b, b->out, nr, "", mb->tag);
        if (error)
                throw(SQL, "sql.affectedRows", "failed");
        return MAL_SUCCEED;
@@ -2301,12 +2301,11 @@ mvc_scalar_value_wrap(Client cntxt, MalB
        str *type = getArgReference_str(stk, pci, 3);
        int *digits = getArgReference_int(stk, pci, 4);
        int *scale = getArgReference_int(stk, pci, 5);
-       int *eclass = getArgReference_int(stk, pci, 6);
        ptr p = getArgReference(stk, pci, 7);
        int mtype = getArgType(mb, pci, 7);
        str msg;
        backend *b = NULL;
-
+       int res_id;
        (void) mb;              /* NOT USED */
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
@@ -2315,13 +2314,14 @@ mvc_scalar_value_wrap(Client cntxt, MalB
                p = *(ptr *) p;
 
        // scalar values are single-column result sets
-       mvc_result_table(b->mvc, 1, 1, NULL);
+       res_id = mvc_result_table(b->mvc, mb->tag, 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)
+       if (mvc_export_result(b, b->out, res_id) < 0) {
                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
@@ -505,7 +505,6 @@ SQLstatementIntern(Client c, str *expr, 
                        sql->out = NULL;        /* no output stream */
                if (execute)
                        msg = SQLrun(c,be,m);
-
                MSresetInstructions(c->curprg->def, oldstop);
                freeVariables(c, c->curprg->def, NULL, oldvtop);
 
@@ -521,7 +520,7 @@ SQLstatementIntern(Client c, str *expr, 
                                int ncol = 0;
                                res_table *res;
                                for (n = r->exps->h; n; n = n->next) ncol++;
-                               res = res_table_create(m->session->tr, 
m->result_id++, ncol, 1, NULL, NULL);
+                               res = res_table_create(m->session->tr, 
m->result_id++, 0, ncol, 1, NULL, NULL);
                                for (n = r->exps->h; n; n = n->next) {
                                        const char *name, *rname;
                                        sql_exp *e = n->data;
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
@@ -1583,55 +1583,6 @@ export_length(stream *s, int mtype, int 
 }
 
 int
-mvc_export_value(backend *b, stream *s, int qtype, str tn, str cn, str type, 
int d, int sc, int eclass, ptr p, int mtype, str w, str ns)
-{
-       mvc *m = b->mvc;
-       char *buf = NULL;
-       int len = 0;
-       int ok = 1;
-       char *rsep = "\t]\n";
-       int csv = (b->output_format == OFMT_CSV);
-       int json = (b->output_format == OFMT_JSON);
-
-#ifdef NDEBUG
-       (void) qtype;           /* pacify compiler in case asserts are disabled 
*/
-#endif
-       assert(qtype == Q_TABLE);
-
-       if (csv && 
-          (mnstr_write(s, "&1 0 1 1 1\n", 11, 1) != 1 ||
-               /* fallback to default tuplecount (1) and id (0) */
-               /* TODO first header name then values */
-           mnstr_write(s, "% ", 2, 1) != 1 || 
-           mnstr_write(s, tn, strlen(tn), 1) != 1 || 
-           mnstr_write(s, " # table_name\n% ", 16, 1) != 1 || 
-           mnstr_write(s, cn, strlen(cn), 1) != 1 ||
-           mnstr_write(s, " # name\n% ", 10, 1) != 1 ||
-           mnstr_write(s, type, strlen(type), 1) != 1 ||
-           mnstr_write(s, " # type\n% ", 10, 1) != 1 ||
-           !export_length(s, mtype, eclass, d, sc, has_tz(eclass, type), 0, p) 
||
-           mnstr_write(s, " # length\n[ ", 12, 1) != 1))
-               ok = 0; 
-       if (ok) {
-               if (json) {
-                       mnstr_write(s, cn, strlen(cn), 1);
-                       mnstr_write(s, ": ", 2, 1);
-               }
-               ok = export_value(m, s, eclass, type, d, sc, p, mtype, &buf, 
&len, ns);
-       }
-
-       if (ok && !json)
-               ok = (mnstr_write(s, rsep, strlen(rsep), 1) == 1);
-
-       if (buf)
-               _DELETE(buf);
-
-       if (ok)
-               ok = mvc_export_warning(s, w);
-       return ok;
-}
-
-int
 mvc_export_operation(backend *b, stream *s, str w)
 {
        mvc *m = b->mvc;
@@ -1656,7 +1607,7 @@ mvc_export_operation(backend *b, stream 
 }
 
 int
-mvc_export_affrows(backend *b, stream *s, lng val, str w)
+mvc_export_affrows(backend *b, stream *s, lng val, str w, oid query_id)
 {
        mvc *m = b->mvc;
        /* if we don't have a stream, nothing can go wrong, so we return
@@ -1670,7 +1621,9 @@ mvc_export_affrows(backend *b, stream *s
 
        m->rowcnt = val;
        stack_set_number(m, "rowcnt", m->rowcnt);
-       if (mnstr_write(s, "&2 ", 3, 1) != 1 || !mvc_send_lng(s, val) || 
mnstr_write(s, " ", 1, 1) != 1 || !mvc_send_lng(s, m->last_id) || 
mnstr_write(s, "\n", 1, 1) != 1)
+       if (mnstr_write(s, "&2 ", 3, 1) != 1 || !mvc_send_lng(s, val) || 
mnstr_write(s, " ", 1, 1) != 1
+                       || !mvc_send_lng(s, m->last_id) || mnstr_write(s, " ", 
1, 1) != 1
+                       || !mvc_send_lng(s, (lng) query_id) || mnstr_write(s, 
"\n", 1, 1) != 1)
                return -1;
        if (mvc_export_warning(s, w) != 1)
                return -1;
@@ -1730,6 +1683,10 @@ mvc_export_head(backend *b, stream *s, i
        if (!mvc_send_int(s, (m->reply_size >= 0 && (BUN) m->reply_size < 
count) ? m->reply_size : (int) count))
                return -1;
 
+       // export query id
+       if (mnstr_write(s, " ", 1, 1) != 1 || !mvc_send_lng(s, (lng) 
t->query_id))
+               return -1;
+
        if (mnstr_write(s, "\n% ", 3, 1) != 1)
                return -1;
        for (i = 0; i < t->nr_cols; i++) {
@@ -1959,9 +1916,9 @@ mvc_export_chunk(backend *b, stream *s, 
 
 
 int
-mvc_result_table(mvc *m, int nr_cols, int type, BAT *order)
+mvc_result_table(mvc *m, oid query_id, int nr_cols, int type, BAT *order)
 {
-       res_table *t = res_table_create(m->session->tr, m->result_id++, 
nr_cols, type, m->results, order);
+       res_table *t = res_table_create(m->session->tr, m->result_id++, 
query_id, nr_cols, type, m->results, order);
        m->results = t;
        return t->id;
 }
diff --git a/sql/backends/monet5/sql_result.h b/sql/backends/monet5/sql_result.h
--- a/sql/backends/monet5/sql_result.h
+++ b/sql/backends/monet5/sql_result.h
@@ -17,9 +17,8 @@
 #include <sql_qc.h>
 #include <sql_parser.h>                /* sql_error */
 
-extern int mvc_export_affrows(backend *b, stream *s, lng val, str w);
+extern int mvc_export_affrows(backend *b, stream *s, lng val, str w, oid 
query_id);
 extern int mvc_export_operation(backend *b, stream *s, str w);
-extern int mvc_export_value(backend *b, stream *s, int qtype, str tn, str cn, 
str type, int d, int sc, int eclass, ptr p, int mtype, str w, str ns);
 extern int mvc_export_result(backend *b, stream *s, int res_id);
 extern int mvc_export_head(backend *b, stream *s, int res_id, int only_header);
 extern int mvc_export_chunk(backend *b, stream *s, int res_id, BUN offset, BUN 
nr);
@@ -27,7 +26,7 @@ extern int mvc_export_chunk(backend *b, 
 extern int mvc_export_prepare(mvc *c, stream *s, cq *q, str w);
 
 extern str mvc_import_table(Client cntxt, BAT ***bats, mvc *c, bstream *s, 
sql_table *t, char *sep, char *rsep, char *ssep, char *ns, lng nr, lng offset, 
int locked, int best);
-extern int mvc_result_table(mvc *m, int nr_cols, int type, BAT *order);
+extern int mvc_result_table(mvc *m, oid query_id, int nr_cols, int type, BAT 
*order);
 
 extern int mvc_result_column(mvc *m, char *tn, char *name, char *typename, int 
digits, int scale, BAT *b);
 extern int mvc_result_value(mvc *m, char *tn, char *name, char *typename, int 
digits, int scale, ptr *p, int mtype);
diff --git a/sql/include/sql_catalog.h b/sql/include/sql_catalog.h
--- a/sql/include/sql_catalog.h
+++ b/sql/include/sql_catalog.h
@@ -520,6 +520,7 @@ typedef struct res_col {
 
 typedef struct res_table {
        int id;
+       oid query_id;
        int query_type;
        int nr_cols;
        int cur_col;
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
@@ -24,14 +24,14 @@ bat_decref(bat bid)
 
 
 res_table *
-res_table_create(sql_trans *tr, int res_id, int nr_cols, int type, res_table 
*next, void *O)
+res_table_create(sql_trans *tr, int res_id, oid query_id, int nr_cols, int 
type, res_table *next, void *O)
 {
        BAT *order = (BAT*)O;
        res_table *t = ZNEW(res_table);
 
        (void) tr;
        t->id = res_id;
-
+       t->query_id = query_id;
        t->query_type = type;
        t->nr_cols = nr_cols;
        t->cur_col = 0;
diff --git a/sql/storage/sql_storage.h b/sql/storage/sql_storage.h
--- a/sql/storage/sql_storage.h
+++ b/sql/storage/sql_storage.h
@@ -312,7 +312,7 @@ sqlstore_export logger_functions logger_
 
 /* we need to add an interface for result_tables later */
 
-extern res_table *res_table_create(sql_trans *tr, int res_id, int nr_cols, int 
querytype, res_table *next, void *order);
+extern res_table *res_table_create(sql_trans *tr, int res_id, oid query_id, 
int nr_cols, int querytype, res_table *next, void *order);
 extern 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 
*v);
 
 extern void res_table_destroy(res_table *t);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to