Skip to content

Commit 5526607

Browse files
committed
Document M compatibility SQL limitations
1 parent 0f7edfd commit 5526607

4 files changed

Lines changed: 22 additions & 0 deletions

File tree

‎.gitignore‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,4 @@ release/
1313
_local/
1414
tests/test_edge_cases.py
1515
tests/test_edge_cases2.py
16+
tests/test_edge_cases3.py

‎README.md‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,9 @@ Windows 实机测试步骤、前置条件、测试场景和真实数据库地址
160160
## 已知限制
161161

162162
- GaussDB 集中式不支持 PostgreSQL `ON CONFLICT` upsert 语法。SQLAlchemy PostgreSQL 方言的 `insert(...).on_conflict_do_update()` 会生成 `ON CONFLICT` SQL,当前版本仅声明该限制,不做自动改写。
163+
- M 兼容下 `LIKE` 默认大小写不敏感,符合 MySQL 风格行为;A/B 兼容下 `LIKE` 为大小写敏感。跨兼容模式迁移时需要单独确认查询语义。
164+
- M 兼容下不支持 `INTERSECT` / `EXCEPT` 集合运算;SQLAlchemy 的 `intersect()` / `except_()` 在 M 兼容库上会由数据库返回语法错误。
165+
- M 兼容下 raw SQL `CREATE TEMP TABLE` 不支持,需使用 `CREATE TEMPORARY TABLE`;通过 SQLAlchemy 创建临时表时建议显式使用 `prefixes=["TEMPORARY"]`。
163166

164167
## 并发限制
165168

‎docs/Windows测试指导手册.md‎

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -468,6 +468,14 @@ pytest -m integration -rs
468468

469469
GaussDB 集中式不支持 PostgreSQL `ON CONFLICT` upsert 语法。SQLAlchemy PostgreSQL 方言的 `insert(...).on_conflict_do_update()` 会生成 `ON CONFLICT` SQL,如果数据库返回语法或能力限制错误,属于 GaussDB 集中式限制,不是 Windows 环境或 JDBC 驱动安装问题。
470470

471+
### 6.8 M 兼容 LIKE、INTERSECT、EXCEPT 或临时表语法失败
472+
473+
以下现象属于 M 兼容模式的数据库行为差异,不是 Windows 环境问题:
474+
475+
- `LIKE` 默认大小写不敏感,测试断言不能按 A/B 兼容的大小写敏感结果编写。
476+
- `INTERSECT` / `EXCEPT` 不支持,SQLAlchemy 的 `intersect()` / `except_()` 在 M 兼容库上会失败。
477+
- raw SQL `CREATE TEMP TABLE` 不支持,应改为 `CREATE TEMPORARY TABLE`;SQLAlchemy Core 建临时表建议使用 `prefixes=["TEMPORARY"]`。
478+
471479
判断驱动核心能力时,以 `run_integration_probe.py` 和 pytest 集成测试结果为主。
472480

473481
## 7. 测试报告模板

‎docs/常见问题.md‎

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,13 @@ pytest -m integration
111111
GaussDB 集中式不支持 PostgreSQL `ON CONFLICT` upsert 语法。SQLAlchemy PostgreSQL 方言的 `insert(...).on_conflict_do_update()` 会生成 `ON CONFLICT` SQL,在集中式库上会由数据库返回语法或能力限制错误。
112112

113113
建议业务侧使用目标兼容模式支持的替代写法,或在应用层拆成先查后插、先更新后插等显式流程。
114+
115+
## 10. M 兼容下 LIKE、INTERSECT、EXCEPT 和临时表有什么差异?
116+
117+
M 兼容更接近 MySQL 风格,以下差异属于数据库兼容模式行为,不是驱动 bug:
118+
119+
- `LIKE` 默认大小写不敏感;A/B 兼容下通常为大小写敏感。
120+
- `INTERSECT` / `EXCEPT` 不支持;SQLAlchemy 的 `intersect()` / `except_()` 在 M 兼容库上会执行失败。
121+
- raw SQL `CREATE TEMP TABLE` 不支持,应改为 `CREATE TEMPORARY TABLE`。
122+
123+
如果通过 SQLAlchemy Core 创建临时表,建议显式使用 `prefixes=["TEMPORARY"]`,避免生成不兼容的临时表语法。

0 commit comments

Comments
 (0)