Database Schema

The gerbera database contains 8 tables.

  • 3 core tables store details of the media (audio, video and images) and associated items (like subtitles or album art images)

    • mt_cds_object: for media items or directories

    • mt_metadata: metadata like artist name or track number and

    • grb_cds_resource: resource details like bitrate or image size

  • Table mt_autoscan contains data on autoscan directories.

  • Table grb_playstatus contains statistics on played media items.

  • Table grb_client stores details on connected clients.

  • Tables mt_internal_setting and grb_config_value store settings (like database version) and configuration values changed via UI.

_images/gerbera-db.png

Modify Schema

  • Update DBVERSION

    • src/database/sql_database.h

  • Modify CREATE TABLE statements

    • src/database/sqlite3/sqlite3.sql

    • src/database/postgres/postgres.sql

    • src/database/mysql/mysql.sql

  • Add schema update commands

    • src/database/sqlite3/sqlite3-upgrade.xml

    • src/database/postgres/postgres-upgrade.xml

    • src/database/mysql/mysql-upgrade.xml

  • Add drop schema commands

    • src/database/sqlite3/sqlite3-drop.sql

    • src/database/postgres/postgres-drop.sql

    • src/database/mysql/mysql-drop.sql

  • Implement complex Database Migration

    • src/database/sql_migration.h

    • src/database/sql_migration.cc

  • Hash codes to avoid script manipulations

    • run ctest to get error on wrong hash for

    • src/database/sqlite3/sqlite_database.cc

    • src/database/postgres/postgres_database.cc

    • src/database/mysql/mysql_database.cc

      • Add correct hashy to hashies list

      • Update hashies[0] for the create scripts

      • Update hashies[DBVERSION] for the drop scripts