databases() {
  echo "SHOW DATABASES;" | mysql | egrep -v '^(Database|information_schema)$'
}

database?() {
  [ -n "${1}" ] || return 1
  databases | egrep -q "^${1}$" || return 2
  return 0
}

tables() {
  database? "${1}" || return 1
  echo "SHOW TABLES;" | mysql "${1}" | egrep -v '^Tables_in_.*$'
}

table?() {
  database? "${1}" || return 1
  [ -n "${2}" ] || return 2
  tables "${1}" | egrep -q "^${2}$" || return 3
  return 0
}

repair_table() {
  table? "${1}" "${2}" || return 1
  echo "REPAIR TABLE \`${2}\`;" | mysql "${1}" | egrep -v "^Table"
}

optimize_table() {
  table? "${1}" "${2}" || return 1
  echo "OPTIMIZE TABLE \`${2}\`;" | mysql "${1}" | egrep -v "^Table"
}

optimize_database() {
  database? "${1}" || return 1
  tables "${1}" | while read table
  do
    optimize_table "${1}" "${table}"
  done
}

optimize_all() {
  databases | while read database
  do
    optimize_database "${database}"
  done
}

dump() {
  table? "${1}" "${2}" || return 1
  mysqldump "${1}" "${2}"
}