Last active
June 18, 2021 23:10
-
-
Save nroose/9f02bd2de56656bbf41acffcac786019 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env ruby | |
env_rb = ['../config/environment.rb', 'config/environment.rb'].detect { |file| File.exist? file } | |
raise 'Run this from rails root or a subdirectory.' unless env_rb | |
require File.expand_path(env_rb) | |
if ARGV[0] =~ /^-[cexq]$/ | |
ARGV.shift | |
sql_in = ARGV.join(' ') | |
elsif ARGV[0] =~ /^-f?/ | |
ARGV.shift | |
sql_in = ARGF.read | |
elsif ARGV[0] == '-h' | |
puts "#{$PROGRAM_NAME} [<sql file>]" | |
puts "#{$PROGRAM_NAME} -q <query>" | |
puts "#{$PROGRAM_NAME} -f <file>" | |
puts "#{$PROGRAM_NAME} -" | |
puts "#{$PROGRAM_NAME}" | |
exit | |
end | |
loop do | |
print 'sql> ' unless sql_in | |
sql = sql_in || gets.strip rescue (puts; exit) | |
break if sql == 'q' | |
sql.split(';').each do |query| | |
next if query.blank? | |
puts | |
puts query | |
results = ActiveRecord::Base.connection.select_all(query).to_a | |
next if results.blank? | |
columns = {} | |
results.first.each_key do |k| | |
columns[k] = [results.map { |g| g[k].size }.max, k.titleize.size].max | |
end | |
puts "+-#{columns.map { |_k, v| '-' * v }.join('-+-')}-+" | |
puts "| #{columns.map { |k, v| k.ljust(v) }.join(' | ')} |" | |
puts "+-#{columns.map { |_k, v| '-' * v }.join('-+-')}-+" | |
results.each do |row| | |
puts "| #{columns.keys.map { |k| row[k].to_s.ljust(columns[k]) }.join(' | ')} |" | |
end | |
puts "+-#{columns.map { |_k, v| '-' * v }.join('-+-')}-+" | |
puts | |
rescue => e | |
puts e | |
end | |
break if sql_in.present? | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment