sql - Ruby 中的 pretty-print SQL

标签 sql ruby-on-rails ruby pretty-print

有没有一种简单的方法可以在 (rails 3) 控制台中 pretty-print 随机 SQL?

类似于 awesome_print 的内容,甚至可能是 Pretty Print .

它不需要理解所有可能的方言或非常高级。
我真正想要的是更轻松地检查 ActiveRecord 生成的 SQL

目前我只是将SQL复制到网上进行格式化,这显然是生产力 killer 。

我真的很想query.to_sql.pretty_format_sql 并查看更好的输出。

谢谢。

最佳答案

试试这个:

git clone https://github.com/sonota/anbt-sql-formatter
cd anbt-sql-formatter
rails setup.rb

然后,在 Rails 初始化程序中:

# config/initializers/pretty_format_sql.rb
class String
  def pretty_format_sql
    require "anbt-sql-formatter/formatter"
    rule = AnbtSql::Rule.new
    rule.keyword = AnbtSql::Rule::KEYWORD_UPPER_CASE
    %w(count sum substr date).each{|func_name|
      rule.function_names << func_name.upcase
    }
    rule.indent_string = "    "
    formatter = AnbtSql::Formatter.new(rule)
    formatter.format(self)
  end
end

测试:

rails console
# Some complex SQL
puts Recipe.joins(:festivity).where(['? BETWEEN festivities.starts_at AND festivities.ends_at', Time.utc(0,Time.now.month,Time.now.day,12,0,0)]).to_sql.pretty_format_sql
SELECT
        "recipes" . *
    FROM
        "recipes" INNER JOIN "festivities"
            ON "festivities" . "id" = "recipes" . "festivity_id"
    WHERE
        (
            '0000-04-27 12:00:00.000000' BETWEEN festivities.starts_at AND festivities.ends_at
        )
 => nil 

我把精炼留给你(重构:monkey-patching -> module, customized formatting, etc :-) )

关于sql - Ruby 中的 pretty-print SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10347727/

相关文章:

php - 从sql数据库获取月、日、年php时间

c# - 带破折号的 DBF 文件不起作用

ruby-on-rails - 弃用警告 : f. error_messages 已从 Rails 中删除,现在可作为插件使用

ruby-on-rails - 所有之前的 Rails rspec 与每个之前的 Rails rspec

ruby-on-rails - 将小时,分钟和秒转换为ruby中的秒

mysql - 全文搜索查询mysql

css - Rails 与 css 形成一行

ruby-on-rails - rails : pass 2-d array to link_to

ruby-on-rails - 在 ruby​​ on rails 中将 collection_action 方法添加到事件管理中的顶部菜单项

sql - UNPIVOT 在不确定的列数上