in benchmarks/tpcc/src/main/java/com/google/cloud/pgadapter/tpcc/AbstractBenchmarkRunner.java [541:598]
private void delivery() throws SQLException {
LOG.debug("Executing delivery");
long warehouseId = Long.reverse(random.nextInt(tpccConfiguration.getWarehouses()));
long carrierId = Long.reverse(random.nextInt(10));
Object[] row;
executeStatement("begin transaction");
for (long district = 0L; district < tpccConfiguration.getDistrictsPerWarehouse(); district++) {
long districtId = Long.reverse(district);
row =
paramQueryRow(
"SELECT o_id, c_id "
+ "FROM new_orders "
+ "WHERE d_id = ? AND w_id = ? "
+ "ORDER BY o_id ASC "
+ "LIMIT 1 FOR UPDATE",
new Object[] {districtId, warehouseId});
if (row != null) {
long newOrderId = (long) row[0];
long customerId = (long) row[1];
executeParamStatement(
"DELETE "
+ "FROM new_orders "
+ "WHERE o_id = ? AND c_id = ? AND d_id = ? AND w_id = ?",
new Object[] {newOrderId, customerId, districtId, warehouseId});
row =
paramQueryRow(
"SELECT c_id FROM orders WHERE o_id = ? AND d_id = ? AND w_id = ?",
new Object[] {newOrderId, districtId, warehouseId});
executeParamStatement(
"UPDATE orders "
+ "SET o_carrier_id = ? "
+ "WHERE o_id = ? AND c_id = ? AND d_id = ? AND w_id = ?",
new Object[] {carrierId, newOrderId, customerId, districtId, warehouseId});
executeParamStatement(
"UPDATE order_line "
+ "SET ol_delivery_d = CURRENT_TIMESTAMP "
+ "WHERE o_id = ? AND c_id = ? AND d_id = ? AND w_id = ?",
new Object[] {newOrderId, customerId, districtId, warehouseId});
row =
paramQueryRow(
"SELECT SUM(ol_amount) sm "
+ "FROM order_line "
+ "WHERE o_id = ? AND c_id = ? AND d_id = ? AND w_id = ?",
new Object[] {newOrderId, customerId, districtId, warehouseId});
BigDecimal sumOrderLineAmount = (BigDecimal) row[0];
executeParamStatement(
"UPDATE customer "
+ "SET c_balance = c_balance + ?, c_delivery_cnt = c_delivery_cnt + 1 "
+ "WHERE c_id = ? AND d_id = ? AND w_id = ?",
new Object[] {sumOrderLineAmount, customerId, districtId, warehouseId});
}
}
LOG.debug("Committing delivery");
executeStatement("commit");
}