alibaba / druid

阿里云计算平台DataWorks(https://help.aliyun.com/document_detail/137663.html) 团队出品,为监控而生的数据库连接池
https://github.com/alibaba/druid/wiki
Apache License 2.0
27.95k stars 8.58k forks source link

格式化MySQL无法保留注释 #1703

Closed aichaoxy closed 7 years ago

aichaoxy commented 7 years ago

测试代码:

@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
======
SELECT MAX(id)
FROM base_request_log
======
SELECT MAX(id)
FROM base_request_log IGNORE INDEX (i1)

印象中旧版本的格式化实现,不会吞掉注释。

能否设置一个开关到FormatOption里面:是否保留注释 ?

wenshao commented 7 years ago

ODPS是支持保留注释的,并且做得比较完善。mysql部分支持了,只支持你所说的第一个场景。请使用新版本 https://github.com/alibaba/druid/releases/tag/1.0.30

aichaoxy commented 7 years ago

经测试已经可用,高铁给力!