修复经营分析副本库 ANSI 会话设置 #50

Merged
WuYongJie merged 1 commits from hotfix/WuYongJie-operations-replica-ansi-session into main 2026-08-14 13:51:18 +08:00
Owner

做了什么

  • 在 SQL Server 上游连接创建后统一启用 ANSI_NULLS 和 ANSI_WARNINGS。
  • 保持 UpstreamReadOnlyQuery 仍只接受单条 SELECT/WITH,不开放多语句或写操作。
  • 补充会话初始化单元测试。

原因

rpt.Bulk_Price_Limit 是异构/跨库只读视图。生产 FreeTDS 连接未开启必要 ANSI 选项时,SQL Server 返回 20018,导致商品价格首份快照进入安全冷却。

范围

  • 修改:modules/EcommerceFinance/Services/UpstreamOdbcConnection.php
  • 修改:tests/Unit/EcommerceFinance/UpstreamOdbcConnectionTest.php
  • 仅复用:operations_replica、supplier-payables.product-prices.list
  • 不涉及数据库迁移、权限、金额计算或上游写入。

验证

  • PHP lint:2 个文件通过。
  • 连接与只读入口:11 tests / 17 assertions 通过。
  • 商品价格 Repository、刷新器、页面:16 tests / 127 assertions 通过。
  • 生产同会话限量只读验证:指定条码返回 1 行、14 字段、约 414ms。
  • git diff --check 通过;完整 diff 无敏感内容。

风险与回滚

只新增 SQL Server 标准会话选项。若出现驱动兼容问题,回滚本 PR 合并提交即可;不会回写上游数据。

## 做了什么 - 在 SQL Server 上游连接创建后统一启用 `ANSI_NULLS` 和 `ANSI_WARNINGS`。 - 保持 `UpstreamReadOnlyQuery` 仍只接受单条 `SELECT/WITH`,不开放多语句或写操作。 - 补充会话初始化单元测试。 ## 原因 `rpt.Bulk_Price_Limit` 是异构/跨库只读视图。生产 FreeTDS 连接未开启必要 ANSI 选项时,SQL Server 返回 20018,导致商品价格首份快照进入安全冷却。 ## 范围 - 修改:`modules/EcommerceFinance/Services/UpstreamOdbcConnection.php` - 修改:`tests/Unit/EcommerceFinance/UpstreamOdbcConnectionTest.php` - 仅复用:`operations_replica`、`supplier-payables.product-prices.list` - 不涉及数据库迁移、权限、金额计算或上游写入。 ## 验证 - PHP lint:2 个文件通过。 - 连接与只读入口:11 tests / 17 assertions 通过。 - 商品价格 Repository、刷新器、页面:16 tests / 127 assertions 通过。 - 生产同会话限量只读验证:指定条码返回 1 行、14 字段、约 414ms。 - `git diff --check` 通过;完整 diff 无敏感内容。 ## 风险与回滚 只新增 SQL Server 标准会话选项。若出现驱动兼容问题,回滚本 PR 合并提交即可;不会回写上游数据。
WuYongJie added 1 commit 2026-08-14 13:50:23 +08:00
WuYongJie changed title from WIP: 修复经营分析副本库 ANSI 会话设置 to 修复经营分析副本库 ANSI 会话设置 2026-08-14 13:51:00 +08:00
WuYongJie merged commit 8d49b979c2 into main 2026-08-14 13:51:18 +08:00
WuYongJie deleted branch hotfix/WuYongJie-operations-replica-ansi-session 2026-08-14 13:51:18 +08:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WuYongJie/CaiWuXiTong#50
No description provided.