#!/bin/bash

shopt -s -o errexit nounset

PGBIN="/tmp/bug_ext/bin/"
PGDATA="/tmp/bug_ext/data"
PGLOG="/tmp/bug_ext/postgresql.log"
PGEXTDIR="$("$PGBIN"/pg_config --sharedir)/extension"

export PGPORT=5439

rm -rf "$PGDATA"
"$PGBIN"/initdb -U postgres "$PGDATA"

touch "$PGEXTDIR"/buggingext.control

cat <<'EOS' > "$PGEXTDIR"/buggingext--1.0.0.sql
CREATE TABLE t ( id TEXT );

CREATE FUNCTION evt_ddl_fnct()
RETURNS EVENT_TRIGGER
LANGUAGE plpgsql
AS 'BEGIN END;';

CREATE EVENT TRIGGER evt_ddl_trg ON table_rewrite
  EXECUTE PROCEDURE evt_ddl_fnct();
EOS

cat <<'EOF' > "$PGEXTDIR"/buggingext--1.0.0--2.0.0.sql
ALTER EVENT TRIGGER evt_ddl_trg DISABLE;
ALTER TABLE t DROP COLUMN id;
EOF

"$PGBIN"/postgres -D "$PGDATA" --port="$PGPORT" --log_error_verbosity=verbose --restart_after_crash=off &> "$PGLOG" &

until "${PGBIN}"/pg_isready --port="$PGPORT" -q; do sleep .5; done

"${PGBIN}"/psql --port="$PGPORT" -XAta <<EOS
SELECT version();
CREATE EXTENSION buggingext VERSION '1.0.0';
ALTER EXTENSION buggingext UPDATE TO '2.0.0';
EOS

pkill -F "$PGDATA"/postmaster.pid || true

rm -rf "$PGDATA"
rm "$PGEXTDIR"/buggingext*
