我继承StatFilter将sql做了采样分析,采样的时候将sql进行格式化只会再次参数化处理,结果生产遇到问题 然后发现SQLASTOutputVisitor在拼sql的时候针对Reader等类型只拼了前半截单引号,没有后半截单引号就return了。
https://github.com/alibaba/druid/blob/master/src/main/java/com/alibaba/druid/sql/visitor/SQLASTOutputVisitor.java#L2310
我的代码如下:
private static List
用SQLASTOutputVisitor来生成SQL时,确实有可能出现格式化错误,导致生成的SQL语法不正确。
你所说的只拼了一半单引号的bug,可能是SQLASTOutputVisitor对字符串表示存有缺陷。
SQLASTOutputVisitor做的事情就是:
遍历AST节点
根据节点类型调用相应的输出方法,生成SQL字符串
对于字符串节点,应该输出成'xxx'这样,包含完整的单引号。
但是SQLASTOutputVisitor实现有误,往往只输出了开头的单引号,而没有闭合。
所以导致的结果是一个不完整的字符串表示,后续SQL解析就会出错。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。