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

Reply via email to