#!/bin/sh

if [ "$1" = "-n" ]; then
	shift;
	SLEEP=$1
	shift;
	if [ $(( $(($SLEEP+1)) -1 )) -ne $SLEEP ]; then
		die "Invalid sleep argument"
	fi
else
	SLEEP=2
fi

die ()
{
	echo "$@"
	exit -1
}

read_pipe ()
{
	while (true)
	do
		cat $1
	done
}

generate_sql ()
{
	while read LOG < ready
	do
		echo "$LOG" >> $tmpdir/log-query
		if [ "$LOG" != "START" ]; then
			sleep $1
		fi
		echo "\o | /bin/sh $tmpdir/process-output.sh"
		echo "\i $tmpdir/sql"
		echo "\o /dev/null"
	done
}

cleanup ()
{
	popd
	kill %1 %2
	rm -rf $tmpdir
}


tmpdir=/tmp/watchsql-$$

mkdir -m 700 $tmpdir || die "Couldn't make safe tmp $tmpdir"

cat > $tmpdir/sql

pushd $tmpdir

trap "cleanup" 1 2 15

mkfifo psql
mkfifo ready
touch output


cat > process-output.sh << END_OF_SHELL
set > $tmpdir/env
if  [ -z "$COLUMNS" ]
then
	cat > $tmpdir/output.tmp
else
	cut -c 1-$COLUMNS > $tmpdir/output.tmp
fi
mv $tmpdir/output.tmp $tmpdir/output
date > $tmpdir/ready
date >> $tmpdir/log-output
END_OF_SHELL

set -m
read_pipe psql | psql "$@" &
generate_sql 5 >> psql &

echo "START" >> ready
#jobs
#trap -p
sleep 1

watch -n 1 cat output

cat output
cleanup
