Sha256: 40aa050e932e17533198363e773706d1b624f3561aaba4135f85690496a310dc

Contents?: true

Size: 1.58 KB

Versions: 1

Compression:

Stored size: 1.58 KB

Contents

module Arel
  module Nodes
    class Node
      def to_formatted_sql(engine = Table.engine)
        collector = Arel::Collectors::SQLString.new
        Arel::SqlFormatter.new(engine.connection).accept self, collector
        collector.value
      end
    end
  end

  class TreeManager
    def to_formatted_sql(engine = Table.engine)
      collector = Arel::Collectors::SQLString.new
      Arel::SqlFormatter.new(engine.connection).accept @ast, collector
      collector.value
    end
  end

  class SqlFormatter < Arel::Visitors::PostgreSQL
    def accept(object, collector)
      super object, collector
      collector << "\n"
    end

    private

    # rubocop:disable Naming/MethodName
    # rubocop:disable Naming/UncommunicativeMethodParamName
    # rubocop:disable Metrics/AbcSize
    def visit_Arel_Nodes_SelectCore(o, collector)
      collector << "SELECT\n"

      collector = maybe_visit o.top, collector

      collector = maybe_visit o.set_quantifier, collector

      collect_nodes_for(o.projections, collector, SPACE, ",\n")

      if o.source && !o.source.empty?
        collector << ' FROM '
        collector = visit o.source, collector
      end

      collect_nodes_for o.wheres, collector, WHERE, AND
      collect_nodes_for o.groups, collector, GROUP_BY
      unless o.havings.empty?
        collector << ' HAVING '
        inject_join o.havings, collector, AND
      end
      collect_nodes_for o.windows, collector, WINDOW

      collector
    end
    # rubocop:enable Metrics/AbcSize
    # rubocop:enable Naming/MethodName
    # rubocop:enable Naming/UncommunicativeMethodParamName
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
arel_toolkit-0.3.0 lib/arel/sql_formatter.rb