diff --git a/package/migrator/migrator.sh b/package/migrator/migrator.sh index 1a10846..9c11ec2 100644 --- a/package/migrator/migrator.sh +++ b/package/migrator/migrator.sh @@ -1,5 +1,7 @@ #!/bin/dash +#version="$(psql "$DB_URL" -c "SELECT version FROM hectic.version WHERE name = 'migrator';")" + # error codes # 1 - generic error # 2 - ambiguous, when you try to use something that cannot be used in same time @@ -31,7 +33,7 @@ sha256sum() { } while [ $# -gt 0 ]; do - log debug "$1" + log debug "arg: $1" case $1 in migrate|create|fetch|list|init) [ "${SUBCOMMAND+x}" ] && { @@ -124,47 +126,70 @@ error_handler_no_db_url() { init_sql() { local sql - sql="$(printf '%s\n' \ - "BEGIN;" \ - '' \ - 'CREATE SCHEMA IF NOT EXISTS hectic;' \ - '' \ - "CREATE DOMAIN hectic.migration_name AS TEXT CHECK (VALUE ~ '^[0-9]{15}-.*$');" \ - '' \ - "CREATE DOMAIN hectic.sha256 AS CHAR(64) CHECK (VALUE ~ '^[0-9a-f]{64}$');" \ - '' \ - 'CREATE FUNCTION hectic.sha256_lower() RETURNS trigger AS $$' \ - 'BEGIN' \ - ' NEW.hash = lower(NEW.hash);' \ - ' RETURN NEW;' \ - 'END;' \ - '$$ LANGUAGE plpgsql;' \ - '' \ - 'CREATE TABLE IF NOT EXISTS hectic.version (' \ - ' name TEXT PRIMARY KEY,' \ - ' version TEXT NOT NULL,' \ - ' installed_at TIMESTAMPTZ NOT NULL DEFAULT NOW()' \ - ');' \ - '' \ - "INSERT INTO hectic.version (name, version) VALUES ('migrator', '$VERSION')" \ - '' \ - 'CREATE TABLE IF NOT EXISTS hectic.migration (' \ - ' id SERIAL PRIMARY KEY,' \ - ' name hectic.migration_name UNIQUE NOT NULL,' \ - ' hash hectic.sha256 UNIQUE NOT NULL,' \ - ' applied_at TIMESTAMPTZ NOT NULL DEFAULT NOW()' \ - ')')" - [ ${INHERITS_LIST+x} ] && sql="$(printf '%s INHERITS(%s)' "$sql" "$INHERITS_LIST")" + inherits= + [ ${INHERITS_LIST+x} ] && inherits="$(printf 'INHERITS(%s)' "$INHERITS_LIST")" - sql="$(printf '%s;\n' "$sql")" + sql="$(cat <