#!/bin/sh

DBNAME=pgcrypto_test

dropdb $DBNAME
createdb $DBNAME || exit 1

psql -q $DBNAME <<_EOF_
create extension if not exists pgcrypto with schema pg_catalog;

create table pgp_test1 (
    vdata bytea
);

create table pgp_test2 (
	id		serial primary key,
	vdata	bytea,
	vkey	text,
	verrmsg	text
);

create unique index pgp_test2_verrmsg_idx on pgp_test2(verrmsg);
_EOF_

found=0
while true ; do
	m=1
	(
		echo "delete from pgp_test1;"
		echo "insert into pgp_test1 select pgp_sym_encrypt('test data', 'key_0');"
		n=1
		while [ $n -le 1000 ] ; do
			echo "select pgp_sym_decrypt(vdata, 'key_$n'), vdata from pgp_test1;"
			n=`expr $n + 1`
		done

		echo ""
	) | psql -q $DBNAME 2>&1 | grep '^ERROR:  ' | \
	while read err ; do
		echo "insert into pgp_test2 (vdata, vkey, verrmsg)"
		echo "    select T1.vdata, 'key_$m', '$err'"
		echo "    from pgp_test1 T1"
		echo "    where not exists (select 1 from pgp_test2"
		echo "        where verrmsg = '$err');"
		m=`expr $m + 1`
	done | psql -q $DBNAME

	nfound=`psql -qAt -c "select count(*) from pgp_test2" $DBNAME`
	if [ $nfound -ne $found ] ; then
		psql -q -c "select * from pgp_test2 order by 1;" $DBNAME
		echo "Press <ENTER> to exit test"
		found=$nfound
	fi

	read -t0 _ && break
done

psql -a $DBNAME <<_EOF_
select * from pgp_test2 order by 1;
_EOF_
