class ActiveRecord::PgGenerateSeries::SqlBuilder

SQL builder using PostgreSQL GENERATE_SERIES function.

Public Class Methods

new(ar_class, first, last, step, seq_name) click to toggle source
# File lib/active_record/pg_generate_series/sql_builder.rb, line 12
def initialize(ar_class, first, last, step, seq_name)
  @ar_class = ar_class
  @first = first
  @last = last
  @step = step
  @seq_name = seq_name
  @select_items = {}

  ar_class.column_names.each do |col|
    define_singleton_method "#{col}=" do |val|
      @select_items[col] = val
    end
  end
end

Public Instance Methods

to_sql() click to toggle source
# File lib/active_record/pg_generate_series/sql_builder.rb, line 27
      def to_sql
        <<EOS
INSERT INTO
  #{quoted_table_name} (#{@select_items.keys.map { |col| connection.quote_column_name(col) }.join(',')})
SELECT
  #{@select_items.values.map { |val| val.is_a?(Raw) ? val.str : connection.quote(val) }.join(",\n  ")}
FROM
  GENERATE_SERIES(#{@first.to_i}, #{@last.to_i}, #{@step.to_i}) AS #{connection.quote_column_name(@seq_name)}
;
EOS
      end

Private Instance Methods

raw(str) click to toggle source
# File lib/active_record/pg_generate_series/sql_builder.rb, line 50
def raw(str)
  Raw.new(str)
end