lib/capistrano/tasks/db.cap
namespace :db do
desc 'test db connection'
task :conntest do
on roles(:all) do
stdout = capture DT3MySQL::mysql_execute('SHOW TABLES;')
if stdout.include? 'denied'
print "\nNO CORRECT DB CONNECTION. CHECK DB SETTINGS\n\n"
else
print "\nCORRECT DB CONNECTION.\n\n"
end
end
end
#### LIBRARY TASKS
task :create_dump_dir do
on roles(:all) do
execute "cd #{fetch(:deploy_to)}/current && mkdir -p #{TYPO3_DB_DUMP_DIR}"
end
end
#### END LIBRARY TASKS
desc 'dump a full sql-image'
task :dump do
invoke 'db:create_dump_dir'
on roles(:all) do
execute "cd #{fetch(:deploy_to)}/current && " + DT3MySQL::dump_db_version
end
end
desc 'list dumped sql-images'
task :imglist do
images_arr = DT3MySQL::db_image_list
print DT3Div::hashlist_to_table_string(images_arr)
end
desc 'show all tables'
task :tables do
print("Show tables:\n\n")
on roles(:all) do
execute DT3MySQL::show_tables
end
print("\n")
end
desc 'dump an sql-image with only the essential tables'
task :dump_essential do
on roles(:all) do
table_exclude_list = %w( be_users be_sessions cache_* cf_* fe_session_data fe_sessions static_countries \
static_country_zones static_currencies static_languages static_territories sys_history sys_log tx_devlog \
zzz_deleted_* )
tables = capture DT3MySQL::show_tables
table_arr = tables.split("\n")
substr_arr = []
excltable_arr = []
realexclude_list = []
table_exclude_list.each {|excltable|
if(excltable.include? '*')
substr_arr << excltable[0,excltable.index('*')]
else
excltable_arr << excltable
end
}
table_arr.each {|table|
if(excltable_arr.include?(table))
realexclude_list << table
else
substr_arr.each {|substr|
if(table[0,substr.length] == substr)
realexclude_list << table
end
}
end
}
table_exclude_list = realexclude_list.uniq
execute "cd #{fetch(:deploy_to)}/current && " + DT3MySQL::dump_db_version(table_exclude_list)
end
end
desc 'import one of the sql image into the current database'
task :import do
images_arr = DT3MySQL::db_image_list
print DT3Div::hashlist_to_table_string(images_arr)
print "\nEnter the index of the image you want to import from the list above: "
imageChoosen = STDIN.gets.chomp
if imageChoosen=~ /^[0-9]+$/
imageChoosen = imageChoosen.to_i-1
if images_arr[(imageChoosen)].nil?
print "ERR. You must enter an existing index from above."
else
print "\nImporting database #{images_arr[imageChoosen]['filename']}\n"
on roles(:all) do
execute "cd #{fetch(:deploy_to)}/current && " + DT3MySQL.mysql_import(images_arr[imageChoosen]['filename'])
end
end
else
print "ERR. You must enter a number"
end
end
desc 'delete all tables'
task :flush do
print "Flush tables in DB? Enter YES to confirm: "
cleanConfirm = STDIN.gets.chomp
if(cleanConfirm.downcase=='yes')
on roles(:all) do
tablelist = capture "#{DT3MySQL.create_mysql_base_command} -e \"show tables\" | grep -v Tables_in | grep -v \"+\""
dropsql = ''
tablelist.split("\n").each {|table|
dropsql +="drop table #{table};"
}
execute DT3MySQL::mysql_execute(dropsql)
end
end
end
end