解析 SELECT 查询并使用 JOOQ 获取 JOINS
Parse a SELECT query and get the JOINS with JOOQ
使用 JOOQ,是否可以解析 SQL 查询,然后获取查询的各个部分?字段、来源、连接、位置...类似这样的内容:
String sql = "SELECT x.a, x.b, y.c
FROM my_table x
LEFT JOIN other_table y
on x.a = y.a
WHERE x.a > 1000";
SelectQuery<Record> query = (SelectQuery<Record>) context.parser().parseSelect(sql);
query.getFrom();
query.getFields();
query.getJoins();
query.getWhere();
...
使用 jOOQ 3.15,您无法访问 jOOQ 表达式树的内部结构。有一个大项目正在重新设计这些内部结构,使它们可以精确地针对这个用例公开访问:
在那之前,您需要通过使用反射来解决这个问题,将一些逻辑放在 org.jooq.impl
包中以访问类路径上的包私有内部结构(在模块路径上不可能),或者通过给 jOOQ 打补丁——每个人都需要自己承担风险。
使用 JOOQ,是否可以解析 SQL 查询,然后获取查询的各个部分?字段、来源、连接、位置...类似这样的内容:
String sql = "SELECT x.a, x.b, y.c
FROM my_table x
LEFT JOIN other_table y
on x.a = y.a
WHERE x.a > 1000";
SelectQuery<Record> query = (SelectQuery<Record>) context.parser().parseSelect(sql);
query.getFrom();
query.getFields();
query.getJoins();
query.getWhere();
...
使用 jOOQ 3.15,您无法访问 jOOQ 表达式树的内部结构。有一个大项目正在重新设计这些内部结构,使它们可以精确地针对这个用例公开访问:
在那之前,您需要通过使用反射来解决这个问题,将一些逻辑放在 org.jooq.impl
包中以访问类路径上的包私有内部结构(在模块路径上不可能),或者通过给 jOOQ 打补丁——每个人都需要自己承担风险。