[使用疑惑] 在多表关联场景中,在副表中有子查询场景时,能否使用@from@操作符进行实现?
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
现在可以改下逻辑,不用提前遍历完副表的所有字段,可以在 SQLConfig 中 getObjectParser().parse().setSQLConfig() 拿到对应的 SQLConfig 作为 Join 类里的副表 joinConfig
https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Join.java