88 lines
2.2 KiB
Ruby
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 |