原始SQL: ALTER TABLE kpiTarget ADD deleted tinyint DEFAULT 0 预期格式化后:ALTER TABLE kpiTarget\n\tADD deleted tinyint DEFAULT 0 用druid格式化:ALTER TABLE kpiTarget ADD (deleted tinyint DEFAULT 0) 已经明显改变了语义。 druid版本:1.1.6 (2018.1.30更新最新版也是一样)
原提问者GitHub用户renxiaoyao
使用Druid对SQL语句进行了格式化,但是发现格式化后的语句与预期的不同,导致语义发生了变化。具体来说,您的SQL语句是ALTER TABLE kpiTarget ADD deleted tinyint DEFAULT 0,预期格式化后的结果是ALTER TABLE kpiTarget\n\tADD deleted tinyint DEFAULT 0,但是使用Druid格式化后的结果是ALTER TABLE kpiTarget ADD (deleted tinyint DEFAULT 0),与预期的不同。
这个问题可能是由于Druid的SQL格式化规则不兼容您的SQL语句导致的。为了解决这个问题,您可以尝试以下几个方法:
修改SQL语句:您可以尝试修改SQL语句,以避免Druid格式化出现问题。具体来说,您可以将ADD deleted tinyint DEFAULT 0修改为ADD COLUMN deleted tinyint DEFAULT 0,以避免Druid将其解析为添加一个包含deleted tinyint DEFAULT 0的子句。
自定义Druid格式化规则:Druid是一个开源的Java数据库连接池和SQL解析库,您可以尝试自定义Druid的SQL格式化规则,以兼容您的SQL语句。具体来说,您可以通过扩展Druid的SQLASTOutputVisitor类来实现自定义格式化规则,以适应您的SQL语句。
使用其他的SQL格式化库:如果Druid无法正确格式化您的SQL语句,您可以尝试使用其他的SQL格式化库。例如,SQL Formatter是一个流行的开源的SQL格式化库,可以用于格式化SQL语句。您可以尝试使用SQL Formatter来格式化您的SQL语句,以替代Druid。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。