module SqlView::SchemaDumper

@api private

Public Instance Methods

tables(stream) click to toggle source
Calls superclass method
# File lib/sql_view/schema_dumper.rb, line 32
def tables(stream)
  super
  views(stream)
end
views(stream) click to toggle source
# File lib/sql_view/schema_dumper.rb, line 37
def views(stream)
  if dumpable_views_in_database.any?
    stream.puts
  end

  dumpable_views_in_database.each do |viewname|
    next if already_indexed?(viewname)
    view = DBView.new(get_view_info(viewname))
    stream.puts(view.to_schema)
    indexes(viewname, stream)
  end
end

Private Instance Methods

already_indexed?(viewname) click to toggle source

make sure view was added one time, because somehow was adding views two times

# File lib/sql_view/schema_dumper.rb, line 53
def already_indexed?(viewname)
  @already_indexed ||= []
  return true if @already_indexed.include?(viewname)
  @already_indexed << viewname
  false
end
dumpable_views_in_database() click to toggle source
# File lib/sql_view/schema_dumper.rb, line 60
def dumpable_views_in_database
  @dumpable_views_in_database ||= ActiveRecord::Base.connection.views.reject do |viewname|
    ignored?(viewname)
  end
end
get_view_info(viewname) click to toggle source
# File lib/sql_view/schema_dumper.rb, line 66
def get_view_info(viewname)
  views_schema.detect{|e| e['viewname'] == viewname}
end
ignored?(table_name) click to toggle source

This method will be present in Rails 4.2.0 and can be removed then.

# File lib/sql_view/schema_dumper.rb, line 90
def ignored?(table_name)
  ["schema_migrations", ignore_tables].flatten.any? do |ignored|
    case ignored
    when String then remove_prefix_and_suffix(table_name) == ignored
    when Regexp then remove_prefix_and_suffix(table_name) =~ ignored
    else
      raise StandardError, "ActiveRecord::SchemaDumper.ignore_tables accepts an array of String and / or Regexp values."
    end
  end
end
views_schema() click to toggle source
# File lib/sql_view/schema_dumper.rb, line 70
    def views_schema
      @views_schema ||= ActiveRecord::Base.connection.execute(<<-SQL)
        SELECT
          c.relname as viewname,
          pg_get_viewdef(c.oid) AS definition,
          c.relkind AS kind,
          n.nspname AS namespace
        FROM pg_class c
          LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
        WHERE
          c.relkind IN ('m', 'v')
          AND c.relname NOT IN (SELECT extname FROM pg_extension)
          AND n.nspname = ANY (current_schemas(false))
        ORDER BY c.oid
      SQL
    .to_a
    end