Changeset: 5ccf3a0fde0e for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=5ccf3a0fde0e
Modified Files:
sql/backends/monet5/sql.c
sql/backends/monet5/sql_scenario.c
sql/server/rel_updates.c
sql/server/sql_mvc.c
sql/server/sql_mvc.h
Branch: HTM
Log Message:
Add a flag to the MVC(C) to properly keep track if there was an update in the a
single transaction
diffs (89 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
@@ -349,7 +349,6 @@ SQLprecommit(Client cntxt, MalBlkPtr mb,
int result;
backend *b = cntxt->sqlcontext;
lng *id = getArgReference_lng(stk, pci, 1);
- int res_output = 0;
if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)
return msg;
@@ -366,10 +365,7 @@ SQLprecommit(Client cntxt, MalBlkPtr mb,
}
/* get the result set */
- if (sql->type == Q_PARSE || sql->type == Q_UPDATE) {
- res_output = 1;
- }
- if (mvc_export_affrows(b, b->out, res_output, ""))
+ if (mvc_export_affrows(b, b->out, sql->update, ""))
throw(SQL, "sql.precommit", "failed - could not export number
affected rows");
return msg;
}
@@ -382,7 +378,6 @@ SQLpersistcommit(Client cntxt, MalBlkPtr
int result;
backend *b = cntxt->sqlcontext;
lng *id = getArgReference_lng(stk, pci, 1);
- int res_output = 0;
if ((msg = getSQLContext(cntxt, mb, &sql, NULL)) != NULL)
return msg;
@@ -399,10 +394,7 @@ SQLpersistcommit(Client cntxt, MalBlkPtr
}
/* get the result set */
- if (sql->type == Q_PARSE || sql->type == Q_UPDATE) {
- res_output = 1;
- }
- if (mvc_export_affrows(b, b->out, res_output, ""))
+ if (mvc_export_affrows(b, b->out, sql->update, ""))
throw(SQL, "sql.persistcommit", "failed - could not export
number affected rows");
return msg;
}
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
@@ -1010,6 +1010,7 @@ SQLparser(Client c)
#endif
m = be->mvc;
m->type = Q_PARSE;
+ m->update = 0;
SQLtrans(m);
pstatus = m->session->status;
diff --git a/sql/server/rel_updates.c b/sql/server/rel_updates.c
--- a/sql/server/rel_updates.c
+++ b/sql/server/rel_updates.c
@@ -1565,5 +1565,9 @@ rel_updates(mvc *sql, symbol *s)
return sql_error(sql, 01, "Updates statement unknown Symbol("
PTRFMT ")->token = %s", PTRFMTCAST s, token2string(s->token));
}
sql->use_views = old;
+ // If the transaction contains an update, set the updated flag (used
for a two-phase commit)
+ if (sql->type == Q_UPDATE) {
+ sql->update = 1;
+ }
return ret;
}
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
@@ -539,6 +539,7 @@ mvc_create(int clientid, backend_stack s
store_unlock();
m->type = Q_PARSE;
+ m->update = 0;
m->pushdown = 1;
m->result_id = 0;
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
@@ -105,6 +105,7 @@ typedef struct mvc {
sql_session *session;
int type; /* query type */
+ int update; /* flag if the transaction contained an update */
int pushdown; /* AND or OR query handling */
int label; /* numbers for relational projection labels */
list *cascade_action; /* protection against recursive cascade actions
*/
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list