class KPM::Database

def generate_insert_statement(tables)

def generate_insert_statement(tables)
  statements = []
  @logger.info "\e[32mGenerating statements\e[0m"
  tables.each_key do |table_name|
    table = tables[table_name]
    next unless !table[:rows].nil? && !table[:rows].empty?
    columns_names = table[:col_names].join(',').gsub(/'/, '')
    rows = []
    table[:rows].each do |row|
      rows << row.map do |value|
        case value
        when Symbol
          value.to_s
        when Blob
          value.value
        else
          escaped_value = value.to_s.gsub(/['"]/, "'" => "\\'", '"' => '\\"')
                               .gsub('\N{LINE FEED}', "\n")
                               .gsub('\N{VERTICAL LINE}', '|')
          "'#{escaped_value}'"
        end
      end.join(',')
    end
    # Break the insert statement into small chunks to avoid timeouts
    rows.each_slice(1000).each do |subset_of_rows|
      value_data = subset_of_rows.map { |row| "(#{row})" }.join(',')
      statements << { query: build_insert_statement(table_name, columns_names, value_data, subset_of_rows.size),
                      qty_to_insert: subset_of_rows.size, table_name: table_name, table_data: table }
    end
  end
  statements
end