#!/usr/bin/env bash create_database() { local db_name="$1" local silent=${2:-false} if [ "$silent" = false ]; then echo "[vmangos-deploy]: Creating database '$db_name'" fi mariadb -u root -p"$MARIADB_ROOT_PASSWORD" -e \ "CREATE DATABASE IF NOT EXISTS \`$db_name\` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;" } drop_database() { local db_name="$1" local silent=${2:-false} if [ "$silent" = false ]; then echo "[vmangos-deploy]: Dropping database '$db_name'" fi mariadb -u root -p"$MARIADB_ROOT_PASSWORD" -e \ "DROP DATABASE IF EXISTS \`$db_name\`;" } grant_permissions() { local db_name="$1" local silent=${2:-false} if [ "$silent" = false ]; then echo "[vmangos-deploy]: Granting permissions to database user '$MARIADB_USER' for database '$db_name'" fi mariadb -u root -p"$MARIADB_ROOT_PASSWORD" -e \ "GRANT ALL ON \`$db_name\`.* TO '$MARIADB_USER'@'%'; \ FLUSH PRIVILEGES;" } import_data() { local db_name="$1" local file="$2" mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "$db_name" < "$file" return $? } import_dump() { local db_name="$1" local dump_file="$2" echo "[vmangos-deploy]: Importing initial data for database '$db_name'" import_data "$db_name" "$dump_file" return $? } import_updates() { local db_name="$1" local update_file="$2" if [ ! -e "$update_file" ]; then # The update file not existing is not an error, so we return 0 (success) # here return 0 fi echo "[vmangos-deploy]: Importing potential updates for database '$db_name'" import_data "$db_name" "$update_file" return $? } configure_realm() { echo "[vmangos-deploy]: Configuring realm '$VMANGOS_REALMLIST_NAME'" mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "realmd" -e \ "INSERT INTO \`realmlist\` (\`name\`, \`address\`, \`port\`, \`icon\`, \`timezone\`, \`allowedSecurityLevel\`) VALUES ('$VMANGOS_REALMLIST_NAME', '$VMANGOS_REALMLIST_ADDRESS', '$VMANGOS_REALMLIST_PORT', '$VMANGOS_REALMLIST_ICON', '$VMANGOS_REALMLIST_TIMEZONE', '$VMANGOS_REALMLIST_ALLOWED_SECURITY_LEVEL');" } create_world_db_corrections_table() { mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -e \ "CREATE TABLE IF NOT EXISTS \`world_db_corrections\` ( \ \`id\` INT NOT NULL, \ \`reason\` VARCHAR(255) NOT NULL, \ \`date\` DATE NOT NULL, \ \`is_applied\` BOOLEAN NOT NULL DEFAULT FALSE, \ PRIMARY KEY (\`id\`) \ );" } populate_world_db_corrections_table() { mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -e \ "INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \ SELECT 1, 'migration edits in vmangos/core@fe6fcb4', '2025-02-22' \ WHERE NOT EXISTS ( \ SELECT 1 FROM \`world_db_corrections\` WHERE \`id\` = 1 \ ); \ INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \ SELECT 2, 'migration edits in vmangos/core@9e6d4ac', '2025-02-23' \ WHERE NOT EXISTS ( \ SELECT 2 FROM \`world_db_corrections\` WHERE \`id\` = 2 \ ); \ INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \ SELECT 3, 'migration edits in vmangos/core@07c7832', '2025-02-25' \ WHERE NOT EXISTS ( \ SELECT 3 FROM \`world_db_corrections\` WHERE \`id\` = 3 \ ); \ INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \ SELECT 4, 'migration edits in vmangos/core@f485dfa', '2025-03-22' \ WHERE NOT EXISTS ( \ SELECT 4 FROM \`world_db_corrections\` WHERE \`id\` = 4 \ ); \ INSERT INTO \`world_db_corrections\` (\`id\`, \`reason\`, \`date\`) \ SELECT 5, 'migration edits in vmangos/core@33fcf97', '2025-07-05' \ WHERE NOT EXISTS ( \ SELECT 5 FROM \`world_db_corrections\` WHERE \`id\` = 5 \ );" } check_if_world_db_correction_is_required() { local result=$(mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -N -s -e \ "WITH db_creation AS ( SELECT DATE(CONVERT_TZ(MIN(\`CREATE_TIME\`), @@session.time_zone, '+00:00')) as world_db_created_at FROM \`INFORMATION_SCHEMA\`.\`TABLES\` WHERE \`TABLE_SCHEMA\` = 'mangos' ), latest_correction AS ( SELECT DATE(\`date\`) as correction_date, \`reason\`, \`is_applied\` FROM \`world_db_corrections\` WHERE \`id\` = (SELECT MAX(\`id\`) FROM \`world_db_corrections\`) ) SELECT CONCAT_WS('|', IF( NOT \`is_applied\` AND correction_date >= world_db_created_at, 'true', 'false' ), \`reason\` ) FROM latest_correction, db_creation;") echo "$result" } mark_world_db_corrections_as_applied() { mariadb -u root -p"$MARIADB_ROOT_PASSWORD" "maintenance" -e \ "UPDATE \`world_db_corrections\` SET \`is_applied\` = true;" } process_custom_sql() { local file_directory="$1" if [ ! -d "$file_directory" ]; then echo "[vmangos-deploy]: WARNING: Custom SQL file directory '$file_directory' does not exist" >&2 return 0 fi file_count=$(find "$file_directory" -name "*.sql" -type f | wc -l) echo "[vmangos-deploy]: Found $file_count custom SQL file(s) to process" if [ "$file_count" -gt 0 ]; then find "$file_directory" -name "*.sql" -type f | sort | while read -r sql_file; do echo "[vmangos-deploy]: Processing custom SQL file '$(basename "$sql_file")'" import_data "mangos" "$sql_file" if [ $? -ne 0 ]; then echo "[vmangos-deploy]: ERROR: Failed to process custom SQL file '$(basename "$sql_file")'" >&2 fi done fi }