in perfkitbenchmarker/data/sysbench/spanner_pg_tpcc_run.lua [239:403]
function new_order()
local table_num = sysbench.rand.uniform(1, sysbench.opt.tables)
local w_id = sysbench.rand.uniform(1, sysbench.opt.scale)
local d_id = sysbench.rand.uniform(1, DIST_PER_WARE)
local c_id = NURand(1023, 1, CUST_PER_DIST)
local ol_cnt = sysbench.rand.uniform(5, 15);
local rbk = sysbench.rand.uniform(1, 100);
local itemid = {}
local supware = {}
local qty = {}
local all_local = 1
for i = 1, ol_cnt
do
itemid[i] = NURand(8191, 1, MAXITEMS)
if ((i == ol_cnt - 1) and (rbk == 1))
then
itemid[i] = -1
end
if sysbench.rand.uniform(1, 100) ~= 1
then
supware[i] = w_id
else
supware[i] = other_ware(w_id)
all_local = 0
end
qty[i] = sysbench.rand.uniform(1, 10)
end
con:query("BEGIN")
local c_discount
local c_last
local c_credit
local w_tax
c_discount, c_last, c_credit, w_tax = con:query_row(([[EXECUTE select_customer_info%d (%d,%d,%d);]]):
format(table_num, w_id, d_id, c_id))
local d_next_o_id
local d_tax
d_next_o_id, d_tax = con:query_row(([[EXECUTE get_next_order_id_and_tax%d (%d,%d);]]):
format(table_num, w_id, d_id))
con:query(([[EXECUTE update_next_order_id%d (%d,%d,%d);]]):format(table_num, d_next_o_id + 1, d_id, w_id))
con:query(([[EXECUTE insert_order%d (%d,%d,%d,%d,%d,%d);]]):
format(table_num, d_next_o_id, d_id, w_id, c_id, ol_cnt, all_local))
con:query(([[EXECUTE insert_new_order%d (%d,%d,%d);]]):
format(table_num, d_next_o_id, d_id, w_id))
for ol_number=1, ol_cnt do
local ol_supply_w_id = supware[ol_number]
local ol_i_id = itemid[ol_number]
local ol_quantity = qty[ol_number]
rs = con:query(([[EXECUTE select_item%d (%d)]]):
format(table_num, ol_i_id))
local i_price
local i_name
local i_data
if rs.nrows == 0 then
ffi.C.sb_counter_inc(sysbench.tid, ffi.C.SB_CNT_ERROR)
con:query("ROLLBACK")
return
end
i_price, i_name, i_data = unpack(rs:fetch_row(), 1, rs.nfields)
local s_quantity
local s_data
local ol_dist_info
local ol_di = {}
s_quantity, s_data, ol_di[1], ol_di[2], ol_di[3], ol_di[4], ol_di[5], ol_di[6], ol_di[7], ol_di[8], ol_di[9], ol_di[10] = con:query_row((
[[EXECUTE select_stock%d (%d,%d)]]):
format(table_num,ol_i_id,ol_supply_w_id ))
ol_dist_info = ol_di[d_id]
s_quantity=tonumber(s_quantity)
if (s_quantity > ol_quantity) then
s_quantity = s_quantity - ol_quantity
else
s_quantity = s_quantity - ol_quantity + 91
end
con:query(([[EXECUTE update_stock%d (%d,%d,%d)]]):
format(table_num, s_quantity, ol_i_id, ol_supply_w_id))
i_price=tonumber(i_price)
w_tax=tonumber(w_tax)
d_tax=tonumber(d_tax)
c_discount=tonumber(c_discount)
ol_amount = ol_quantity * i_price * (1 + w_tax + d_tax) * (1 - c_discount);
con:query(([[EXECUTE insert_order_line%d (%d,%d,%d,%d,%d,%d,%d,%d,'%s')]]):
format(table_num, d_next_o_id, d_id, w_id, ol_number, ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_dist_info))
end
con:query("COMMIT")
end