Class: KPM::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/kpm/database.rb

Constant Summary collapse

LAST_INSERTED_ID =

Mysql Information functions

'SELECT LAST_INSERT_ID();'
ROWS_UPDATED =
'SELECT ROW_COUNT();'
DATABASE =

Destination database

ENV['DATABASE'] || 'killbill'
USERNAME =
ENV['USERNAME'] || 'root'
PASSWORD =
ENV['PASSWORD'] || 'root'
HOST =
ENV['HOST'] || 'localhost'
PORT =
ENV['PORT'] || '3306'
COLUMN_NAME_POS =
3
STATEMENT_TMP_FILE =
Dir.mktmpdir('statement') + File::SEPARATOR + 'statement.sql'
MYSQL_COMMAND_LINE =
"mysql #{DATABASE} --user=#{USERNAME} --password=#{PASSWORD} "
@@mysql_command_line =
MYSQL_COMMAND_LINE
@@username =
USERNAME
@@password =
PASSWORD
@@database =
DATABASE
@@host =
HOST
@@port =
PORT

Class Method Summary collapse

Class Method Details

.execute_insert_statement(table_name, query, qty_to_insert, table_data, record_id = nil) ⇒ Object



57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/kpm/database.rb', line 57

def execute_insert_statement(table_name, query, qty_to_insert, table_data, record_id = nil)

  unless record_id.nil?
    query = "set #{record_id[:variable]}=#{record_id[:value]}; #{query}"
  end
  query = "SET autocommit=0; #{query} COMMIT;"
  
  File.open(STATEMENT_TMP_FILE,'w') do |s|
    s.puts query
  end

  response = `#{@@mysql_command_line} < "#{STATEMENT_TMP_FILE}" 2>&1`

  if response.include? 'ERROR'
    @@logger.error "\e[91;1mTransaction that fails to be executed\e[0m"
    @@logger.error "\e[91m#{query}\e[0m"
    raise Interrupt, "Importing table #{table_name}...... \e[91;1m#{response}\e[0m"
  end

  if response.include? 'LAST_INSERT_ID'
    @@logger.info "\e[32mImporting table #{table_name}...... Row 1 of #{qty_to_insert} success\e[0m"

    return response.split("\n")[1]
  end

  if response.include? 'ROW_COUNT'
    response_msg = response.split("\n")
    row_count_inserted = response_msg[response_msg.size - 1]
    @@logger.info "\e[32mImporting table #{table_name}...... Row #{ row_count_inserted || 1} of #{qty_to_insert} success\e[0m"

    return true
  end

  return true
end

.generate_insert_statement(tables) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
# File 'lib/kpm/database.rb', line 93

def generate_insert_statement(tables)

  statements = []
  @@logger.info "\e[32mGenerating statements\e[0m"

  tables.each_key do |table_name|
    table = tables[table_name]
    if !table[:rows].nil? && table[:rows].size > 0
      columns_names = table[:col_names].join(",").gsub(/'/,'')

      rows = []
      table[:rows].each do |row|
        rows << row.map{|value| value.is_a?(Symbol) ? value.to_s : "'#{value.to_s.gsub(/['"]/, "'" => "\\'", '"' => '\\"')}'" }.join(",")
      end

      value_data = rows.map{|row| "(#{row})" }.join(",")

      statements << {:query => get_insert_statement(table_name,columns_names,value_data, rows.size),
                                :qty_to_insert => rows.size, :table_name => table_name, :table_data => table}

    end

  end

  statements

end

.set_credentials(user = nil, password = nil) ⇒ Object



36
37
38
39
# File 'lib/kpm/database.rb', line 36

def set_credentials(user = nil, password = nil)
  @@username = user
  @@password = password
end

.set_database_name(database_name = nil) ⇒ Object



49
50
51
# File 'lib/kpm/database.rb', line 49

def set_database_name(database_name = nil)
  @@database = database_name
end

.set_host(host) ⇒ Object



41
42
43
# File 'lib/kpm/database.rb', line 41

def set_host(host)
  @@host = host
end

.set_logger(logger) ⇒ Object



32
33
34
# File 'lib/kpm/database.rb', line 32

def set_logger(logger)
  @@logger = logger
end

.set_mysql_command_lineObject



53
54
55
# File 'lib/kpm/database.rb', line 53

def set_mysql_command_line
  @@mysql_command_line = "mysql #{@@database} --host=#{@@host} --port=#{@@port} --user=#{@@username} --password=#{@@password} "
end

.set_port(port) ⇒ Object



45
46
47
# File 'lib/kpm/database.rb', line 45

def set_port(port)
  @@port = port
end