[RFC]: Require a PlatformInterface in the DDL process* methods
維護者通常 1 天內回覆
還沒有人認領這個 Issue。
評估
研究方向
從 src/Sql/Ddl 中的 CreateTable、AlterTable 和 DropTable 的 process* 方法開始,並閱讀 AbstractSql::buildSqlString() 與 getSqlString() 以確認平台永遠為 non-null。將每個簽名從 ?PlatformInterface $adapterPlatform = null 改為 PlatformInterface $adapterPlatform,同時為了位置相容性在 processCombinedby() 和 processStatementEnd() 上保留該參數,然後以 mago analyze --ignore-baseline src/Sql 驗證 21 項發現如預期下降,且測試套件仍然通過。
由索引模型根據 Issue 內容生成。
描述
Proposed Version
Next minor
Basic Information
The process* methods on CreateTable, AlterTable and DropTable take ?PlatformInterface $adapterPlatform = null, but use it unconditionally: they call quoteIdentifier(), quoteTrustedValue(), processExpression() and resolveTable(), none of which accept null. Their only caller, AbstractSql::buildSqlString(), always passes a non-null platform.
This accounts for 21 analyzer findings in src/Sql/Ddl:
possibly-null-argument(8) andpossible-method-access-on-null(6).less-specific-nested-return-statement(4) andinvalid-return-statement(1): calling a method on a possibly-null platform yieldsmixed, so the arrays these methods return lose their element types.unused-parameter(2):CreateTable::processCombinedby()andprocessStatementEnd()receive the platform but don't use it.
Background
AbstractSql::getSqlString() supplies a default platform before calling buildSqlString(), so no path reaches these methods with null.
Considerations
- These are
protectedmethods. Making the parameter required narrows it for callers, but subclasses that override with?PlatformInterface $adapterPlatform = nullremain compatible, since a child may widen a parameter. - A subclass that calls
parent::processX()without arguments, or withnull, would get anArgumentCountErrororTypeError. None of the driver packages do this.
Proposal(s)
Change the signature of each DDL process* method to PlatformInterface $adapterPlatform. Keep the parameter on processCombinedby() and processStatementEnd(), since buildSqlString() passes it positionally to every process* method.
Appendix/Additional Info
Finding counts are from mago analyze --ignore-baseline src/Sql once the docblock typing in #204 is applied.
- 主要語言
- PHP
- 星號
- 18
- 分支
- 8
- 平均合併
- 6 天 11 小時
- 30 天內合併 PR
- 14
環境準備
- 提供 Dockerfile 或 Docker Compose 檔案
- 沒有 Pull Request 範本
- 沒有貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
php-db/phpdb 的其他 Issue
-
bug
難度 2/5 1-3 小時 新手友好度 82/100
維護者通常 1 天內回覆
-
RFC
難度 3/5 1-2 天 新手友好度 66/100
維護者通常 1 天內回覆
-
RFC
難度 5/5 一週以上 新手友好度 38/100
維護者通常 1 天內回覆
-
RFC
難度 4/5 3-5 天 新手友好度 45/100
維護者通常 1 天內回覆
-
Sql's foreign-table guard raises TypeError when its table is a TableIdentifier or aliased array可能已有人在做 @simon-mundy 於 3 天前認領。 未關閉bug
難度 2/5 1-3 小時 新手友好度 50/100
維護者通常 1 天內回覆
相似的 Issue
-
Bug Enhancement Performance
難度 2/5 1-3 小時 新手友好度 78/100
維護者通常 1 天內回覆
-
Feature Status: Needs Triage
難度 2/5 1-3 小時 新手友好度 73/100
維護者通常 1 天內回覆
-
frontend low-priority
難度 2/5 1-3 小時 新手友好度 77/100
mplodowski/dynamicpdf-plugin#336 ·
維護者通常 1 天內回覆
-
Add Zammad可能已有人在做 @Arslan-TR 今天認領。 未關閉request
難度 2/5 1-3 小時 新手友好度 66/100
endoflife-date/endoflife.date#11298 · 1 則留言 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 88/100
FriendsOfFlarum/best-answer#137 ·