Tencent/APIJSON

[使用疑惑] 在多表关联场景中,在副表中有子查询场景时,能否使用@from@操作符进行实现?

nascent-gone opened this issue · 2 comments

Description

【使用疑惑】
在官方文档中查阅到了有@from@操作符可进行子查询的操作,我有个多表关联+子查询的场景,编写apijson语句如下:
{
"[]": {
"join":"&/D_GRADE_RULE_DETAIL/grade_rule_id@",
"D_GRADE_RULE": {
"@column": "id;view_id",
},
"D_GRADE_RULE_DETAIL": {
"grade_rule_id@":"/D_GRADE_RULE/id",
"@from@": {
"from":"D_GRADE_RULE_DETAIL",
"D_GRADE_RULE_DETAIL": {
"@column":"grade_rule_id;count(*):hierarchy",
"@group":"grade_rule_id"
}
}
},
"page": 0,
"count": 20,
"query": 2
},
"info@": "/[]/info",
"@Explain":false
}
【我的疑问】期望结果是主表和副表的子查询结果进行关联,但实际结果是副表的子查询在关联时似乎没有起到作用。请问在该场景中,是我使用@from@操作符存在问题,还是apijson本身不支持这种写法。

目前只支持在主表使用子查询,可以把 D_GRADE_RULE_DETAIL 放到上方当成主表,然后 D_GRADE_RULE 在下方作为副表来依赖主表

之前是因为 SQLConfig 不能访问 Parser 和 ObjectParser,导致只能提前把 JOIN 的副表内容解析出来,把副表转为 Join 类实例,这里只解析常规键值对,不解析子对象(包括子查询)
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractParser.java#L1364-L1679
image

现在可以改下逻辑,不用提前遍历完副表的所有字段,可以在 SQLConfig 中 getObjectParser().parse().setSQLConfig() 拿到对应的 SQLConfig 作为 Join 类里的副表 joinConfig
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Join.java
image