Module: DatabaseUtils
- Defined in:
- lib/buzzcore/database_utils.rb
Class Method Summary collapse
- .clear_database(aDbDetails) ⇒ Object
- .create_database(aDbDetails, aDatabase = nil) ⇒ Object
- .database_exists(aDbDetails, aDatabase = nil) ⇒ Object
- .ensure_empty_database(aDbDetails, aDatabase = nil) ⇒ Object
- .execute_sql_file(filename, aUser = nil, aPassword = nil) ⇒ Object
- .load_database(aDbDetails, aSqlFile) ⇒ Object
-
.process_rows(aTableName, aQuery) ⇒ Object
remember to select id column.
- .process_table(aTableName, aColumns, &block) ⇒ Object
- .save_database(aDbDetails, aSqlFile) ⇒ Object
Class Method Details
.clear_database(aDbDetails) ⇒ Object
35 36 37 |
# File 'lib/buzzcore/database_utils.rb', line 35 def self.clear_database(aDbDetails) response = POpen4::shell("mysqldump -u #{aDbDetails[:username]} -p#{aDbDetails[:password]} --add-drop-table --no-data #{aDbDetails[:database]} | grep ^DROP | mysql -u #{aDbDetails[:username]} -p#{aDbDetails[:password]} #{aDbDetails[:database]}") end |
.create_database(aDbDetails, aDatabase = nil) ⇒ Object
39 40 41 42 43 |
# File 'lib/buzzcore/database_utils.rb', line 39 def self.create_database(aDbDetails,aDatabase=nil) aDbDetails[:database] = aDatabase if aDatabase return false if !aDbDetails[:database] response = POpen4::shell("mysqladmin -u #{aDbDetails[:username]} -p#{aDbDetails[:password]} create #{aDbDetails[:database]}") end |
.database_exists(aDbDetails, aDatabase = nil) ⇒ Object
www.cyberciti.biz/faq/how-do-i-empty-mysql-database/
drop all tables : mysqldump -uusername -ppassword -hhost \ –add-drop-table –no-data database | grep ^DROP | \ mysql -uusername -ppassword -hhost database
23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/buzzcore/database_utils.rb', line 23 def self.database_exists(aDbDetails,aDatabase=nil) aDbDetails[:database] = aDatabase if aDatabase return false if !aDbDetails[:database] response = POpen4::shell("mysql -u #{aDbDetails[:username]} -p#{aDbDetails[:password]} -e 'use #{aDbDetails[:database]}'") do |r| if r[:stderr] && r[:stderr].index("ERROR 1049 ")==0 # Unknown database r[:exitcode] = 0 return false end end return (response && response[:exitcode]==0) end |
.ensure_empty_database(aDbDetails, aDatabase = nil) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/buzzcore/database_utils.rb', line 45 def self.ensure_empty_database(aDbDetails,aDatabase=nil) aDbDetails[:database] = aDatabase if aDatabase if database_exists(aDbDetails) clear_database(aDbDetails) else create_database(aDbDetails) end end |
.execute_sql_file(filename, aUser = nil, aPassword = nil) ⇒ Object
4 5 6 7 8 9 10 11 12 |
# File 'lib/buzzcore/database_utils.rb', line 4 def self.execute_sql_file(filename,aUser=nil,aPassword=nil) conf = ActiveRecord::Base.configurations[RAILS_ENV] pw = aPassword || conf['password'].to_s || '' user = aUser || conf['username'].to_s || '' cmd_line = "mysql -h #{conf['host']} -D #{conf['database']} #{user.empty? ? '' : '-u '+user} #{pw.empty? ? '' : '-p'+pw} <#{filename}" if !system(cmd_line) raise Exception, "Error executing "+cmd_line end end |
.load_database(aDbDetails, aSqlFile) ⇒ Object
54 55 56 57 |
# File 'lib/buzzcore/database_utils.rb', line 54 def self.load_database(aDbDetails,aSqlFile) ensure_empty_database(aDbDetails) response = POpen4::shell("mysql -u #{aDbDetails[:username]} -p#{aDbDetails[:password]} #{aDbDetails[:database]} < #{aSqlFile}") end |
.process_rows(aTableName, aQuery) ⇒ Object
remember to select id column
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 |
# File 'lib/buzzcore/database_utils.rb', line 83 def self.process_rows(aTableName,aQuery) rows = ActiveRecord::Base.connection.execute(aQuery).all_hashes # rows to hash rows.each do |r| before = r.clone yield(r) # modify r r[:delete] = true if r == before end rows.delete_if {|r| r[:delete]} rows.each do |r| assigns = '' r.keys.filter_exclude(['id']).each do |k| assigns += ', ' unless assigns.empty? assigns += "#{k} = '#{r[k]}'" # should do better escaping here for strings & numbers end ActiveRecord::Base.connection.execute("update `#{aTableName}` set #{assigns} where id=#{r['id']}") end end |
.process_table(aTableName, aColumns, &block) ⇒ Object
102 103 104 105 106 |
# File 'lib/buzzcore/database_utils.rb', line 102 def self.process_table(aTableName,aColumns,&block) aColumns.map!(&:to_s) aColumns << 'id' unless aColumns.include? 'id' process_rows(aTableName,"select #{aColumns.join(',')} from `#{aTableName}`",&block) end |
.save_database(aDbDetails, aSqlFile) ⇒ Object
59 60 61 |
# File 'lib/buzzcore/database_utils.rb', line 59 def self.save_database(aDbDetails,aSqlFile) response = POpen4::shell("mysqldump --user=#{aDbDetails[:username]} --password=#{aDbDetails[:password]} --skip-extended-insert #{aDbDetails[:database]} > #{aSqlFile}") end |