class MysqlClient

Public Class Methods

new(*args) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 4
def initialize(*args)
  @client = Mysql2::Client.new(*args)
end

Public Instance Methods

build_from_schema(schema) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 14
def build_from_schema(schema)
  schema.keys.each do |table|
    puts "Creating table: #{table}"
    create_table(table, schema[table])
  end
end
create_table(table, fields) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 21
def create_table(table, fields)
  puts create_table_query(table, fields)
  @client.query(create_table_query(table, fields))
end
insert_table(table, data) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 26
def insert_table(table, data)
  data.each_slice(1000) do |slice|
    @client.query(chunk_sql(table, slice))
    print '.'
  end
end
recreate(name) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 8
def recreate(name)
  @client.query("DROP DATABASE IF EXISTS #{name}")
  @client.query("CREATE DATABASE #{name}")
  @client.query("USE #{name}")
end

Private Instance Methods

chunk_sql(table, chunk) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 35
def chunk_sql(table, chunk)
  values = []
  chunk.each do |row|
    values << "#{row_sql(row)}"
  end
  "INSERT INTO #{table} VALUES #{values.join(', ')}"
end
create_table_query(table, fields) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 54
def create_table_query(table, fields)
  reserved_words = %w(key int)
  query = "CREATE TABLE #{table} ("
  cols = []
  fields.each do |col|
    col[:name] += '_1' if reserved_words.include?(col[:name])
    cols << "#{col[:name]} #{col[:type]} #{'NOT NULL' if col[:notnull]}"
  end
  query + "#{cols.join(', ')})"
end
row_sql(row) click to toggle source
# File lib/sqlite2mysql/services/mysql.rb, line 43
def row_sql(row)
  values = row.map do |val|
    if val.is_a?(String)
      (val.empty? || val.nil? || val == '') ? nil : @client.escape(val)
    else
       val
    end
  end
  "(\"#{values.join('", "')}\")"
end