我在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",&#34 ;产品"}
到目前为止,我只发现了只能识别过于通用的类型才能依赖的标记符。 (即关键字,标识符,运算符,文本)。有没有什么可以在.net中做这种工作。或者是否有更好的策略将这些租户检查附加到每个查询运行?
答案 0 :(得分:1)
This answer对于找到问题的解决方案非常有用。
如果有人有兴趣,this is my first pass。我们实际上使用systemId作为我们的租户,因此您将在代码中看到它。到目前为止,我发现它没有处理的唯一查询是具有子查询的查询。我现在正在深入研究这个问题,但我可能不会将其添加进去,因为我的团队需要的绝大部分都是在这里处理的。
答案 1 :(得分:0)
很抱歉,但我有些疑惑。
向我提问任何问题,希望对你有所帮助!! :)