#!/usr/bin/env bash

# Copyright © 2012-2026 ScriptFanix
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License.

# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.

# A copy of the GNU General Public License v3 is includded in the LICENSE file
# at the root of the project.

# Current schema version this AtOM binary understands
currentdbversion=9
checkDatabaseVersion() {
	local dbversion
	# Try to read the stored version from the 'atom' metadata table
	if dbversion=$(Select atom version <<<"\"1\" = 1")
	then
		if (( dbversion == currentdbversion ))
		then
			return 0	# Already up to date
		elif (( dbversion < currentdbversion ))
		then
			# Run sequential upgrade functions until we reach
			# `$currentdbversion`
			until (( dbversion == currentdbversion ))
			do
				# Dynamically calls e.g. upgradedatabase_3_4
				upgradedatabase_${dbversion}_$((dbversion+1))
				# After each upgrade, re-read the version from
				# the database to ensure it was updated
				# correctly
				dbversion=$(Select atom version <<<"\"1\" = 1")
			done
		else
			# DB was created by a newer AtOM; we can't run and
			# ensure consistency
			echo "Database schema version $dbversion is"	\
				"higher thanthat of this version of"	\
				"AtOM ($currentdbversion). Bailing out." >&2
			exit $EDBVERSION
		fi
	else
		# No version row found: this is a database from very early
		# drafts
		# This is stupid but nobody is running with DB schema v0 anyway
		Insert atom 1 <<<"version $currentdbversion"
	fi
}
