class ActiveRecord::SchemaDumper
Private Instance Methods
index_with_where(name)
click to toggle source
# File lib/pg_index_where/schema_dumper.rb, line 31 def index_with_where(name) sql = <<-EOS select pg_get_expr(i.indpred, i.indrelid) from pg_class c inner join pg_index i on c.oid = i.indexrelid where c.relname = '#{name}'; EOS query_result = @connection.exec_query(sql).first query_result ? query_result['pg_get_expr'] : nil end
indexes(table, stream)
click to toggle source
# File lib/pg_index_where/schema_dumper.rb, line 4 def indexes(table, stream) if (indexes = @connection.indexes(table)).any? add_index_statements = indexes.map do |index| statement_parts = [ ('add_index ' + remove_prefix_and_suffix(index.table).inspect), index.columns.inspect, (':name => ' + index.name.inspect), ] statement_parts << ':unique => true' if index.unique index_lengths = (index.lengths || []).compact statement_parts << (':length => ' + Hash[index.columns.zip(index.lengths)].inspect) unless index_lengths.empty? index_orders = (index.orders || {}) statement_parts << (':order => ' + index.orders.inspect) unless index_orders.empty? index_where = index_with_where(index.name) statement_parts << (':where => ' + index_where.inspect) unless index_where.nil? ' ' + statement_parts.join(', ') end stream.puts add_index_statements.sort.join("\n") stream.puts end end