transactions-multi-conn.td 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. # Copyright Materialize, Inc. and contributors. All rights reserved.
  2. #
  3. # Use of this software is governed by the Business Source License
  4. # included in the LICENSE file at the root of this repository.
  5. #
  6. # As of the Change Date specified in that file, in accordance with
  7. # the Business Source License, use of this software will be governed
  8. # by the Apache License, Version 2.0.
  9. $ set-sql-timeout duration=1s
  10. #
  11. # Test that transactions work properly
  12. #
  13. > CREATE SECRET mysqlpass AS '${arg.mysql-root-password}'
  14. > CREATE CONNECTION mysql_conn TO MYSQL (
  15. HOST mysql,
  16. USER root,
  17. PASSWORD SECRET mysqlpass
  18. )
  19. $ mysql-connect name=mysql1 url=mysql://root@mysql password=${arg.mysql-root-password}
  20. $ mysql-connect name=mysql2 url=mysql://root@mysql password=${arg.mysql-root-password}
  21. $ mysql-connect name=mysql3 url=mysql://root@mysql password=${arg.mysql-root-password}
  22. $ mysql-execute name=mysql1
  23. DROP DATABASE IF EXISTS public;
  24. CREATE DATABASE public;
  25. USE public;
  26. CREATE TABLE t1 (a INT);
  27. CREATE TABLE t2 (a INT);
  28. CREATE TABLE t3 (a INT);
  29. > CREATE SOURCE mz_source FROM MYSQL CONNECTION mysql_conn;
  30. > CREATE TABLE t1 FROM SOURCE mz_source (REFERENCE public.t1);
  31. > CREATE TABLE t2 FROM SOURCE mz_source (REFERENCE public.t2);
  32. > CREATE TABLE t3 FROM SOURCE mz_source (REFERENCE public.t3);
  33. > SELECT count(*) FROM t1;
  34. 0
  35. > SELECT count(*) FROM t2;
  36. 0
  37. > SELECT count(*) FROM t3;
  38. 0
  39. $ mysql-execute name=mysql1
  40. SET AUTOCOMMIT = FALSE;
  41. $ mysql-execute name=mysql2
  42. SET AUTOCOMMIT = FALSE;
  43. USE public;
  44. $ mysql-execute name=mysql3
  45. SET AUTOCOMMIT = FALSE;
  46. USE public;
  47. $ mysql-execute name=mysql1
  48. INSERT INTO t1 VALUES (1000);
  49. INSERT INTO t2 VALUES (1000);
  50. INSERT INTO t3 VALUES (1000);
  51. $ mysql-execute name=mysql2
  52. INSERT INTO t1 VALUES (2000);
  53. INSERT INTO t2 VALUES (2000);
  54. INSERT INTO t3 VALUES (2000);
  55. $ mysql-execute name=mysql3
  56. INSERT INTO t1 VALUES (3000);
  57. INSERT INTO t2 VALUES (3000);
  58. INSERT INTO t3 VALUES (3000);
  59. $ mysql-execute name=mysql1
  60. COMMIT;
  61. $ mysql-execute name=mysql3
  62. COMMIT;
  63. > SELECT * FROM t1;
  64. 1000
  65. 3000
  66. > SELECT * FROM t2;
  67. 1000
  68. 3000
  69. > SELECT * FROM t3;
  70. 1000
  71. 3000
  72. $ mysql-execute name=mysql2
  73. COMMIT;
  74. > SELECT * FROM t1;
  75. 1000
  76. 2000
  77. 3000
  78. # delete and insert statements cannot be done in multiple transactions on the same table even with fine-grained where condition
  79. $ mysql-execute name=mysql1
  80. INSERT INTO t1 VALUES (1001);
  81. INSERT INTO t2 VALUES (1001);
  82. INSERT INTO t3 VALUES (1001);
  83. $ mysql-execute name=mysql2
  84. INSERT INTO t1 VALUES (2001);
  85. INSERT INTO t2 VALUES (2001);
  86. INSERT INTO t3 VALUES (2001);
  87. $ mysql-execute name=mysql3
  88. INSERT INTO t1 VALUES (3001);
  89. INSERT INTO t2 VALUES (3001);
  90. INSERT INTO t3 VALUES (3001);
  91. $ mysql-execute name=mysql1
  92. COMMIT;
  93. $ mysql-execute name=mysql3
  94. COMMIT;
  95. > SELECT * FROM t1;
  96. 1000
  97. 1001
  98. 2000
  99. 3000
  100. 3001
  101. > SELECT * FROM t2;
  102. 1000
  103. 1001
  104. 2000
  105. 3000
  106. 3001
  107. > SELECT * FROM t3;
  108. 1000
  109. 1001
  110. 2000
  111. 3000
  112. 3001
  113. $ mysql-execute name=mysql2
  114. COMMIT;
  115. INSERT INTO t1 VALUES (2002);
  116. $ mysql-execute name=mysql1
  117. INSERT INTO t1 VALUES (1002);
  118. DELETE FROM t2 WHERE a = 2000;
  119. $ mysql-execute name=mysql2
  120. DELETE FROM t3 WHERE a = 2000;
  121. $ mysql-execute name=mysql1
  122. COMMIT;
  123. > SELECT * FROM t1;
  124. 1000
  125. 1001
  126. 1002
  127. 2000
  128. 2001
  129. 3000
  130. 3001
  131. > SELECT * FROM t2;
  132. 1000
  133. 1001
  134. 2001
  135. 3000
  136. 3001
  137. > SELECT * FROM t3;
  138. 1000
  139. 1001
  140. 2000
  141. 2001
  142. 3000
  143. 3001
  144. $ mysql-execute name=mysql2
  145. COMMIT;
  146. > SELECT * FROM t1;
  147. 1000
  148. 1001
  149. 1002
  150. 2000
  151. 2001
  152. 2002
  153. 3000
  154. 3001
  155. > SELECT * FROM t2;
  156. 1000
  157. 1001
  158. 2001
  159. 3000
  160. 3001
  161. > SELECT * FROM t3;
  162. 1000
  163. 1001
  164. 2001
  165. 3000
  166. 3001