是否只有ANSI SQL查询的where子句的ANTLR语法?

时间:2015-11-07 22:02:33

标签: sql antlr antlr4 antlr3

是否只有ANSI SQL查询的where子句的ANTLR语法?

我正在尝试解析where子句中的条件,并将该条件中的列更改为与我拥有的索引相关的内容,以便我的性能得到改善。

我想自动化这个功能,所以想要解析动态sql并动态更改where子句。

1 个答案:

答案 0 :(得分:1)

可能不是。

我假设您已经为所有ANSI SQL找到了ANTLR语法。 挑选出只是where子句的子集应该不是很难。

你将更难以改变AST并重新生成源文本,我认为你想要它。 ANTLR解析器在修改AST时没有提供特定的帮助,除了在访问节点时对节点进行黑客攻击的库。源的再生完全在你身上;它可以通过使用字符串模板在您走树或更好的时间点吐字符串来实现。但现在发生的事情是你对修改声明的兴趣已经变成了一个大的(?)工程工作,然后才能做到。 请参阅我的论文“解析后的生活”(来自生物或通过谷歌搜索)。

我认为你想要的是program transformation system。这些是给出语法的工具,可以将源代码解析为AST,并在AST上执行转换以实现您想要的效果。通常会提供PrettyPrinters来重新生成源文本。