Changeset: 981041bd40de for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=981041bd40de
Added Files:
        sql/test/HTM/Tests/MixTransactionPrecommit-1.sql
        sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.err
        sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.out
        sql/test/HTM/Tests/MixTransactionPrecommit-2.sql
        sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.err
        sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.out
        sql/test/HTM/Tests/MixTransactionPrecommit-cleanup.sql
        sql/test/HTM/Tests/MixTransactionPrecommit-cleanup.stable.err
        sql/test/HTM/Tests/MixTransactionPrecommit-cleanup.stable.out
        sql/test/HTM/Tests/TwoInsetsIn1Transaction.sql
        sql/test/HTM/Tests/TwoInsetsIn1Transaction.stable.err
        sql/test/HTM/Tests/TwoInsetsIn1Transaction.stable.out
Removed Files:
        sql/test/HTM/Tests/MixTransactionPrecommitReturns1-cleanup.sql
        sql/test/HTM/Tests/MixTransactionPrecommitReturns1-cleanup.stable.err
        sql/test/HTM/Tests/MixTransactionPrecommitReturns1-cleanup.stable.out
        sql/test/HTM/Tests/MixTransactionPrecommitReturns1.sql
        sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.err
        sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.out
Modified Files:
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql_execute.c
        sql/backends/monet5/sql_result.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.c
        sql/server/sql_mvc.h
        sql/test/HTM/Tests/All
        sql/test/HTM/Tests/InsertWith2PCDeleteWithCommit-1.stable.out
        sql/test/HTM/Tests/InsertWithCommitDeleteWith2PC-1.stable.out
        sql/test/HTM/Tests/ReadsItsOwnWrites.stable.out
        sql/test/HTM/Tests/RollbackAfterPersistcommitHasNoEffect-1.stable.err
        sql/test/HTM/Tests/RollbackAfterPersistcommitHasNoEffect-1.stable.out
        sql/test/HTM/Tests/RollbackAfterPrecommit-1.stable.err
        sql/test/HTM/Tests/RollbackAfterPrecommit-1.stable.out
        sql/test/HTM/Tests/RollbackBeforePrecommit-1.stable.err
        sql/test/HTM/Tests/RollbackBeforePrecommit-1.stable.out
Branch: HTM
Log Message:

Export the total number of affected rows per transaction during 
pre/persist-commit
Add a few tests to verify the new behaviour
Fix the older test according to the new behaviour


diffs (truncated from 634 to 300 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
@@ -365,7 +365,7 @@ SQLprecommit(Client cntxt, MalBlkPtr mb,
        }
 
        /* get the result set */
-       if (mvc_export_affrows(b, b->out, sql->update, ""))
+       if (mvc_export_affrows(b, b->out, -1, ""))
                throw(SQL, "sql.precommit", "failed - could not export number 
affected rows");
        return msg;
 }
@@ -386,7 +386,7 @@ SQLpersistcommit(Client cntxt, MalBlkPtr
 
        /* If update flag is set, persistcommit does not throw and exception in 
autocommit,
         * since it was probably executed after a precommit with no-update 
transaction. */
-       if (sql->session->auto_commit != 0 && sql->update > 0)
+       if (sql->session->auto_commit != 0 && sql->affected_rows > 0)
                throw(SQL, "sql.persistcommit", "persistcommit not allowed in 
auto commit mode");
 
        /* execute the persistcommit */
@@ -396,7 +396,7 @@ SQLpersistcommit(Client cntxt, MalBlkPtr
        }
 
        /* get the result set */
-       if (mvc_export_affrows(b, b->out, sql->update, ""))
+       if (mvc_export_affrows(b, b->out, -1, ""))
                throw(SQL, "sql.persistcommit", "failed - could not export 
number affected rows");
        return msg;
 }
diff --git a/sql/backends/monet5/sql_execute.c 
b/sql/backends/monet5/sql_execute.c
--- a/sql/backends/monet5/sql_execute.c
+++ b/sql/backends/monet5/sql_execute.c
@@ -133,7 +133,6 @@ SQLstatementIntern(Client c, str *expr, 
                if (!m->sa)
                        m->sa = sa_create();
                m->sym = NULL;
-               m->update = 0;
                if ((err = sqlparse(m)) ||
                    /* Only forget old errors on transaction boundaries */
                    (mvc_status(m) && m->type != Q_TRANS) || !m->sym) {
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
@@ -1591,6 +1591,17 @@ mvc_export_affrows(backend *b, stream *s
        if (!s)
                return 0;
 
+       if (val > 0) {
+               /* increment the affected row count per transaction */
+               m->affected_rows += val;
+       } else {
+               /* This is the special case where pre/persist-commit call the 
function.
+                * Then output only the current stored affected row count for 
the complete transaction.
+                */
+               val = m->affected_rows;
+       }
+
+
        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)
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
@@ -1561,9 +1561,6 @@ 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
@@ -201,6 +201,8 @@ mvc_trans(mvc *m)
                        qc_clean(m->qc);
                }
        }
+       /* rest the per-transaction global affected row count */
+       m->affected_rows = 0;
        store_unlock();
 }
 
@@ -524,7 +526,7 @@ mvc_create(int clientid, backend_stack s
        store_unlock();
 
        m->type = Q_PARSE;
-       m->update = 0;
+       m->affected_rows = 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,7 +105,7 @@ typedef struct mvc {
        sql_session *session;   
 
        int type;               /* query type */
-    int update;     /* flag if the transaction contained an update */
+    lng affected_rows;     /* the number of affected rows per transaction */
        int pushdown;           /* AND or OR query handling */
        int label;              /* numbers for relational projection labels */
        list *cascade_action;  /* protection against recursive cascade actions 
*/
diff --git a/sql/test/HTM/Tests/All b/sql/test/HTM/Tests/All
--- a/sql/test/HTM/Tests/All
+++ b/sql/test/HTM/Tests/All
@@ -5,8 +5,9 @@ MultipleConnectionsAllWithAutocommit
 ReadsItsOwnWrites
 ReadsItsOwnWrites-cleanup
 NonUpdatePrecommitReturns0
-MixTransactionPrecommitReturns1
-MixTransactionPrecommitReturns1-cleanup
+MixTransactionPrecommit-1
+MixTransactionPrecommit-2
+MixTransactionPrecommit-cleanup
 RollbackBeforePrecommit-1
 RollbackBeforePrecommit-2
 RollbackAfterPrecommit-1
@@ -21,3 +22,4 @@ InsertWith2PCDeleteWithCommit-1
 InsertWith2PCDeleteWithCommit-2
 InsertWithCommitDeleteWith2PC-1
 InsertWithCommitDeleteWith2PC-2
+TwoInsetsIn1Transaction
diff --git a/sql/test/HTM/Tests/InsertWith2PCDeleteWithCommit-1.stable.out 
b/sql/test/HTM/Tests/InsertWith2PCDeleteWithCommit-1.stable.out
--- a/sql/test/HTM/Tests/InsertWith2PCDeleteWithCommit-1.stable.out
+++ b/sql/test/HTM/Tests/InsertWith2PCDeleteWithCommit-1.stable.out
@@ -42,9 +42,9 @@ Ready.
 [ 17,  99      ]
 [ 18,  99      ]
 #CALL precommit(6);
-[ 1    ]
+[ 3    ]
 #CALL persistcommit(6);
-[ 1    ]
+[ 3    ]
 #SELECT * FROM htmtest;
 % sys.htmtest, sys.htmtest # table_name
 % id,  val # name
diff --git a/sql/test/HTM/Tests/InsertWithCommitDeleteWith2PC-1.stable.out 
b/sql/test/HTM/Tests/InsertWithCommitDeleteWith2PC-1.stable.out
--- a/sql/test/HTM/Tests/InsertWithCommitDeleteWith2PC-1.stable.out
+++ b/sql/test/HTM/Tests/InsertWithCommitDeleteWith2PC-1.stable.out
@@ -47,9 +47,9 @@ Ready.
 #DELETE FROM htmtest WHERE id > 3;
 [ 6    ]
 #CALL precommit(7);
-[ 1    ]
+[ 6    ]
 #CALL persistcommit(7);
-[ 1    ]
+[ 6    ]
 #SELECT * FROM htmtest;
 % sys.htmtest, sys.htmtest # table_name
 % id,  val # name
diff --git a/sql/test/HTM/Tests/MixTransactionPrecommitReturns1.sql 
b/sql/test/HTM/Tests/MixTransactionPrecommit-1.sql
rename from sql/test/HTM/Tests/MixTransactionPrecommitReturns1.sql
rename to sql/test/HTM/Tests/MixTransactionPrecommit-1.sql
diff --git a/sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.err 
b/sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.err
rename from sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.err
rename to sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.err
--- a/sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.err
+++ b/sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.err
@@ -1,4 +1,4 @@
-stderr of test 'MixTransactionPrecommitReturns1` in directory 'sql/test/HTM` 
itself:
+stderr of test 'MixTransactionPrecommit-1` in directory 'sql/test/HTM` itself:
 
 
 # 15:18:28 >  
diff --git a/sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.out 
b/sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.out
rename from sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.out
rename to sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.out
--- a/sql/test/HTM/Tests/MixTransactionPrecommitReturns1.stable.out
+++ b/sql/test/HTM/Tests/MixTransactionPrecommit-1.stable.out
@@ -1,4 +1,4 @@
-stdout of test 'MixTransactionPrecommitReturns1` in directory 'sql/test/HTM` 
itself:
+stdout of test 'MixTransactionPrecommit-1` in directory 'sql/test/HTM` itself:
 
 
 # 15:18:28 >  
@@ -28,7 +28,7 @@ Ready.
 # 15:18:28 >  
 
 #START TRANSACTION;
-#INSERT INTO htmtest VALUES (4, 99), (5, 99), (6, 99);
+#INSERT INTO htmtest VALUES (7, 99), (8, 99), (9, 99);
 [ 3    ]
 #SELECT * FROM htmtest;
 % sys.htmtest, sys.htmtest # table_name
@@ -41,10 +41,10 @@ Ready.
 [ 7,   99      ]
 [ 8,   99      ]
 [ 9,   99      ]
-#CALL precommit(2);
-[ 1    ]
-#CALL persistcommit(2);
-[ 1    ]
+#CALL precommit(3);
+[ 3    ]
+#CALL persistcommit(3);
+[ 3    ]
 
 
 # 15:18:28 >  
diff --git a/sql/test/HTM/Tests/MixTransactionPrecommit-2.sql 
b/sql/test/HTM/Tests/MixTransactionPrecommit-2.sql
new file mode 100644
--- /dev/null
+++ b/sql/test/HTM/Tests/MixTransactionPrecommit-2.sql
@@ -0,0 +1,11 @@
+START TRANSACTION;
+INSERT INTO htmtest VALUES (7, 99), (8, 99), (9, 99);
+SELECT * FROM htmtest;
+CALL precommit(3);
+CALL persistcommit(3);
+
+START TRANSACTION;
+INSERT INTO htmtest VALUES (7, 99), (8, 99), (9, 99);
+SELECT * FROM htmtest;
+CALL precommit(3);
+CALL persistcommit(3);
diff --git a/sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.err 
b/sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.err
new file mode 100644
--- /dev/null
+++ b/sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.err
@@ -0,0 +1,36 @@
+stderr of test 'MixTransactionPrecommit-2` in directory 'sql/test/HTM` itself:
+
+
+# 14:32:56 >  
+# 14:32:56 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=30393" "--set" 
"mapi_usock=/var/tmp/mtest-83748/.s.monetdb.30393" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/Users/dnedev/monetdb/installation/var/MonetDB/mTests_sql_test_HTM" 
"--set" "mal_listing=0"
+# 14:32:56 >  
+
+# builtin opt  gdk_dbpath = 
/Users/dnedev/monetdb/installation/var/monetdb5/dbfarm/demo
+# builtin opt  gdk_debug = 0
+# builtin opt  gdk_vmtrim = no
+# builtin opt  monet_prompt = >
+# builtin opt  monet_daemon = no
+# builtin opt  mapi_port = 50000
+# builtin opt  mapi_open = false
+# builtin opt  mapi_autosense = false
+# builtin opt  sql_optimizer = default_pipe
+# builtin opt  sql_debug = 0
+# cmdline opt  gdk_nr_threads = 0
+# cmdline opt  mapi_open = true
+# cmdline opt  mapi_port = 30393
+# cmdline opt  mapi_usock = /var/tmp/mtest-83748/.s.monetdb.30393
+# cmdline opt  monet_prompt = 
+# cmdline opt  mal_listing = 2
+# cmdline opt  gdk_dbpath = 
/Users/dnedev/monetdb/installation/var/MonetDB/mTests_sql_test_HTM
+# cmdline opt  mal_listing = 0
+# cmdline opt  gdk_debug = 536870922
+
+# 14:32:56 >  
+# 14:32:56 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-83748" "--port=30393"
+# 14:32:56 >  
+
+
+# 14:32:56 >  
+# 14:32:56 >  "Done."
+# 14:32:56 >  
+
diff --git a/sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.out 
b/sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.out
new file mode 100644
--- /dev/null
+++ b/sql/test/HTM/Tests/MixTransactionPrecommit-2.stable.out
@@ -0,0 +1,81 @@
+stdout of test 'MixTransactionPrecommit-2` in directory 'sql/test/HTM` itself:
+
+
+# 15:18:28 >  
+# 15:18:28 >  "mserver5" "--debug=10" "--set" "gdk_nr_threads=0" "--set" 
"mapi_open=true" "--set" "mapi_port=35682" "--set" 
"mapi_usock=/var/tmp/mtest-79940/.s.monetdb.35682" "--set" "monet_prompt=" 
"--forcemito" "--set" "mal_listing=2" 
"--dbpath=/Users/dnedev/monetdb/installation/var/MonetDB/mTests_sql_test_HTM" 
"--set" "mal_listing=0"
+# 15:18:28 >  
+
+# MonetDB 5 server v11.22.0
+# This is an unreleased version
+# Serving database 'mTests_sql_test_HTM', using 4 threads
+# Compiled for x86_64-apple-darwin14.3.0/64bit with 64bit OIDs and 128bit 
integers dynamically linked
+# Found 8.000 GiB available main-memory.
+# Copyright (c) 1993-July 2008 CWI.
+# Copyright (c) August 2008-2015 MonetDB B.V., all rights reserved
+# Visit http://www.monetdb.org/ for further information
+# Listening for connection requests on mapi:monetdb://wired1-56.cwi.nl:35682/
+# Listening for UNIX domain connection requests on 
mapi:monetdb:///var/tmp/mtest-79940/.s.monetdb.35682
+# Start processing logs sql/sql_logs version 52200
+# Start reading the write-ahead log 'sql_logs/sql/log.5'
+# Finished reading the write-ahead log 'sql_logs/sql/log.5'
+# Finished processing logs sql/sql_logs
+# MonetDB/SQL module loaded
+
+Ready.
+
+# 15:18:28 >  
+# 15:18:28 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-79940" "--port=35682"
+# 15:18:28 >  
+
+#START TRANSACTION;
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to