Changeset: 20e8e80f5f8d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/20e8e80f5f8d
Branch: iso
Log Message:

Merged with Jul2021


diffs (177 lines):

diff --git a/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py 
b/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
--- a/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
+++ b/sql/test/miscellaneous/Tests/mserver5-in-memory.SQL.py
@@ -8,11 +8,10 @@ def freeport():
     sock.close()
     return port
 
-def wait_server_to_start(port):
+def wait_server_to_start(port, mserver_process):
     started = False
     mserver_process.poll()
     if mserver_process.returncode is not None:
-        mserver_process.wait()
         raise Exception("The server terminated early")
     retry = 0
     while retry < 3:
@@ -28,26 +27,33 @@ def wait_server_to_start(port):
     if not started:
         raise Exception("The server did not start?")
 
-prt = freeport()
-cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt,)]
-mserver_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE)
-wait_server_to_start(prt)
-with SQLTestCase() as mdb:
-    mdb.connect(database=None, port=prt, username="monetdb", 
password="monetdb")
-    mdb.execute("""
-        start transaction;
-        create table iwontpersist (mycol int);
-        insert into iwontpersist values (1);
-        commit;
-    """).assertSucceeded()
-    mdb.execute('SELECT mycol FROM 
iwontpersist;').assertDataResultMatch([(1,)])
-mserver_process.terminate()
+mserver_process1 = None
+mserver_process2 = None
 
-prt = freeport()
-cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt,)]
-mserver_process = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE)
-wait_server_to_start(prt)
-with SQLTestCase() as mdb:
-    mdb.connect(database=None, port=prt, username="monetdb", 
password="monetdb")
-    mdb.execute('SELECT mycol FROM 
iwontpersist;').assertFailed(err_code="42S02", err_message="SELECT: no such 
table 'iwontpersist'")
-mserver_process.terminate()
+try:
+    prt1 = freeport()
+    cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt1,)]
+    mserver_process1 = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE)
+    wait_server_to_start(prt1, mserver_process1)
+    with SQLTestCase() as mdb:
+        mdb.connect(database=None, port=prt1, username="monetdb", 
password="monetdb")
+        mdb.execute("""
+            start transaction;
+            create table iwontpersist (mycol int);
+            insert into iwontpersist values (1);
+            commit;
+        """).assertSucceeded()
+        mdb.execute('SELECT mycol FROM 
iwontpersist;').assertDataResultMatch([(1,)])
+
+    prt2 = freeport()
+    cmd = ['mserver5', '--in-memory', '--set', 'mapi_port=%d' % (prt2,)]
+    mserver_process2 = subprocess.Popen(cmd, stdout=subprocess.PIPE, 
stderr=subprocess.PIPE)
+    wait_server_to_start(prt2, mserver_process2)
+    with SQLTestCase() as mdb:
+        mdb.connect(database=None, port=prt2, username="monetdb", 
password="monetdb")
+        mdb.execute('SELECT mycol FROM 
iwontpersist;').assertFailed(err_code="42S02", err_message="SELECT: no such 
table 'iwontpersist'")
+finally:
+    if mserver_process1 is not None:
+        mserver_process1.terminate()
+    if mserver_process2 is not None:
+        mserver_process2.terminate()
diff --git a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py 
b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
--- a/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
+++ b/sql/test/miscellaneous/Tests/transaction_isolation2.SQL.py
@@ -11,7 +11,7 @@ with SQLTestCase() as mdb1:
         mdb1.execute("CREATE TABLE doubles (d double 
precision);").assertSucceeded()
         mdb1.execute("insert into longs values (1),(2),(3);").assertSucceeded()
         mdb1.execute("insert into integers values 
(1),(2),(3);").assertSucceeded()
-        mdb1.execute("alter table longs add primary key (i)").assertSucceeded()
+        mdb1.execute("alter table longs add primary key 
(i);").assertSucceeded()
         mdb1.execute('commit;').assertSucceeded()
 
         mdb1.execute('start transaction;').assertSucceeded()
@@ -65,6 +65,92 @@ with SQLTestCase() as mdb1:
         mdb1.execute('commit;').assertSucceeded()
         mdb2.execute('rollback;').assertSucceeded()
 
+        mdb1.execute('create merge table parent(a int);').assertSucceeded()
+        mdb1.execute('create table child1(c int);').assertSucceeded()
+        mdb1.execute('create table child2(c int);').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute("ALTER TABLE parent ADD TABLE child1;").assertSucceeded()
+        mdb2.execute("ALTER TABLE parent ADD TABLE 
child2;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction 
conflict detected")
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('rollback;').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded()
+        mdb1.execute('DROP TABLE parent;').assertSucceeded()
+        mdb1.execute('DROP TABLE child1;').assertSucceeded()
+        mdb1.execute('DROP TABLE child2;').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+
+        mdb1.execute('create merge table parent(a int);').assertSucceeded()
+        mdb1.execute('create table child(c int);').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute("ALTER TABLE parent ADD TABLE child;").assertSucceeded()
+        mdb2.execute("ALTER TABLE parent ADD TABLE 
child;").assertFailed(err_code="42000", err_message="ALTER TABLE: transaction 
conflict detected")
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('rollback;').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb1.execute('ALTER TABLE parent DROP TABLE child;').assertSucceeded()
+        mdb1.execute('DROP TABLE parent;').assertSucceeded()
+        mdb1.execute('DROP TABLE child;').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+
+        mdb1.execute('create merge table parent(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
+        mdb1.execute('create table child1(c int);').assertSucceeded()
+        mdb1.execute('create table child2(c int);').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute("ALTER TABLE parent ADD TABLE child1 AS PARTITION FROM 
'1' TO '2';").assertSucceeded()
+        mdb2.execute("ALTER TABLE parent ADD TABLE child2 AS PARTITION FROM 
'0' TO '4';").assertFailed(err_code="42000", err_message="ALTER TABLE: failed 
due to conflict with another transaction")
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('rollback;').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb1.execute('ALTER TABLE parent DROP TABLE child1;').assertSucceeded()
+        mdb1.execute('DROP TABLE parent;').assertSucceeded()
+        mdb1.execute('DROP TABLE child1;').assertSucceeded()
+        mdb1.execute('DROP TABLE child2;').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+
+        mdb1.execute('create merge table parent1(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
+        mdb1.execute('create merge table parent2(a int) PARTITION BY RANGE ON 
(a);').assertSucceeded()
+        mdb1.execute('create table child(c int);').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute("ALTER TABLE parent1 ADD TABLE child AS PARTITION FROM 
'1' TO '2';").assertSucceeded()
+        mdb2.execute("ALTER TABLE parent2 ADD TABLE child AS PARTITION FROM 
'0' TO '4';").assertFailed(err_code="42000", err_message="ALTER TABLE: failed 
due to conflict with another transaction")
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('rollback;').assertSucceeded()
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb1.execute('ALTER TABLE parent1 DROP TABLE child;').assertSucceeded()
+        mdb1.execute('DROP TABLE parent1;').assertSucceeded()
+        mdb1.execute('DROP TABLE parent2;').assertSucceeded()
+        mdb1.execute('DROP TABLE child;').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute('CREATE FUNCTION myfunc() RETURNS INT RETURN 
1;').assertSucceeded()
+        mdb2.execute('CREATE FUNCTION myfunc() RETURNS INT RETURN 
2;').assertFailed(err_code="42000", err_message="CREATE FUNCTION: transaction 
conflict detected")
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('rollback;').assertSucceeded()
+        mdb1.execute('DROP FUNCTION myfunc;').assertSucceeded()
+
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute('insert into longs values (4),(5),(6);').assertSucceeded()
+        mdb2.execute('insert into longs values (5),(6),(7);').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('commit;').assertFailed() # Duplicate values on the 
primary key 'i' from 'longs'
+        mdb1.execute('SELECT i FROM longs order by 
i;').assertDataResultMatch([(1,),(2,),(3,),(4,),(5,),(6,)])
+
+        mdb1.execute('start transaction;').assertSucceeded()
+        mdb2.execute('start transaction;').assertSucceeded()
+        mdb1.execute('delete from longs where i > 3;').assertRowCount(3)
+        mdb2.execute('insert into integers values (4);').assertSucceeded()
+        mdb1.execute('commit;').assertSucceeded()
+        mdb2.execute('commit;').assertFailed() # The foreign key value 4 
doesn't exist on the primary key
+        mdb1.execute('SELECT i FROM longs order by 
i;').assertDataResultMatch([(1,),(2,),(3,)])
+
         mdb1.execute('start transaction;').assertSucceeded()
         mdb1.execute('DROP schema mysch;').assertSucceeded()
         mdb1.execute('DROP TYPE myurl;').assertSucceeded()
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to