25-constraints.td 3.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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_25;
  16. CREATE DATABASE test_25;
  17. USE test_25;
  18. EXEC sys.sp_cdc_enable_db;
  19. ALTER DATABASE test_25 SET ALLOW_SNAPSHOT_ISOLATION ON;
  20. CREATE TABLE t25_pk (key_col VARCHAR(20) PRIMARY KEY, val_col VARCHAR(1024) NOT NULL, extra VARCHAR(200));
  21. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 't25_pk', @role_name = 'SA', @supports_net_changes = 0;
  22. INSERT INTO t25_pk VALUES ('a', 'hello world', NULL), ('b', 'foobar', 'apple'), ('c', 'anotha one', 'orange');
  23. CREATE TABLE t25_pk2 (id VARCHAR(20), seq_no VARCHAR(1024), extra VARCHAR(200), PRIMARY KEY(id, seq_no));
  24. EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 't25_pk2', @role_name = 'SA', @supports_net_changes = 0;
  25. INSERT INTO t25_pk2 VALUES ('i am an ID', '1000', 'uhhmmmm');
  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. > CREATE CONNECTION sql_server_test_25_connection TO SQL SERVER (
  33. HOST 'sql-server',
  34. PORT 1433,
  35. DATABASE test_25,
  36. USER '${arg.default-sql-server-user}',
  37. PASSWORD = SECRET sql_server_pass
  38. );
  39. > CREATE SOURCE t25_pk_sql_server
  40. FROM SQL SERVER CONNECTION sql_server_test_25_connection
  41. FOR ALL TABLES;
  42. > SELECT name, regexp_replace(create_sql, '[us]\d+|__.*__[A-F0-9]+|DETAILS = ''[a-f0-9]+''', '<VAR>', 'g') as sql FROM mz_sources WHERE name IN ('t25_pk', 't25_pk2');
  43. t25_pk "CREATE SUBSOURCE \"materialize\".\"public\".\"t25_pk\" (\"key_col\" [<VAR> AS \"pg_catalog\".\"varchar\"](20) NOT NULL, \"val_col\" [<VAR> AS \"pg_catalog\".\"varchar\"](1024) NOT NULL, \"extra\" [<VAR> AS \"pg_catalog\".\"varchar\"](200), CONSTRAINT \"PK<VAR>\" PRIMARY KEY (\"key_col\")) OF SOURCE [<VAR> AS \"materialize\".\"public\".\"t25_pk_sql_server\"] WITH (EXTERNAL REFERENCE = \"test_25\".\"dbo\".\"t25_pk\", <VAR>)"
  44. t25_pk2 "CREATE SUBSOURCE \"materialize\".\"public\".\"t25_pk2\" (\"id\" [<VAR> AS \"pg_catalog\".\"varchar\"](20) NOT NULL, \"seq_no\" [<VAR> AS \"pg_catalog\".\"varchar\"](1024) NOT NULL, \"extra\" [<VAR> AS \"pg_catalog\".\"varchar\"](200), CONSTRAINT \"PK<VAR>\" PRIMARY KEY (\"id\", \"seq_no\")) OF SOURCE [<VAR> AS \"materialize\".\"public\".\"t25_pk_sql_server\"] WITH (EXTERNAL REFERENCE = \"test_25\".\"dbo\".\"t25_pk2\", <VAR>)"
  45. > SHOW COLUMNS FROM t25_pk
  46. key_col false "character varying" ""
  47. val_col false "character varying" ""
  48. extra true "character varying" ""
  49. # Wait until snapshot has emitted stats and then insert a new row
  50. # to force LSN in MS SQL to progress.
  51. > SELECT s.name, ss.snapshot_records_known = ss.snapshot_records_staged
  52. FROM mz_internal.mz_source_statistics ss JOIN mz_sources s using (id)
  53. WHERE s.name = 't25_pk_sql_server' AND ss.snapshot_records_staged > 0;
  54. t25_pk_sql_server true
  55. $ sql-server-execute name=sql-server
  56. INSERT INTO dummy VALUES (1);
  57. > SELECT * FROM t25_pk;
  58. a "hello world" <null>
  59. b foobar apple
  60. c "anotha one" orange
  61. > DROP SOURCE t25_pk_sql_server CASCADE;