ANSI SQL查询的where子句是否有ANTLR语法?
我正在尝试解析where子句中的条件,并将该条件中的列更改为与我所拥有的索引相关的列,以便提高我的性能。
我想自动化这个功能,所以我想解析动态sql并动态更改where子句。
可能不会。
我想您已经找到了适用于所有ANSI SQL的ANTLR语法。挑选出一个子集,它只是where子句,应该并不难。
您将面临的困难是修改AST和重新生成源文本,我想这是您想要的。ANTLR解析器在修改AST方面没有提供任何特定的帮助,只是在访问节点时提供了一个用于黑客攻击的库。源头的再生完全取决于你;它可以通过在树中遍历时吐出字符串来实现,或者更好的方法是使用字符串模板。但现在发生的事情是,在你可以修改语句之前,你对修改语句的兴趣已经变成了一项巨大的工程工作。看看我的文章"解析后的生活"(来自简历或谷歌)。
我认为你想要的是一个程序转换系统。这些工具提供了语法,可以将源代码解析为AST,并对AST进行转换以达到您想要的效果。通常提供用于重新生成源文本的Pretty打印机。