我在 sql server 中的所有租户表都有一个字段 customer_id。我正在尝试为 NPoco 编写一个拦截器,它将从查询中提取所有表和别名。将其与未租户表的异常列表匹配,并修改 select 以检查 where 子句中所有租户表的租户键。
我很难找到一个可以从 sql 语句中提取表名和别名的 sql 解析器。
一个好的解决方案将解析以下语句。
SELECT fis.OrderDateKey, SUM(fis.SalesAmount) AS TotalSales
FROM FactInternetSales fis
Join product on fis.productid = product.productid
where p.name like 'prefix%'
GROUP BY fis.OrderDateKey
HAVING fis.OrderDateKey > 20010000
ORDER BY fis.OrderDateKey;
将为我提供足够的信息来可靠地构建包含 2 项 {"FactInternetSales", "fis"} 和 {"product", "product"} 的字典
到目前为止,我只找到了只知道对我来说太通用而无法依赖的类型的分词器。(即关键字、标识符、运算符、文本)。有什么东西可以在.net中做这种工作吗?还是有更好的策略将这些租户检查附加到运行的每个查询中?