Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- namespace :db do
- desc "LOADER: Discover indexes etc that might be good to add"
- task :inspect => :environment do
- cnx = ActiveRecord::Base.connection
- cnx.tables.each do |table|
- puts "# #{table}"
- puts '# ==='
- begin
- klass = table.singularize.camelize.constantize
- rescue
- puts "# uninitialized constant #{table.singularize.camelize}, consider dropping #{table}"
- puts "# drop_table #{table}"
- puts ""
- next
- end
- puts '# indexes'
- puts '==='
- indexes = cnx.execute("show indexes from #{table};")
- index_names = []
- indexes.each do |r|
- index_names << r[4]
- puts "#" + r.inspect unless r[2] == "PRIMARY"
- end
- suggested_indexes = []
- puts "# columns"
- puts "# ==="
- klass.columns.each do |column|
- gap = " " * (30 - column.name.length)
- puts "# #{column.name} #{gap} #{column.sql_type}"
- if !index_names.include?(column.name)
- suggested_indexes << column
- end
- end
- puts ""
- puts "# suggested indexes"
- puts "# ==="
- suggested_indexes.each do |index|
- line = " add_index :#{table}, :#{index.name}"
- puts index.name =~ /_type$|type$|_id|_at$|_on/ ? "#{line}" : "##{line}"
- end
- puts ""
- end
- end
- end
Add Comment
Please, Sign In to add comment