def format_data(data, opts={})
return {} if data.size == 0
string_columns = opts[:string_columns] || []
schema = opts[:schema] || []
table = opts[:table]
max_lengths = schema.inject({}) do |hash, (column, meta)|
if meta[:db_type] =~ /^varchar\((\d+)\)/
hash.update(column => $1.to_i)
end
hash
end
header = data[0].keys
only_data = data.collect do |row|
row = blobs_to_string(row, string_columns)
row.each do |column, data|
if data.to_s.length > (max_lengths[column] || data.to_s.length)
raise Taps::InvalidData.new("Detected data that exceeds the length limitation of its column. This is\ngenerally due to the fact that SQLite does not enforce length restrictions.\n\nTable : \#{table}\nColumn : \#{column}\nType : \#{schema.detect{|s| s.first == column}.last[:db_type]}\nData : \#{data}\n")
end
end
header.collect { |h| row[h] }
end
{ :header => header, :data => only_data }
end