diff --git a/docs/sql/tms_schema_init_steps.md b/docs/sql/tms_schema_init_steps.md index 6e2945e..e87fa65 100644 --- a/docs/sql/tms_schema_init_steps.md +++ b/docs/sql/tms_schema_init_steps.md @@ -1,6 +1,6 @@ # TMS 初始化 SQL 执行说明 -当前推荐使用 [tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/docs/sql/tms_schema_full.sql)。 +当前推荐使用 [V1__tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/db/migration/V1__tms_schema_full.sql)。 这份脚本已经整理成“最终库结构初始化版”,适合空库直接初始化,不再按 migration 逐步执行 `ALTER / RENAME`。 @@ -18,7 +18,7 @@ SQL Error [8130] [HY000]: client has multi-statement capability disabled 优先用客户端的 `Run Script` / `Execute Script` 模式执行: -- [tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/docs/sql/tms_schema_full.sql) +- [V1__tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/db/migration/V1__tms_schema_full.sql) ### 方式二:用“脚本执行”而不是“单次执行” @@ -30,13 +30,13 @@ SQL Error [8130] [HY000]: client has multi-statement capability disabled 例如: ```bash -mysql -h -P -u -p tms < /path/to/tms_schema_full.sql +mysql -h -P -u -p tms < /path/to/V1__tms_schema_full.sql ``` 或者先登录后: ```sql -source /path/to/tms_schema_full.sql; +source /path/to/V1__tms_schema_full.sql; ``` ### 方式四:实在只能单条执行时 @@ -51,7 +51,7 @@ CREATE DATABASE IF NOT EXISTS tms USE tms; ``` -然后把 [tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/docs/sql/tms_schema_full.sql) 中的语句按分号逐条执行。 +然后把 [V1__tms_schema_full.sql](/Users/waner/Work/CISD/文档/tms-framework/src/main/resources/db/migration/V1__tms_schema_full.sql) 中的语句按分号逐条执行。 ## 不推荐但可选 diff --git a/src/main/resources/db/migration/V10__create_t_upgrade_task.sql b/src/main/resources/db/migration/V10__create_t_upgrade_task.sql deleted file mode 100644 index e9adbad..0000000 --- a/src/main/resources/db/migration/V10__create_t_upgrade_task.sql +++ /dev/null @@ -1,26 +0,0 @@ -CREATE TABLE IF NOT EXISTS t_upgrade_task ( - id BIGINT PRIMARY KEY, - task_id VARCHAR(64) NOT NULL, - upgrade_mode VARCHAR(16) NOT NULL, - target_component VARCHAR(32) NOT NULL, - package_file_id VARCHAR(64) NOT NULL, - package_name VARCHAR(255) NOT NULL, - package_hash VARCHAR(128) NOT NULL, - current_version VARCHAR(64) NOT NULL, - target_version VARCHAR(64) NOT NULL, - status VARCHAR(32) NOT NULL, - verify_passed TINYINT(1) NOT NULL DEFAULT 0, - verify_message VARCHAR(1024) NULL, - manifest_json TEXT NULL, - detail_log_path VARCHAR(1024) NULL, - error_message VARCHAR(1024) NULL, - operator VARCHAR(64) NULL, - started_at DATETIME(3) NULL, - finished_at DATETIME(3) NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_t_upgrade_task_task_id (task_id), - KEY idx_t_upgrade_task_status (status), - KEY idx_t_upgrade_task_component (target_component), - KEY idx_t_upgrade_task_create_time (create_time) -); diff --git a/src/main/resources/db/migration/V11__auth_role_ukey_session_tables.sql b/src/main/resources/db/migration/V11__auth_role_ukey_session_tables.sql deleted file mode 100644 index 97fd5ee..0000000 --- a/src/main/resources/db/migration/V11__auth_role_ukey_session_tables.sql +++ /dev/null @@ -1,157 +0,0 @@ -CREATE TABLE IF NOT EXISTS tms_role_account ( - id BIGINT PRIMARY KEY, - role_code VARCHAR(64) NOT NULL, - display_name VARCHAR(128) NOT NULL, - required_ukey_count INT NOT NULL, - password_hash VARCHAR(256) NOT NULL, - password_salt VARCHAR(128) NOT NULL, - status VARCHAR(32) NOT NULL, - need_change_password TINYINT(1) NOT NULL DEFAULT 1, - failed_count INT NOT NULL DEFAULT 0, - locked_until DATETIME(3) NULL, - last_login_at DATETIME(3) NULL, - last_active_at DATETIME(3) NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_role_account_role_code (role_code) -); - -CREATE TABLE IF NOT EXISTS tms_role_ukey_binding ( - id BIGINT PRIMARY KEY, - role_code VARCHAR(64) NOT NULL, - slot_no INT NOT NULL, - ukey_serial VARCHAR(128) NOT NULL, - ukey_pubkey TEXT NOT NULL, - issuer_sign TEXT NULL, - status VARCHAR(32) NOT NULL, - bound_at DATETIME(3) NOT NULL, - unbound_at DATETIME(3) NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_role_ukey_binding_role_slot (role_code, slot_no), - KEY idx_tms_role_ukey_binding_role_status (role_code, status) -); - -CREATE TABLE IF NOT EXISTS tms_auth_session ( - id BIGINT PRIMARY KEY, - session_token VARCHAR(128) NOT NULL, - role_code VARCHAR(64) NOT NULL, - auth_level VARCHAR(32) NOT NULL, - issued_at DATETIME(3) NOT NULL, - last_active_at DATETIME(3) NOT NULL, - expires_at DATETIME(3) NOT NULL, - logout_at DATETIME(3) NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_auth_session_token (session_token), - KEY idx_tms_auth_session_role_code (role_code) -); - -CREATE TABLE IF NOT EXISTS tms_auth_challenge ( - id BIGINT PRIMARY KEY, - challenge_id VARCHAR(128) NOT NULL, - role_code VARCHAR(64) NOT NULL, - purpose VARCHAR(32) NOT NULL, - nonce VARCHAR(256) NOT NULL, - expires_at DATETIME(3) NOT NULL, - used TINYINT(1) NOT NULL DEFAULT 0, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_auth_challenge_challenge_id (challenge_id) -); - -CREATE TABLE IF NOT EXISTS tms_auth_audit_log ( - id BIGINT PRIMARY KEY, - event_type VARCHAR(64) NOT NULL, - role_code VARCHAR(64) NULL, - operator_role_code VARCHAR(64) NULL, - result VARCHAR(32) NOT NULL, - detail_json JSON NULL, - remote_ip VARCHAR(64) NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - KEY idx_tms_auth_audit_log_event_type (event_type), - KEY idx_tms_auth_audit_log_role_code (role_code) -); - -INSERT IGNORE INTO tms_role_account ( - id, - role_code, - display_name, - required_ukey_count, - password_hash, - password_salt, - status, - need_change_password, - failed_count, - locked_until, - last_login_at, - last_active_at, - create_time, - update_time -) -VALUES - ( - 11001, - 'SUPER_ADMIN', - '超级管理员', - 3, - 'Viuew8WE+qziUZwGGU0x25cUpzsTF+QvQFU0uhb+yVA=', - 'init-super-admin-salt-20260325', - 'UNENABLED', - 1, - 0, - NULL, - NULL, - NULL, - CURRENT_TIMESTAMP(3), - CURRENT_TIMESTAMP(3) - ), - ( - 11002, - 'KEY_ADMIN', - '密钥管理员', - 2, - '/xqmDy3A/q9X5p7XWznIPSBabQ6bxTLAPgtHQ6Be33c=', - 'init-key-admin-salt-20260325', - 'ACTIVE', - 1, - 0, - NULL, - NULL, - NULL, - CURRENT_TIMESTAMP(3), - CURRENT_TIMESTAMP(3) - ), - ( - 11003, - 'AUDIT_ADMIN', - '审计管理员', - 1, - 'j/J1LKyUOzVEJfbbHe2dwKBKNdabRk502olk/LWIwhg=', - 'init-audit-admin-salt-20260325', - 'UNENABLED', - 1, - 0, - NULL, - NULL, - NULL, - CURRENT_TIMESTAMP(3), - CURRENT_TIMESTAMP(3) - ), - ( - 11004, - 'OPS_ADMIN', - '运维管理员', - 1, - '2e9F4aCgsDb+AuD1LrBEqEg8yjy3ODo27UHtx06vj/A=', - 'init-ops-admin-salt-20260325', - 'UNENABLED', - 1, - 0, - NULL, - NULL, - NULL, - CURRENT_TIMESTAMP(3), - CURRENT_TIMESTAMP(3) - ); diff --git a/src/main/resources/db/migration/V12__refactor_auth_login_model.sql b/src/main/resources/db/migration/V12__refactor_auth_login_model.sql deleted file mode 100644 index b83b331..0000000 --- a/src/main/resources/db/migration/V12__refactor_auth_login_model.sql +++ /dev/null @@ -1,16 +0,0 @@ -ALTER TABLE tms_auth_session - ADD COLUMN auth_method VARCHAR(32) NULL AFTER role_code; - -UPDATE tms_auth_session -SET auth_method = CASE - WHEN auth_level = 'FULL' THEN 'UKEY' - ELSE 'PASSWORD' -END -WHERE auth_method IS NULL; - -ALTER TABLE tms_auth_session - MODIFY COLUMN auth_method VARCHAR(32) NOT NULL; - -ALTER TABLE tms_role_ukey_binding - ADD COLUMN uid VARCHAR(64) NULL AFTER slot_no, - ADD COLUMN rid VARCHAR(64) NULL AFTER uid; diff --git a/src/main/resources/db/migration/V1__init_auth_device_tables.sql b/src/main/resources/db/migration/V1__init_auth_device_tables.sql deleted file mode 100644 index baafc6f..0000000 --- a/src/main/resources/db/migration/V1__init_auth_device_tables.sql +++ /dev/null @@ -1,29 +0,0 @@ -CREATE TABLE IF NOT EXISTS tms_init_task ( - id BIGINT PRIMARY KEY, - task_id VARCHAR(64) NOT NULL, - version VARCHAR(32) NOT NULL, - status VARCHAR(32) NOT NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_init_task_task_id (task_id) -); - -CREATE TABLE IF NOT EXISTS tms_auth_user ( - id BIGINT PRIMARY KEY, - username VARCHAR(64) NOT NULL, - display_name VARCHAR(128) NOT NULL, - role VARCHAR(64) NOT NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_auth_user_username (username) -); - -CREATE TABLE IF NOT EXISTS tms_device_node ( - id BIGINT PRIMARY KEY, - node_id VARCHAR(64) NOT NULL, - host VARCHAR(128) NOT NULL, - status VARCHAR(32) NOT NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_device_node_node_id (node_id) -); diff --git a/docs/sql/tms_schema_full.sql b/src/main/resources/db/migration/V1__tms_schema_full.sql similarity index 90% rename from docs/sql/tms_schema_full.sql rename to src/main/resources/db/migration/V1__tms_schema_full.sql index 1119634..30ce370 100644 --- a/docs/sql/tms_schema_full.sql +++ b/src/main/resources/db/migration/V1__tms_schema_full.sql @@ -1,20 +1,14 @@ -- ----------------------------------------------------------------------------- --- TMS 最终库结构初始化脚本 --- 适用范围:新库初始化 +-- TMS 全量库结构初始化脚本 +-- 适用范围:空库初始化 / Flyway 首次建库 -- 数据库:TiDB / MySQL 8+ -- -- 说明: --- 1. 本文件按当前项目最终表结构整理,适合“空库初始化”。 --- 2. 不再按 V1-V11 逐步执行 ALTER / RENAME,避免初始化时出现兼容性问题。 --- 3. 若用于已有库升级,请继续使用 Flyway migration,而不是本文件。 +-- 1. 本文件是当前仓库唯一保留的数据库初始化 SQL。 +-- 2. 结构已按当前最终状态汇总,不再依赖历史 V1~V12 逐步迁移。 +-- 3. 执行前请先选中目标数据库,本文件不再包含 CREATE DATABASE / USE。 -- ----------------------------------------------------------------------------- -CREATE DATABASE IF NOT EXISTS tms - DEFAULT CHARACTER SET utf8mb4 - COLLATE utf8mb4_general_ci; - -USE tms; - -- ----------------------------------------------------------------------------- -- 初始化任务 -- ----------------------------------------------------------------------------- @@ -106,12 +100,12 @@ CREATE TABLE IF NOT EXISTS tms_device_software_version ( INSERT INTO tms_device_software_version (id, component_code, component_name, current_version, source_type, detected_at, remarks) VALUES - (1001, 'RABBITMQ', '消息队列', 'RabbitMQ V3.8.21', 'MANUAL', NOW(), '出厂预置'), - (1002, 'TLQ', '消息队列', 'tonglink/Q V8.1.11', 'MANUAL', NOW(), '出厂预置'), - (1003, 'TIDB', '数据库', 'TiDB V8.1.0', 'MANUAL', NOW(), '出厂预置'), - (1004, 'NGINX', 'Nginx', 'Nginx V1.20', 'MANUAL', NOW(), '出厂预置'), - (1005, 'APP', '标准收发器企业版', '标准收发器企业版 V1.3.2', 'MANUAL', NOW(), '出厂预置'), - (1006, 'TMS', 'CISD终端管理服务', 'CISD终端管理服务 V1.0.0', 'MANUAL', NOW(), '出厂预置') + (1001, 'RABBITMQ', '消息队列', 'V3.8.21', 'MANUAL', NOW(), '出厂预置'), + (1002, 'TLQ', '消息队列', 'V8.1.11', 'MANUAL', NOW(), '出厂预置'), + (1003, 'TIDB', '数据库', 'V8.1.0', 'MANUAL', NOW(), '出厂预置'), + (1004, 'NGINX', 'Nginx', 'V1.20', 'MANUAL', NOW(), '出厂预置'), + (1005, 'APP', '标准收发器企业版', 'V1.3.2', 'MANUAL', NOW(), '出厂预置'), + (1006, 'TMS', 'CISD终端管理服务', 'V1.0.0', 'MANUAL', NOW(), '出厂预置') ON DUPLICATE KEY UPDATE component_name = VALUES(component_name), current_version = VALUES(current_version), @@ -177,6 +171,8 @@ CREATE TABLE IF NOT EXISTS tms_role_ukey_binding ( id BIGINT PRIMARY KEY, role_code VARCHAR(64) NOT NULL, slot_no INT NOT NULL, + uid VARCHAR(64) NULL, + rid VARCHAR(64) NULL, ukey_serial VARCHAR(128) NOT NULL, ukey_pubkey TEXT NOT NULL, issuer_sign TEXT NULL, @@ -193,6 +189,7 @@ CREATE TABLE IF NOT EXISTS tms_auth_session ( id BIGINT PRIMARY KEY, session_token VARCHAR(128) NOT NULL, role_code VARCHAR(64) NOT NULL, + auth_method VARCHAR(32) NOT NULL, auth_level VARCHAR(32) NOT NULL, issued_at DATETIME(3) NOT NULL, last_active_at DATETIME(3) NOT NULL, diff --git a/src/main/resources/db/migration/V2__extend_init_task_columns.sql b/src/main/resources/db/migration/V2__extend_init_task_columns.sql deleted file mode 100644 index 06bf7c5..0000000 --- a/src/main/resources/db/migration/V2__extend_init_task_columns.sql +++ /dev/null @@ -1,6 +0,0 @@ -ALTER TABLE tms_init_task - ADD COLUMN IF NOT EXISTS product_type VARCHAR(16) NULL, - ADD COLUMN IF NOT EXISTS org_code VARCHAR(32) NULL, - ADD COLUMN IF NOT EXISTS mq_type VARCHAR(32) NULL, - ADD COLUMN IF NOT EXISTS deploy_mode VARCHAR(16) NULL, - ADD COLUMN IF NOT EXISTS init_plan_json LONGTEXT NULL; diff --git a/src/main/resources/db/migration/V3__create_init_task_step_table.sql b/src/main/resources/db/migration/V3__create_init_task_step_table.sql deleted file mode 100644 index babb6d4..0000000 --- a/src/main/resources/db/migration/V3__create_init_task_step_table.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE IF NOT EXISTS tms_init_task_step ( - id BIGINT PRIMARY KEY, - task_id VARCHAR(64) NOT NULL, - step_no INT NOT NULL, - step_code VARCHAR(64) NOT NULL, - status VARCHAR(32) NOT NULL, - message VARCHAR(512) NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_init_task_step_task_no (task_id, step_no), - KEY idx_tms_init_task_step_task_id (task_id) -); diff --git a/src/main/resources/db/migration/V4__extend_init_task_step_columns.sql b/src/main/resources/db/migration/V4__extend_init_task_step_columns.sql deleted file mode 100644 index a5cc188..0000000 --- a/src/main/resources/db/migration/V4__extend_init_task_step_columns.sql +++ /dev/null @@ -1,4 +0,0 @@ -ALTER TABLE tms_init_task_step - ADD COLUMN IF NOT EXISTS command_line VARCHAR(2048) NULL, - ADD COLUMN IF NOT EXISTS log_path VARCHAR(512) NULL, - ADD COLUMN IF NOT EXISTS exit_code INT NULL; diff --git a/src/main/resources/db/migration/V5__create_sys_file_record.sql b/src/main/resources/db/migration/V5__create_sys_file_record.sql deleted file mode 100644 index ef6b109..0000000 --- a/src/main/resources/db/migration/V5__create_sys_file_record.sql +++ /dev/null @@ -1,10 +0,0 @@ -CREATE TABLE IF NOT EXISTS tms_file_record ( - id BIGINT PRIMARY KEY, - file_id VARCHAR(64) NOT NULL, - original_filename VARCHAR(255) NOT NULL, - storage_path VARCHAR(1024) NOT NULL, - status VARCHAR(32) NOT NULL, - create_time DATETIME(3) NOT NULL, - update_time DATETIME(3) NOT NULL, - UNIQUE KEY uk_tms_file_record_file_id (file_id) -); diff --git a/src/main/resources/db/migration/V6__extend_init_task_type.sql b/src/main/resources/db/migration/V6__extend_init_task_type.sql deleted file mode 100644 index 3cdc255..0000000 --- a/src/main/resources/db/migration/V6__extend_init_task_type.sql +++ /dev/null @@ -1,2 +0,0 @@ -ALTER TABLE tms_init_task - ADD COLUMN task_type VARCHAR(32) NOT NULL DEFAULT 'INIT' COMMENT '任务类型:INIT/RESET' AFTER task_id; diff --git a/src/main/resources/db/migration/V7__create_sys_device_software_version.sql b/src/main/resources/db/migration/V7__create_sys_device_software_version.sql deleted file mode 100644 index 3cb7de2..0000000 --- a/src/main/resources/db/migration/V7__create_sys_device_software_version.sql +++ /dev/null @@ -1,12 +0,0 @@ -CREATE TABLE IF NOT EXISTS sys_device_software_version ( - id BIGINT PRIMARY KEY, - component_code VARCHAR(64) NOT NULL, - component_name VARCHAR(128) NOT NULL, - current_version VARCHAR(128) NOT NULL, - source_type VARCHAR(32) NOT NULL, - detected_at DATETIME NULL, - remarks VARCHAR(255) NULL, - create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, - update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, - UNIQUE KEY uk_sys_device_software_version_component_code (component_code) -); diff --git a/src/main/resources/db/migration/V8__rename_sys_device_software_version_table.sql b/src/main/resources/db/migration/V8__rename_sys_device_software_version_table.sql deleted file mode 100644 index 3051105..0000000 --- a/src/main/resources/db/migration/V8__rename_sys_device_software_version_table.sql +++ /dev/null @@ -1 +0,0 @@ -RENAME TABLE sys_device_software_version TO tms_device_software_version; diff --git a/src/main/resources/db/migration/V9__seed_tms_device_software_version.sql b/src/main/resources/db/migration/V9__seed_tms_device_software_version.sql deleted file mode 100644 index f7327ff..0000000 --- a/src/main/resources/db/migration/V9__seed_tms_device_software_version.sql +++ /dev/null @@ -1,15 +0,0 @@ -INSERT INTO tms_device_software_version -(id, component_code, component_name, current_version, source_type, detected_at, remarks) -VALUES - (1001, 'RABBITMQ', '消息队列', 'RabbitMQ V3.8.21', 'MANUAL', NOW(), '出厂预置'), - (1002, 'TLQ', '消息队列', 'tonglink/Q V8.1.11', 'MANUAL', NOW(), '出厂预置'), - (1003, 'TIDB', '数据库', 'TiDB V8.1.0', 'MANUAL', NOW(), '出厂预置'), - (1004, 'NGINX', 'Nginx', 'Nginx V1.20', 'MANUAL', NOW(), '出厂预置'), - (1005, 'APP', '标准收发器企业版', '标准收发器企业版 V1.3.2', 'MANUAL', NOW(), '出厂预置') -ON DUPLICATE KEY UPDATE - component_name = VALUES(component_name), - current_version = VALUES(current_version), - source_type = VALUES(source_type), - detected_at = VALUES(detected_at), - remarks = VALUES(remarks), - update_time = CURRENT_TIMESTAMP; diff --git a/src/test/java/com/cisd/tms/TmsApplicationTests.java b/src/test/java/com/cisd/tms/TmsApplicationTests.java index f06f6b0..bd4a89a 100644 --- a/src/test/java/com/cisd/tms/TmsApplicationTests.java +++ b/src/test/java/com/cisd/tms/TmsApplicationTests.java @@ -44,7 +44,7 @@ class TmsApplicationTests { @Test void shouldCreateAuthRoleTablesAndSeedFixedRoleAccounts() { - ClassPathResource migration = new ClassPathResource("db/migration/V11__auth_role_ukey_session_tables.sql"); + ClassPathResource migration = new ClassPathResource("db/migration/V1__tms_schema_full.sql"); org.junit.jupiter.api.Assertions.assertTrue(migration.exists()); @@ -55,6 +55,9 @@ class TmsApplicationTests { org.junit.jupiter.api.Assertions.assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS tms_role_account")); org.junit.jupiter.api.Assertions.assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS tms_role_ukey_binding")); org.junit.jupiter.api.Assertions.assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS tms_auth_session")); + org.junit.jupiter.api.Assertions.assertTrue(sql.contains("auth_method VARCHAR(32) NOT NULL")); + org.junit.jupiter.api.Assertions.assertTrue(sql.contains("uid VARCHAR(64) NULL")); + org.junit.jupiter.api.Assertions.assertTrue(sql.contains("rid VARCHAR(64) NULL")); org.junit.jupiter.api.Assertions.assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS tms_auth_challenge")); org.junit.jupiter.api.Assertions.assertTrue(sql.contains("CREATE TABLE IF NOT EXISTS tms_auth_audit_log")); org.junit.jupiter.api.Assertions.assertTrue(sql.contains("'KEY_ADMIN'"));