Files
beabigegg de38959568 docs: 更新 README 並封存 sql-query-management-refactor 提案
- 更新 README.md 反映目前開發狀態 (v3.0)
  - 新增設備狀態監控、設備歷史查詢功能說明
  - 新增 Redis 快取系統、SQL 查詢安全架構狀態
  - 擴展專案結構說明,展示 sql/ 模組細節
  - 新增 Redis 環境需求與設定說明
  - 補充 2026-01-29 ~ 2026-02-03 變更日誌
- 封存 sql-query-management-refactor 至 archive/2026-02-03-
- 同步 3 個新 specs 至主目錄 (sql-loader, query-builder, common-filters)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 16:40:01 +08:00

2.1 KiB
Raw Blame History

ADDED Requirements

Requirement: 參數化條件建構

系統 SHALL 提供 QueryBuilder 類別,建構參數化的 SQL 條件,避免 SQL 注入風險。

Scenario: 建構等值條件

  • WHEN 呼叫 builder.add_param_condition("status", "RUN")
  • THEN 產生條件 status = :p0params = {"p0": "RUN"}

Scenario: 建構 IN 條件

  • WHEN 呼叫 builder.add_in_condition("status", ["RUN", "QUEUE", "HOLD"])
  • THEN 產生條件 status IN (:p0, :p1, :p2)
  • AND params = {"p0": "RUN", "p1": "QUEUE", "p2": "HOLD"}

Scenario: 空值 IN 條件不產生語句

  • WHEN 呼叫 builder.add_in_condition("status", [])
  • THEN 不新增任何條件

Requirement: LIKE 條件安全處理

系統 SHALL 在建構 LIKE 條件時,自動跳脫 SQL 萬用字元(%_)。

Scenario: 跳脫 LIKE 萬用字元

  • WHEN 呼叫 builder.add_like_condition("name", "test%value")
  • THEN 產生條件 name LIKE :p0 ESCAPE '\'
  • AND params = {"p0": "%test\\%value%"}

Scenario: LIKE 位置控制

  • WHEN 呼叫 builder.add_like_condition("name", "prefix", position="start")
  • THEN params = {"p0": "prefix%"}(不含前綴 %

Requirement: WHERE 子句組合

系統 SHALL 自動組合多個條件為完整的 WHERE 子句。

Scenario: 多條件 AND 組合

  • WHEN 新增多個條件後呼叫 builder.build()
  • THEN 產生 WHERE cond1 AND cond2 AND cond3

Scenario: 無條件時不產生 WHERE

  • WHEN 未新增任何條件即呼叫 builder.build()
  • THEN {{ WHERE_CLAUSE }} 被替換為空字串

Requirement: NOT IN 條件建構

系統 SHALL 支援 NOT IN 條件,用於排除特定值。

Scenario: 建構 NOT IN 條件

  • WHEN 呼叫 builder.add_not_in_condition("location", ["ATEC", "F區"])
  • THEN 產生條件 location NOT IN (:p0, :p1)

Scenario: NOT IN 處理 NULL 值

  • WHEN 呼叫 builder.add_not_in_condition("location", values, allow_null=True)
  • THEN 產生條件 (location IS NULL OR location NOT IN (...))