我使用appspot 提供的sqlformat Web 服务解决了这个问题。我本可以使用上面的 Sql Beautify 方法编写自己的 Web 服务,但我不想在我们的代码库中引入一种新语言(我们只使用 ruby、python 和 javascript)。
# Hits the following web-service
# http://sqlformat.appspot.com/format/
# Github page
# https://github.com/andialbrecht/sqlparse/
# Documentation
# http://sqlformat.appspot.com/api/
# data - The SQL statement to format.
# remove_comments - Set to 1 to remove comments.
# keyword_case - How to convert keywords. Allowed values are 'lower', 'upper', 'capitalize'.
# identifier_case - How to convert identifiers. Allowed values are 'lower', 'upper', 'capitalize'.
# - while this is an option I found it capitalizes table names which breaks the query. BE CAREFUL
# n_indents - An integer indicating the indendation depth.
# right_margin - An integer indicating the maximum line length.
# output_format - Transfer the statement into another programming language. Allowed values are 'python', 'php'
# {
# :data => query,
# :format => 'text',
# :remove_comments => 1,
# :keyword_case => 'upper',
# :n_indents => 2,
# }
# or, just pass in a the query as a string and the above params will be the default
def DB::format_sql( params )
if( params.class == String )
params = {
:data => params,
:format => 'text',
:remove_comments => 1,
:keyword_case => 'upper',
:n_indents => 2,
}
end
res = Net::HTTP.post_form(URI.parse('http://sqlformat.appspot.com/format/'), params )
return res.body
end