#!/bin/bash

LEN=100000
ROWS=1000

for a in 0 100 1000 10000 100000; do

	b=$((LEN - a))

	dropdb --if-exists test > /dev/null 2>&1
	createdb test > /dev/null 2>&1

	psql test -c "create table t (a text)" > /dev/null 2>&1

	psql test -c "create extension randomstring" > /dev/null 2>&1

	psql test -c "insert into t select random_string($a) || repeat('a', $b) from generate_series(1,$ROWS) S(i)" > /dev/null 2>&1

	psql test -c "vacuum analyze t" > /dev/null 2>&1

	psql test -c "checkpoint" > /dev/null 2>&1

	for p in 0 100 1000 10000 100000; do

		for l in 100 1000 10000 100000; do

			for r in `seq 1 10`; do
				psql test > tmp.log <<EOF
\timing on
select sum(length(substr(a,$p,$l))) from t
EOF

				t=`cat tmp.log | grep Time | awk '{print $2}'`

				echo $LEN $a $b $p $l $r random-first $t

			done

		done

	done

done

for a in 0 100 1000 10000 100000; do

	b=$((LEN - a))

	dropdb --if-exists test > /dev/null 2>&1
	createdb test > /dev/null 2>&1

	psql test -c "create table t (a text)" > /dev/null 2>&1

	psql test -c "create extension randomstring" > /dev/null 2>&1

	psql test -c "insert into t select repeat('a', $b) || random_string($a) from generate_series(1,$ROWS) S(i)" > /dev/null 2>&1

	psql test -c "vacuum analyze t" > /dev/null 2>&1

	psql test -c "checkpoint" > /dev/null 2>&1

	for p in 0 100 1000 10000 100000; do

		for l in 100 1000 10000 100000; do

			for r in `seq 1 10`; do
				psql test > tmp.log <<EOF
\timing on
select sum(length(substr(a,$p,$l))) from t
EOF

				t=`cat tmp.log | grep Time | awk '{print $2}'`

				echo $LEN $a $b $p $l $r random-last $t

			done

		done

	done

done
