Module: Freeberry::MysqlUtils::ClassMethods

Defined in:
lib/freeberry/mysql_utils.rb

Instance Method Summary collapse

Instance Method Details

#database_exists?Boolean

Check if database exists

Returns:

  • (Boolean)


16
17
18
19
20
21
22
23
24
25
26
# File 'lib/freeberry/mysql_utils.rb', line 16

def database_exists?
 _options = configurations[Rails.env].dup
 _options.symbolize_keys!

  begin
    connection
    return true
  rescue Exception => e
    return false
  end
end

#disable_keysObject

Disables key updates for model table



35
36
37
# File 'lib/freeberry/mysql_utils.rb', line 35

def disable_keys
  connection.execute("ALTER TABLE #{quoted_table_name} DISABLE KEYS")
end

#enable_keysObject

Enables key updates for model table



40
41
42
# File 'lib/freeberry/mysql_utils.rb', line 40

def enable_keys
  connection.execute("ALTER TABLE #{quoted_table_name} ENABLE KEYS")
end

#fast_import(files, options = {}) ⇒ Object

Loads data from file(s) using MySQL native LOAD DATA INFILE query, disabling key updates for even faster import speed

Parameters

  • files file(s) to import

  • options (see load_data_infile)



57
58
59
60
61
62
# File 'lib/freeberry/mysql_utils.rb', line 57

def fast_import(files, options = {})
  files = [files] unless files.is_a? Array
  with_keys_disabled do
    load_data_infile_multiple(files, options)
  end
end

#load_data_infile(file, options = {}) ⇒ Object

Loads data from file using MySQL native LOAD DATA INFILE query

Parameters

  • file the file to import

  • options



76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# File 'lib/freeberry/mysql_utils.rb', line 76

def load_data_infile(file, options = {})
  sql = "LOAD DATA LOCAL INFILE '#{file}' "
  sql << "#{options[:insert_method]} " if options[:insert_method]
  sql << "INTO TABLE #{quoted_table_name} "
  sql << "CHARACTER SET #{options[:charset_name]} " if options[:charset_name]
  
  fields = ""
  fields << "TERMINATED BY '#{options[:fields_terminated_by]}' " if options[:fields_terminated_by]
  fields << "OPTIONALLY ENCLOSED BY '#{options[:fields_optionally_enclosed_by]}' " if options[:fields_optionally_enclosed_by]
  fields << "ESCAPED BY '#{options[:fields_escaped_by]}' " if options[:fields_escaped_by]

  sql << "FIELDS #{fields} " unless fields.empty?
  sql << "LINES TERMINATED BY '#{options[:lines_terminated_by]}' " if options[:lines_terminated_by]
  sql << "IGNORE #{options[:ignore_lines]} LINES " if options[:ignore_lines]
  sql << "(" + options[:columns].join(', ') + ") " if options[:columns]
  if options[:mapping]
    mappings = []
    options[:mapping].each_pair do |column, mapping|
      mappings << "#{column} = #{mapping}"
    end
    sql << "SET #{mappings.join(', ')} " if mappings.size > 0
  end
  sql << ";"
  connection.execute(sql)
end

#load_data_infile_multiple(files, options = {}) ⇒ Object

Loads data from multiple files using MySQL native LOAD DATA INFILE query



65
66
67
68
69
# File 'lib/freeberry/mysql_utils.rb', line 65

def load_data_infile_multiple(files, options = {})
  files.each do |file|
    load_data_infile(file, options)
  end
end

#truncate_tableObject

nor any hooks.



30
31
32
# File 'lib/freeberry/mysql_utils.rb', line 30

def truncate_table
 transaction { connection.execute("TRUNCATE TABLE #{quoted_table_name};") }
end

#values(column = 'id') ⇒ Object



10
11
12
13
# File 'lib/freeberry/mysql_utils.rb', line 10

def values(column = 'id')
  query = scoped.select(column)
  connection.select_values(query.to_sql).map(&:to_i).uniq
end

#with_keys_disabledObject

Disables keys, yields block, enables keys.



45
46
47
48
49
# File 'lib/freeberry/mysql_utils.rb', line 45

def with_keys_disabled
  disable_keys
  yield
  enable_keys
end