#!/bin/sh
# Ampache 7: fehlende Titelkuenstler in der Datenbank zulassen.
# Auf dem Datenbankserver ausfuehren, z.B. als root mit Socket-Anmeldung.
set -eu

if [ "$#" -ne 1 ] || [ -z "$1" ]; then
    printf 'Aufruf: sh %s AMPACHE_DATENBANK\n' "$0" >&2
    exit 2
fi
ampache_db=$1

column_type=$(mariadb --batch --skip-column-names --database="$ampache_db" -e \
  "SELECT COLUMN_TYPE FROM information_schema.COLUMNS
   WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='song' AND COLUMN_NAME='artist';")
case "$column_type" in
    'int unsigned'|'int(11) unsigned') ;;
    *) printf 'Unerwartete oder fehlende Spalte song.artist: %s; nichts geaendert.\n' "$column_type" >&2; exit 1 ;;
esac

nullable=$(mariadb --batch --skip-column-names --database="$ampache_db" -e \
  "SELECT IS_NULLABLE FROM information_schema.COLUMNS
   WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='song' AND COLUMN_NAME='artist';")
if [ "$nullable" = 'YES' ]; then
    printf 'song.artist akzeptiert bereits NULL; nichts zu aendern.\n'
elif [ "$nullable" = 'NO' ]; then
    column_default=$(mariadb --batch --skip-column-names --database="$ampache_db" -e \
      "SELECT COALESCE(COLUMN_DEFAULT, '<NULL>') FROM information_schema.COLUMNS
       WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME='song' AND COLUMN_NAME='artist';")
    if [ "$column_default" != '0' ]; then
        printf 'Unerwarteter Standardwert: %s; nichts geaendert.\n' "$column_default" >&2
        exit 1
    fi
    mariadb --database="$ampache_db" -e \
      "ALTER TABLE song MODIFY COLUMN artist $column_type NULL DEFAULT 0;"
    printf 'Datenbankkorrektur angewendet.\n'
else
    printf 'Unerwartete Spaltendefinition; nichts geaendert.\n' >&2
    exit 1
fi

mariadb --database="$ampache_db" -e \
  "SHOW COLUMNS FROM song LIKE 'artist';
   SELECT COUNT(*) AS Titel, SUM(artist IS NULL) AS Ohne_Titelkuenstler FROM song;"
