MySqlSchemaSqlGenerator 第一版實作與驗證紀錄

記錄 SQL Generator 第一版完成內容、測試結果、限制與下一步。

返回 docs

MySqlSchemaSqlGenerator 第一版實作與驗證紀錄

1. 驗證節點摘要

項目內容
驗證節點名稱MySqlSchemaSqlGenerator 第一版
驗證日期2026-05-30
程式 repohs-device-control-template
實作 commit9bd1ec1
驗證分支poc/nmodbus-tcp
驗證 commit6c5cd01
文件網站同步 commitfdabf8d
自動測試結果dotnet test 通過 270 個測試
狀態已完成第一版驗證

本節點確認 MySqlSchemaSqlGenerator 已能從 Schema Definition 產生 MySQL 5.6.2 相容的 CREATE TABLE IF NOT EXISTS SQL 字串。

本節點仍不代表已連線 MySQL,也不代表已執行 DDL。第一版刻意停在「可產生 SQL、可測試、可被審查」的安全範圍內。

2. 驗證目的

本次驗證的目的如下:

3. 已完成範圍

項目實際完成內容
SQL 產生器新增 MySqlSchemaSqlGenerator
Options新增 MySqlSchemaSqlGeneratorOptions
結果模型新增 SchemaSqlGenerateResult
支援輸入SchemaDefinitionTableDefinition
支援輸出CREATE TABLE IF NOT EXISTS SQL 字串
MySQL 版本以 MySQL 5.6.2 相容性作為第一版約束
Identifier驗證 table、column、index name 格式
型別白名單支援第一版 TaskStore 需要的基礎型別
Comment支援 table / column comment,並處理單引號 escaping
Index支援 primary key、一般 index、unique index
錯誤處理使用 SchemaDefinitionInvalid 回傳可讀錯誤
測試新增 MySqlSchemaSqlGeneratorTests

4. 實際測試結果

執行指令:

dotnet test

結果:

測試專案通過數
HS.DeviceControl.Core.Tests125
HS.DeviceControl.WorkflowSimulation.Tests11
HS.DeviceControl.Adapters.Tests108
HS.DeviceControl.ModbusPoc.Tests26
合計270

測試結果為全部通過。

執行時仍會出現 .NET 5.0 已不受支援NETSDK1138 warning,這是目前指定 .NET 5.0 的預期限制,不是本次 SQL Generator 新增造成的錯誤。

5. SQL Generator 測試涵蓋

測試方向驗證結果
產生 MySQL 5.6.2 相容 SQL可產生 CREATE TABLE IF NOT EXISTS
欄位 required / nullable可輸出 NOT NULL / NULL
Primary key可輸出 PRIMARY KEY,且 primary key 欄位強制 NOT NULL
一般 index可輸出 INDEX
Unique index可輸出 UNIQUE INDEX
多 table可由 SchemaDefinition 產生多筆 SQL
Comment escaping單引號會轉成 SQL 可接受的 ''
不支援型別jsontimestamp、超出範圍的 varchar 等會被擋下
不合法 table name空白、dash、dot、中文 identifier 會被擋下
缺少 primary key會回傳 SchemaDefinitionInvalid
index 指向不存在欄位會回傳 SchemaDefinitionInvalid
不使用反引號QuoteIdentifiers = false 時可產生未 quote 的 identifier

6. 第一版明確不做事項

不做事項原因
不連線 MySQL目前仍未進入真實 DB 驗證
不執行 DDL避免在行前資訊未確認前改動資料庫
不做 ALTER TABLE需要先設計 schema diff 與補欄位策略
不查 information_schema屬於 Schema Initializer 範圍
不導入 MySqlConnector第一版只產生字串,不需要 DB driver
不接 ConsoleHost / API啟動流程與 DB 初始化要另外設計
不建立 TaskStoreTaskStore 寫入 / 查詢 / 狀態恢復屬於後續節點

7. 實際效果

目前實際效果是:

換句話說,本節點把「欄位規格可由 C# Class 維護」往前推進到「可產生 SQL 並被測試保護」,但還沒有進入「自動建表執行」。

8. 風險與限制

風險 / 限制說明
尚未實測 MySQL 5.6.2目前是以字串規則與白名單測試保護,尚未送到真實 MySQL 執行
尚無 schema diff既有資料表缺欄位或缺索引時,還沒有 ALTER TABLE 產生策略
尚無 Dry Run 報告目前只有 SQL 字串,還沒有輸出「將新增哪些 table / column / index」的報告格式
尚無初始化入口ConsoleHost / ServiceHost / WebApi 尚未接 DB 初始化流程
尚未處理正式 DB 權限真實 DB 的 user、password、host、port、dbname 仍需由使用者提供並確認權限

9. 結論

MySqlSchemaSqlGenerator 第一版已達成目前節點目標:可由 schema definition 產生 MySQL 5.6.2 相容的 CREATE TABLE IF NOT EXISTS SQL,並由 270 個自動測試確認現有功能沒有回歸。

本節點可以標記為完成。

10. 建議下一步

建議下一步進入:

ALTER TABLE / Schema Initializer 實作前確認

建議先不要直接寫 DB 初始化器,而是先確認: