#!/bin/bash
# run tpch workload inside tpch docker container.

trap "pkill -P $$" SIGINT

if [ "$#" -ne 3 ]; then
    echo "Usage: $0 <number_of_processes> <query_type> <port>"
    exit 1
fi

num_processes=$1
query_type=$2
port=$3

run_mysql_query() {
    while true; do
        if [ "$query_type" == "q1" ]; then
            mysql -h 127.0.0.1 -P $port -D tpch1 -uroot -e "select l_returnflag, l_linestatus, sum(l_quantity) as sum_qty, sum(l_extendedprice) as sum_base_price, sum(l_extendedprice * (1 - l_discount)) as sum_disc_price, sum(l_extendedprice * (1 - l_discount) * (1 + l_tax)) as sum_charge, avg(l_quantity) as avg_qty, avg(l_extendedprice) as avg_price, avg(l_discount) as avg_disc, count(*) as count_order from lineitem where l_shipdate <= date_sub('1998-12-01', interval 108 day) group by l_returnflag, l_linestatus order by l_returnflag, l_linestatus;"
        elif [ "$query_type" == "q5" ]; then
            mysql -h 127.0.0.1 -P $port -D tpch1 -uroot -e "select n_name, sum(l_extendedprice * (1 - l_discount)) as revenue from customer, orders, lineitem, supplier, nation, region where c_custkey = o_custkey and l_orderkey = o_orderkey and l_suppkey = s_suppkey and c_nationkey = s_nationkey and s_nationkey = n_nationkey and n_regionkey = r_regionkey and r_name = 'MIDDLE EAST' and o_orderdate >= '1994-01-01' and o_orderdate < date_add('1994-01-01', interval '1' year) group by n_name order by revenue desc;"
        else
            echo "Invalid query type: $query_type"
            exit 1
        fi
        sleep 1 # 可以加一个 sleep 来防止过于频繁的执行
    done
}

for ((i=0; i<num_processes; i++)); do
    run_mysql_query &
done

wait

# Version-2: only for Q5
# #!/bin/bash
# 
# # 捕获 SIGINT 信号以停止所有子进程
# trap "pkill -P $$" SIGINT
# 
# # 检查参数是否正确
# if [ "$#" -ne 1 ]; then
#     echo "Usage: $0 <number_of_processes>"
#     exit 1
# fi
# 
# # 参数：要启动的并发子进程数
# num_processes=$1
# 
# # 任务函数：死循环执行 MySQL 查询
# run_mysql_query() {
#     while true; do
#         mysql -h 127.0.0.1 -P 4000 -D tpch1 -uroot -e "select n_name, sum(l_extendedprice * (1 - l_discount)) as revenue from customer, orders, lineitem, supplier, nation, region where c_custkey = o_custkey and l_orderkey = o_orderkey and l_suppkey = s_suppkey and c_nationkey = s_nationkey and s_nationkey = n_nationkey and n_regionkey = r_regionkey and r_name = 'MIDDLE EAST' and o_orderdate >= '1994-01-01' and o_orderdate < date_add('1994-01-01', interval '1' year) group by n_name order by revenue desc;"
#         sleep 1 # 可以加一个 sleep 来防止过于频繁的执行
#     done
# }
# 
# # 启动指定数量的并发子进程
# for ((i=0; i<num_processes; i++)); do
#     run_mysql_query &
# done
# 
# # 等待所有子进程
# wait

# Version-1: Single concurrency
# #!/bin/bash
# set -x
# 
# cleanup() {
#     echo 'got signal to exit'
#     exit 0
# }
# 
# trap cleanup INT
# 
# for ((;;))
# do
#     # Q5
#     # mysql -h 127.0.0.1 -P 4000 -D tpch1 -uroot -e "select n_name, sum(l_extendedprice * (1 - l_discount)) as revenue from customer, orders, lineitem, supplier, nation, region where c_custkey = o_custkey and l_orderkey = o_orderkey and l_suppkey = s_suppkey and c_nationkey = s_nationkey and s_nationkey = n_nationkey and n_regionkey = r_regionkey and r_name = 'MIDDLE EAST' and o_orderdate >= '1994-01-01' and o_orderdate < date_add('1994-01-01', interval '1' year) group by n_name order by revenue desc;"
# 
#     # Q5
# done

