#!/bin/bash -e

# You will need to edit these:
DB_DATABASE=YOUR_DATABASE
DB_USER=YOUR_USER
DB_PASSWORD=YOUR_PASSWORD

# You may want to edit these:
TMP_DIR=/tmp
DB_HOST=localhost
TABLE=concurrent_test_table

MYSQL_CMD="mysql --host=$DB_HOST --user=$DB_USER --password=$DB_PASSWORD $DB_DATABASE"
INSERT_SCRIPT=$TMP_DIR/${TABLE}_insert.sql
DELETE_SCRIPT=$TMP_DIR/${TABLE}_delete.sql
QUERY_SCRIPT=$TMP_DIR/${TABLE}_query.sql

echo "Creating table $TABLE ..." >&2

echo "drop table if exists $TABLE; create table $TABLE (id bigint(20) AUTO_INCREMENT PRIMARY KEY);" | $MYSQL_CMD

echo "Creating scripts ..." >&2

echo "set session transaction isolation level repeatable read;" | tee $INSERT_SCRIPT | tee $DELETE_SCRIPT > $QUERY_SCRIPT

echo "    $INSERT_SCRIPT" >&2
n=1
while [ $n -le 100000 ]
do
  n=$(( $n + 1 ))
  echo "start transaction; insert into $TABLE values (null); commit;"
done >> $INSERT_SCRIPT

echo "    $DELETE_SCRIPT" >&2
n=1
while [ $n -le 100000 ]
do
  n=$(( $n + 1 ))
  echo "start transaction; delete from concurrent_test_table; commit;"
done >> $DELETE_SCRIPT

echo "    $QUERY_SCRIPT" >&2
echo "select NOW(), min(id), max(id), max(id) - min(id) from $TABLE\G" >> $QUERY_SCRIPT
n=1
while [ $n -le 250000 ]
do
  n=$(( $n + 1 ))
  echo "start transaction; select T1.id, count(T1.id) from (select * from $TABLE) T1 group by T1.id having count(*) > 1; commit;"
done >> $QUERY_SCRIPT


echo "Running scripts in background ..." >&2

kill_scripts() 
{ 
    kill -TERM -$$ 
}

trap kill_scripts SIGINT

while true; do cat $INSERT_SCRIPT | $MYSQL_CMD; done &

while true; do cat $DELETE_SCRIPT | $MYSQL_CMD; done &

while true; do echo; echo; cat $QUERY_SCRIPT | $MYSQL_CMD; done &

echo "Press CTRL-C to exit." >&2
while true; do sleep 10; done

