Changeset: b0ed2e5e07de for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=b0ed2e5e07de
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_scenario.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/test/Tests/bogus-auto-generated-keys.stable.out
Branch: default
Log Message:

added last_id and rowcnt to the session variables


diffs (181 lines):

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
@@ -3037,12 +3037,12 @@ str
 mvc_affected_rows_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci)
 {
        backend *b = NULL;
-       int *res = getArgReference_int(stk, pci, 0);
+       int *res = getArgReference_int(stk, pci, 0), error;
 #ifndef NDEBUG
        int mtype = getArgType(mb, pci, 2);
 #endif
        wrd nr;
-       str *w = getArgReference_str(stk, pci, 3), msg;
+       str msg;
 
        (void) mb;              /* NOT USED */
        if ((msg = checkSQLContext(cntxt)) != NULL)
@@ -3051,7 +3051,8 @@ mvc_affected_rows_wrap(Client cntxt, Mal
        assert(mtype == TYPE_wrd);
        nr = *getArgReference_wrd(stk, pci, 2);
        b = cntxt->sqlcontext;
-       if (mvc_export_affrows(b, b->out, nr, *w))
+       error = mvc_export_affrows(b, b->out, nr, "");
+       if (error)
                throw(SQL, "sql.affectedRows", "failed");
        return MAL_SUCCEED;
 }
@@ -3127,13 +3128,15 @@ str
 mvc_export_operation_wrap(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr 
pci)
 {
        backend *b = NULL;
-       str *w = getArgReference_str(stk, pci, 1), msg;
+       str msg;
 
        (void) mb;              /* NOT USED */
+       (void) stk;             /* NOT USED */
+       (void) pci;             /* NOT USED */
        if ((msg = checkSQLContext(cntxt)) != NULL)
                return msg;
        b = cntxt->sqlcontext;
-       if (mvc_export_operation(b, b->out, *w))
+       if (mvc_export_operation(b, b->out, ""))
                throw(SQL, "sql.exportOperation", "failed");
        return NULL;
 }
diff --git a/sql/backends/monet5/sql.mal b/sql/backends/monet5/sql.mal
--- a/sql/backends/monet5/sql.mal
+++ b/sql/backends/monet5/sql.mal
@@ -340,11 +340,11 @@ pattern exportChunk{unsafe}(s:streams, r
 address mvc_export_chunk_wrap
 comment "Export a chunk of the result set (in order) to stream s"; 
 
-pattern exportOperation{unsafe}(w:str) :void
+pattern exportOperation{unsafe}() :void
 address mvc_export_operation_wrap
 comment "Export result of schema/transaction queries"; 
 
-pattern affectedRows{unsafe}(mvc:int, nr:wrd, w:str) :int
+pattern affectedRows{unsafe}(mvc:int, nr:wrd) :int
 address mvc_affected_rows_wrap
 comment "export the number of affected rows by the current query";
 
diff --git a/sql/backends/monet5/sql_gencode.c 
b/sql/backends/monet5/sql_gencode.c
--- a/sql/backends/monet5/sql_gencode.c
+++ b/sql/backends/monet5/sql_gencode.c
@@ -2329,7 +2329,6 @@ static int
                                return -1;
                        getArg(q, 0) = sql->mvc_var = newTmpVariable(mb, 
TYPE_int);
                        q = pushArgument(mb, q, o1);
-                       q = pushStr(mb, q, ""); /* warning */
                        if (q == NULL)
                                return -1;
                        sql->mvc_var = s->nr = getDestVar(q);
@@ -2654,7 +2653,6 @@ backend_dumpstmt(backend *be, MalBlkPtr 
        be->mvc_var = old_mv;
        if (top && c->caching && (c->type == Q_SCHEMA || c->type == Q_TRANS)) {
                q = newStmt2(mb, sqlRef, exportOperationRef);
-               q = pushStr(mb, q, ""); /* warning */
                if (q == NULL)
                        return -1;
        }
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
@@ -1677,13 +1677,13 @@ mvc_export_affrows(backend *b, stream *s
        if (!s)
                return 0;
 
+       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)
                return -1;
        if (mvc_export_warning(s, w) != 1)
                return -1;
 
-       m->last_id = -1;        /* reset after we exposed the value */
-
        return 0;
 }
 
@@ -1726,6 +1726,8 @@ mvc_export_head(backend *b, stream *s, i
                } else
                        count = 1;
        }
+       m->rowcnt = count;
+       stack_set_number(m, "rowcnt", m->rowcnt);
        if (!mvc_send_lng(s, (lng) count) || mnstr_write(s, " ", 1, 1) != 1)
                return -1;
 
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
@@ -279,7 +279,7 @@ SQLexit(Client c)
        stack_push_var(sql, name, &ctype);         \
        stack_set_var(sql, name, VALset(&src, ctype.type->localtype, val));
 
-#define NR_GLOBAL_VARS 8
+#define NR_GLOBAL_VARS 10
 /* NR_GLOBAL_VAR should match exactly the number of variables created
    in global_variables */
 /* initialize the global variable, ie make mvc point to these */
@@ -318,6 +318,10 @@ global_variables(mvc *sql, char *user, c
        sql_find_subtype(&ctype, typename, 0, 0);
        SQLglobal("history", &F);
 
+       typename = "bigint";
+       sql_find_subtype(&ctype, typename, 0, 0);
+       SQLglobal("last_id", &sql->last_id);
+       SQLglobal("rowcnt", &sql->rowcnt);
        return 0;
 }
 
diff --git a/sql/server/sql_mvc.c b/sql/server/sql_mvc.c
--- a/sql/server/sql_mvc.c
+++ b/sql/server/sql_mvc.c
@@ -428,7 +428,7 @@ mvc_create(int clientid, backend_stack s
        m->argc = 0;
        m->sym = NULL;
 
-       m->last_id = m->role_id = m->user_id = -1;
+       m->rowcnt = m->last_id = m->role_id = m->user_id = -1;
        m->timezone = 0;
        m->clientid = clientid;
 
@@ -492,7 +492,7 @@ mvc_reset(mvc *m, bstream *rs, stream *w
        m->argc = 0;
        m->sym = NULL;
 
-       m->last_id = m->role_id = m->user_id = -1;
+       m->rowcnt = m->last_id = m->role_id = m->user_id = -1;
        m->emode = m_normal;
        m->emod = mod_none;
        if (m->reply_size != 100)
diff --git a/sql/server/sql_mvc.h b/sql/server/sql_mvc.h
--- a/sql/server/sql_mvc.h
+++ b/sql/server/sql_mvc.h
@@ -89,6 +89,7 @@ typedef struct mvc {
        int user_id;
        int role_id;
        lng last_id;
+       lng rowcnt;
 
        /* current session variables */
        int timezone;           /* milliseconds west of UTC */
diff --git a/sql/test/Tests/bogus-auto-generated-keys.stable.out 
b/sql/test/Tests/bogus-auto-generated-keys.stable.out
--- a/sql/test/Tests/bogus-auto-generated-keys.stable.out
+++ b/sql/test/Tests/bogus-auto-generated-keys.stable.out
@@ -50,10 +50,10 @@ 1 affected row, last generated key: 1
 
 -- update again, we expect NO generated key, but we DO get one
 UPDATE gen_keys SET "x" = 'bla' WHERE "id" = 1;
-1 affected row
+1 affected row, last generated key: 1
 
 UPDATE gen_keys SET "x" = 'bla' WHERE "id" = 12;
-0 affected rows
+0 affected rows, last generated key: 1
 
 
 -- ok, cleanup a bit
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to