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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list