Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug] join时 on语句生成时表没有使用别名导致SQL报错 #743

Open
daydayfantasy opened this issue Jul 24, 2024 · 2 comments
Open

Comments

@daydayfantasy
Copy link

APIJSON Version/APIJSON 版本号

7.0.3

Database Type & Version/数据库类型及版本号

msyql 8

Environment/环境信息

- JDK/基础库: oracle jdk 21
- OS/系统: macOS Sonoma

APIAuto Screenshots/APIAuto 请求与结果完整截屏

Current Behavior/问题描述

请求参数
{
    "sumBizDict[]":{
        "join":"</BusinessGroup:level2/parent_id@,</BusinessGroup:level3/parent_id@",
        "BusinessGroup":{
            "@column":"id;name",
            "level":1
        },
        "BusinessGroup:level2":{
            "parent_id@":"/BusinessGroup/id",
            "level":2
        },
        "BusinessGroup:level3":{
            "parent_id@":"/BusinessGroup:level2/id",
            "level":3
        }

    }
}

响应信息:
{
    "sumBizDict[]": {
        "BusinessGroup": {
            "@column": "id;name",
            "level": 1
        },
        "BusinessGroup:level2": {
            "parent_id@": "/BusinessGroup/id",
            "level": 2
        },
        "BusinessGroup:level3": {
            "parent_id@": "/BusinessGroup:level2/id",
            "level": 3
        },
        "join": "</BusinessGroup:level2/parent_id@,</BusinessGroup:level3/parent_id@"
    },
    "ok": false,
    "code": 500,
    "msg": "Unknown column 'BusinessGroup:level2.id' in 'on clause'"
}

控制台异常及生成的SQL语句:
Consume Time:6 ms 2024-07-24 16:32:27
 Execute SQL:SELECT `BusinessGroup`.`id`,`BusinessGroup`.`name`, `level2`.*, `level3`.* FROM `quick-boot-app-space`.`1813027492868489217_business_group` AS `BusinessGroup` LEFT JOIN ( SELECT * FROM `quick-boot-app-space`.`1813027492868489217_business_group` WHERE ( (`level` = 2) ) ) AS `level2` ON `level2`.`parent_id` = `BusinessGroup`.`id` LEFT JOIN ( SELECT * FROM `quick-boot-app-space`.`1813027492868489217_business_group` WHERE ( (`level` = 3) ) ) AS `level3` ON `level3`.`parent_id` = `BusinessGroup:level2`.`id` WHERE ( (`BusinessGroup`.`level` = 1) ) LIMIT 10

2024-07-24 04:32:27.688: AbstractParser.DEBUG: <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 


 已执行 1/200 条 SQL 


 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
apijson.orm.exception.CommonException: Unknown column 'BusinessGroup:level2.id' in 'on clause'

调试堆栈与问题代码:

Expected Behavior/期望结果

经调试,发现AbstractSQLConfig.concatJoinOn方法中有SQL语句拼接问题,
具体为AbstractSQLConfig 类的4819行和4831行 类似
sql += (first ? ON : AND) + quote + jt + quote + "." + quote + on.getKey() + quote + (isNot ? " != " : " = ")
							+ quote + on.getTargetTable() + quote + "." + quote + on.getTargetKey() + quote;

改为

sql += (first ? ON : AND) + quote + jt + quote + "." + quote + on.getKey() + quote + (isNot ? " != " : " = ")
							+ quote + on.getTargetAlias() + quote + "." + quote + on.getTargetKey() + quote;

Any additional comments?/其它补充说明?

No response

@daydayfantasy
Copy link
Author

调试截屏
image

@TommyLemon
Copy link
Collaborator

赞,可以为 APIJSON 提交 PR 贡献,谢谢,开源要大家一起参与贡献才会更美好~
image

提 PR 贡献代码的步骤可参考:
https://github.com/Tencent/APIJSON/blob/master/CONTRIBUTING.md#%E4%B8%BA%E4%BB%80%E4%B9%88%E4%B8%80%E5%AE%9A%E8%A6%81%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants