30-add-subsource.td 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  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. # Setup SQL Server state.
  10. #
  11. # Create a table that has CDC enabled.
  12. $ sql-server-connect name=sql-server
  13. server=tcp:sql-server,1433;IntegratedSecurity=true;TrustServerCertificate=true;User ID=${arg.default-sql-server-user};Password=${arg.default-sql-server-password}
  14. $ sql-server-execute name=sql-server
  15. DROP DATABASE IF EXISTS test_30;
  16. CREATE DATABASE test_30;
  17. USE test_30;
  18. EXEC sys.sp_cdc_enable_db;
  19. ALTER DATABASE test_30 SET ALLOW_SNAPSHOT_ISOLATION ON;
  20. CREATE TABLE t1_add_subsource (val VARCHAR(1024));
  21. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 't1_add_subsource', @role_name = 'SA', @supports_net_changes = 0;
  22. INSERT INTO t1_add_subsource VALUES ('a'), ('b'), (NULL), ('c');
  23. CREATE TABLE t2_add_subsource (val VARCHAR(1024));
  24. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 't2_add_subsource', @role_name = 'SA', @supports_net_changes = 0;
  25. INSERT INTO t2_add_subsource VALUES ('100'), ('200'), (NULL), ('300');
  26. CREATE TABLE dummy (data int);
  27. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'dummy', @role_name = 'SA', @supports_net_changes = 0;
  28. # Exercise Materialize.
  29. > CREATE SECRET IF NOT EXISTS sql_server_pass AS '${arg.default-sql-server-password}'
  30. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  31. ALTER SYSTEM SET enable_sql_server_source = true;
  32. $ postgres-execute connection=postgres://mz_system:materialize@${testdrive.materialize-internal-sql-addr}
  33. ALTER SYSTEM SET log_filter = 'mz_sql=debug,info';
  34. > CREATE CONNECTION IF NOT EXISTS sql_server_test_add_subsource_conn TO SQL SERVER (
  35. HOST 'sql-server',
  36. PORT 1433,
  37. DATABASE test_30,
  38. USER '${arg.default-sql-server-user}',
  39. PASSWORD = SECRET sql_server_pass
  40. );
  41. # Create a SQL Server Source.
  42. > CREATE SOURCE my_source_add_subsources
  43. FROM SQL SERVER CONNECTION sql_server_test_add_subsource_conn
  44. FOR TABLES (dbo.t1_add_subsource);
  45. # Wait until snapshot has emitted stats and then insert a new row
  46. # to force LSN in MS SQL to progress.
  47. > SELECT s.name, ss.snapshot_records_known = ss.snapshot_records_staged
  48. FROM mz_internal.mz_source_statistics ss JOIN mz_sources s using (id)
  49. WHERE s.name = 'my_source_add_subsources' AND ss.snapshot_records_staged > 0;
  50. my_source_add_subsources true
  51. $ sql-server-execute name=sql-server
  52. INSERT INTO dummy VALUES (1);
  53. > SELECT * FROM t1_add_subsource;
  54. a
  55. b
  56. c
  57. <null>
  58. > ALTER SOURCE my_source_add_subsources ADD SUBSOURCE dbo.t2_add_subsource;
  59. # Wait until snapshot has emitted stats and then insert a new row
  60. # to force LSN in MS SQL to progress.
  61. > SELECT s.name, ss.snapshot_records_known = ss.snapshot_records_staged
  62. FROM mz_internal.mz_source_statistics ss JOIN mz_sources s using (id)
  63. WHERE s.name = 'my_source_add_subsources' AND ss.snapshot_records_staged > 0;
  64. my_source_add_subsources true
  65. $ sql-server-execute name=sql-server
  66. INSERT INTO dummy VALUES (1);
  67. > SELECT * FROM t2_add_subsource;
  68. 100
  69. 200
  70. 300
  71. <null>
  72. # Add some more data to ensure the replication continues.
  73. $ sql-server-execute name=sql-server
  74. INSERT INTO t1_add_subsource VALUES ('d');
  75. INSERT INTO t2_add_subsource VALUES ('400');
  76. > SELECT * FROM t1_add_subsource;
  77. a
  78. b
  79. c
  80. d
  81. <null>
  82. > SELECT * FROM t2_add_subsource;
  83. 100
  84. 200
  85. 300
  86. 400
  87. <null>
  88. $ sql-server-execute name=sql-server
  89. INSERT INTO t1_add_subsource VALUES ('e');
  90. INSERT INTO t2_add_subsource VALUES ('500');
  91. > DROP SOURCE t1_add_subsource;
  92. > SELECT * FROM t2_add_subsource;
  93. 100
  94. 200
  95. 300
  96. 400
  97. 500
  98. <null>
  99. > ALTER SOURCE my_source_add_subsources ADD SUBSOURCE dbo.t1_add_subsource;
  100. # Wait until snapshot has emitted stats and then insert a new row
  101. # to force LSN in MS SQL to progress.
  102. > SELECT s.name, ss.snapshot_records_known = ss.snapshot_records_staged
  103. FROM mz_internal.mz_source_statistics ss JOIN mz_sources s using (id)
  104. WHERE s.name = 'my_source_add_subsources' AND ss.snapshot_records_staged > 0;
  105. my_source_add_subsources true
  106. $ sql-server-execute name=sql-server
  107. INSERT INTO dummy VALUES (1);
  108. > SELECT * FROM t1_add_subsource;
  109. a
  110. b
  111. c
  112. d
  113. e
  114. <null>
  115. $ sql-server-execute name=sql-server
  116. INSERT INTO t1_add_subsource VALUES ('f');
  117. > SELECT * FROM t1_add_subsource;
  118. a
  119. b
  120. c
  121. d
  122. e
  123. f
  124. <null>
  125. > DROP SOURCE my_source_add_subsources CASCADE;