jam-cloud/ruby/lib/jam_ruby/database.rb

88 lines
2.2 KiB
Ruby

module JamRuby
def strip_quotes str
return nil if str.nil?
if str.start_with? '"'
str = str[1..-1]
end
if str.end_with? '"'
str = str.chop
end
return str
end
# creates messages (implementation: protocol buffer) objects cleanly
class Database
@@log = Logging.logger[Database]
#def self.db_timezone
# @@db_timezone ||= TZInfo::Timezone.get(fetch_db_timezone)
#end
def self.db_timezone
@@db_timezone ||= ActiveSupport::TimeZone.new(fetch_db_timezone)
end
def self.fetch_db_timezone
result = ActiveRecord::Base.connection.execute('show timezone')
tz = result.getvalue(0, 0)
result.clear
tz
end
def self.copy(table_name, file)
@@log.debug("issuing COPY to #{table_name} from #{file}")
raw = GeoIpBlocks.connection.raw_connection
result = raw.copy_data "COPY #{table_name} FROM STDIN" do
File.open(file, 'r').each do |line|
raw.put_copy_data line
end
end
count = GeoIpBlocks.connection.select_value("select count(*) from #{table_name}").to_i
ActiveRecord::Base.logger.debug "loaded #{count} records into #{table_name}"
end
def self.copy_table(table_name)
copied_name = "#{table_name}_copied"
GeoIpBlocks.connection.execute "CREATE TABLE #{copied_name} (LIKE #{table_name} INCLUDING DEFAULTS INCLUDING CONSTRAINTS INCLUDING COMMENTS INCLUDING STORAGE)"
copied_name
end
def self.dump(query)
result = ActiveRecord::Base.connection.execute(query)
fields = result.fields
header = ""
fields.each do |field|
header << field
header << ', '
end
header = header[0..header.length - 3]
puts header
result.each do |row|
row_out = ''
fields.each do |field|
if row[field].nil?
row_out << 'NULL'
else
if block_given?
row_out << yield(field, row[field]).to_s
else
row_out << row[field].to_s
end
end
row_out << ', '
end
row_out = row_out[0..row_out.length - 3]
puts row_out
end
end
end
end