使用tidb parser如何提取表名和列名的对应关系呢

hi.
公司内部有一套自研的查询平台,目前是基于表级别进行访问控制,想实现基于列级别进行权限控制。

想实现提取表名和列名的对应关系,如下:

{
   "tableName":"Orders",
   "columns":[
      "OrderID",
      "OrderData",
      "CustomerID"
   ]
}

拜读了tidb parser (https://github.com/pingcap/parser),没有找到如何提取SELECT语句的表名和关联的列名的方法(本人菜)

看到过一位大佬提过Issues
https://github.com/pingcap/parser/issues/1349
但是解决办法不太准确(*ast.ColumnName.Table.String())

比如下面的SQL

SELECT x.a, b FROM t1 as x GROUP BY (a, b) HAVING a > c ORDER BY b

通过上面的方法,可以提取到表名x 对应的列名a,但是b就提取不到,同时x是t1的别名

跪求解决思路,谢谢!

只有 SQL 字符串没有其他条件,是没办法判断表和列之间的关系的。例如:

select a, b, c, d from t1, t2;

其中每一列都有可能是属于 t1 或者 t2。

如果加上“每个 SELECT 语句只涉及一张表”的假设,Parser Quick Start 这个例子就可以满足需求。

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。