Open
Description
APIJSON Version/APIJSON 版本号
6.3.0
Database Type & Version/数据库类型及版本号
达梦8
Environment/环境信息
- JDK/基础库:11.0.16
- OS/系统:windows 10
APIAuto Screenshots/APIAuto 请求与结果完整截屏
代码定位截图(https://img-blog.csdnimg.cn/direct/5f0dfce1c33946148c98beedc89ca038.png)
数据请求截图(https://img-blog.csdnimg.cn/direct/917e8e5e1f2a4e39815a5c384a6109b3.png)
Current Behavior/问题描述
通过翻查源码,发现在AbstractSQLConfig类中,3203行的getOraclePageSql方法中,发现每一个进来的表sql都会默认拼接ROWNUM AS RN 的行数字段,当存在多表关联时,多个表都存在相同的RN列名,导致报错。印象中翻过一个issue有说过APIJSON会将每个相连的表建立alias(不知道是否只有mysql有,而oracle等其他库没有),但实际上达梦(oralce)并没有。包括联表内的字段都没有别名。请求参数中也无法通过建立别名影响RN列的生成。
------------------------
后端生成的sql:
SELECT * FROM (SELECT "Table20240311".*, ROWNUM RN FROM (SELECT "Table20240311".*, "Dd".* FROM "GR_BAS_DYMFORM"."Table20240311" AS "Table20240311"
LEFT JOIN ( SELECT * FROM (SELECT "Dd".*, ROWNUM RN FROM (SELECT "id" AS "Dd.id","pid" FROM "GR_BAS_DYMFORM"."Dd") "Dd" WHERE ROWNUM <= 0) WHERE RN > 0 ) AS "Dd" ON "Dd"."pid" = "Table20240311"."id"
) "Table20240311" WHERE ROWNUM <= 50) WHERE RN > 0
--------------
请求参数:
{
"[]": {
"join": "</Dd/pid@",
"Table20240311": {
"@datasource": "dm",
},
"Dd": {
"pid@": "/Table20240311/id",
"@datasource": "dm",
"@column": "id:Dd.id,pid;"
}, "query": 2,
"count": 50,
"page": 0,
},"info@":"/[]/info","total@":"/[]/total",
}
返回报错结果:
"msg": "第3 行附近出现错误:\n有歧义的列名[RN]",
Expected Behavior/期望结果
能否实现每个联表、字段都自动生成别名,让表字段唯一,互不影响。或者提供对默认的ROWNUM(RN)行数字段别名的修改。
Any additional comments?/其它补充说明?
无