#!/bin/sh -e

DATABASE="$1";
TABLE="$2";
TOTAL_ROWS="521561806";
TOTAL_ROWS="400000000";
TOTAL_ROWS="393750000";
TOTAL_ROWS="390625000";
TOTAL_ROWS="390234375";
TOTAL_ROWS="390136719";
#TOTAL_ROWS="390070273";
#TOTAL_ROWS="390039063";
#TOTAL_ROWS="389843750";
#TOTAL_ROWS="389062500";
#TOTAL_ROWS="387500000";
#TOTAL_ROWS="375000000";
#TOTAL_ROWS="350000000";
#TOTAL_ROWS="300000000";

TOTAL_IDS="4188591";
TOTAL_IDS="2000000";
TOTAL_IDS="1000000";
TOTAL_IDS="1000";


#TOTAL_ROWS="4000";
#TOTAL_IDS="10";

MYSQL="mysql --show-warnings -n -v -v -v $DATABASE";

if true; then
$MYSQL << EOF
DROP TABLE IF EXISTS $TABLE;
CREATE TABLE $TABLE (id INT NOT NULL DEFAULT 0, value INT) ENGINE=MyISAM;
EOF

msg0='
**** ********** *********** ************ ****';
msg1="Check: Table ${TABLE}_groupby should have up to maximum $TOTAL_IDS rows";
msg2="Check: Each id should have cnt around `expr $TOTAL_ROWS / $TOTAL_IDS`";
msg4="Info: Now loading $TOTAL_ROWS rows. This may take a while...";
msg5='**** ********** *********** ************ ****
';

echo "$msg0";
echo $msg1;
echo $msg2;
echo $msg4;
echo "$msg5";

namedpipe="/tmp/$TABLE.$$";
[ -p $namedpipe ] && rm $namedpipe;
mkfifo --mode=0666 $namedpipe;
awk -vTOTAL_ROWS=$TOTAL_ROWS -vTOTAL_IDS=$TOTAL_IDS -vOFS='\t' 'BEGIN {for (i = 0; i < TOTAL_ROWS; i++) {print int(rand() * TOTAL_IDS), 1;} }' > $namedpipe & $MYSQL -e "LOAD DATA INFILE '$namedpipe' INTO TABLE $TABLE";
[ -p $namedpipe ] && rm $namedpipe;
fi

BUGGY_QUERY="SELECT id, count(DISTINCT value) value_cnt FROM $TABLE GROUP BY id";
$MYSQL << EOF
DROP TABLE IF EXISTS ${TABLE}_groupby;
CREATE TABLE ${TABLE}_groupby $BUGGY_QUERY;
SELECT count(*) current_id_count, $TOTAL_IDS max_id_count FROM ${TABLE}_groupby;
EXPLAIN $BUGGY_QUERY;
EOF

echo "$msg0";
echo $msg1;
echo $msg2;
echo "$msg5";
