测试代码:
@Test public void test() {
String sqlWithLeadingComment = "/*0abcde*/select max(id) from base_request_log";
printFormatted(sqlWithLeadingComment);
String sqlWithEndingComment = "select max(id) from base_request_log/*0abcde*/";
printFormatted(sqlWithEndingComment);
String sqlWithIntermediateComment = "select max(id) from base_request_log /* haha */ ignore index (i1) ";
printFormatted(sqlWithIntermediateComment);
}
private void printFormatted(String sql) { System.out.println("======"); // System.out.println(SQLUtils.formatMySql(sql)); System.out.println(SQLUtils.formatMySql(sql)); }
输出:
SELECT MAX(id) FROM base_request_log IGNORE INDEX (i1)
印象中旧版本的格式化实现,不会吞掉注释。
能否设置一个开关到FormatOption里面:是否保留注释 ?
原提问者GitHub用户ddzhj
MySQL的格式化工具在处理SQL语句时默认会去除注释,因此格式化后的SQL语句不包含原始SQL语句中的注释。如果您希望保留注释,可以尝试使用其他第三方的SQL格式化工具,或者使用MySQL自带的--skip-comments选项。
ODPS是支持保留注释的,并且做得比较完善。mysql部分支持了,只支持你所说的第一个场景。请使用新版本 https://github.com/alibaba/druid/releases/tag/1.0.30
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。