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