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