#!/bin/bash

set -e

export PGPASSWORD=password
export PGUSER=postgres
export PGDATABASE=postgres
export PGHOST=127.0.0.1

echo "Starting PostgreSQL..."
trap "exit" INT TERM
trap "echo 'Stopping PostgreSQL'; docker stop postgres_perf" EXIT
docker run --rm -d -p 5432:5432 -e POSTGRES_PASSWORD=$PGPASSWORD --name postgres_perf postgres:14.10

while ! pg_isready --host 127.0.0.1 -U postgres
do
    echo "Waiting for PostgreSQL to start..."
    sleep 1
done

echo "PostgreSQL started"

rm -f setup.sql

echo "Creating user"
echo "CREATE USER connecting_user WITH password 'password';" >> setup.sql

echo "Creating database connect role..."
echo "CREATE ROLE database_connect;" >> setup.sql
echo "GRANT CONNECT ON DATABASE postgres TO database_connect;" >> setup.sql
echo "GRANT database_connect TO connecting_user;" >> setup.sql

echo "Creating intermediate role"
echo "CREATE ROLE intermediate;" >> setup.sql

echo "Creating script to create and roles with SELECT perms"

for idx in $(seq -w 1 10000); do
  echo "CREATE TABLE table_${idx}(id int);"
  echo "CREATE ROLE table_select_${idx};"
  echo "GRANT SELECT ON table_${idx} TO table_select_${idx};"
  echo "GRANT table_select_${idx} TO intermediate;"
done >> setup.sql

echo "Running script..."
psql -q -f setup.sql

export PGUSER=connecting_user
time psql -q -c 'SELECT 1;'

echo "Done"
