in benchmarks/tpcc/src/main/java/com/google/cloud/pgadapter/tpcc/AbstractBenchmarkRunner.java [452:539]
private void orderStatus() throws SQLException {
LOG.debug("Executing order_status");
long warehouseId = Long.reverse(random.nextInt(tpccConfiguration.getWarehouses()));
long districtId = Long.reverse(random.nextInt(tpccConfiguration.getDistrictsPerWarehouse()));
long customerId = Long.reverse(random.nextInt(tpccConfiguration.getCustomersPerDistrict()));
String lastName = LastNameGenerator.generateLastName(this.random, Long.MAX_VALUE);
boolean byName;
Object[] row;
if (random.nextInt(100) < 60) {
byName = true;
} else {
byName = false;
}
BigDecimal balance;
String first, middle, last;
executeStatement("begin transaction");
if (tpccConfiguration.isUseReadOnlyTransactions()) {
executeStatement("set transaction read only");
}
if (byName) {
row =
paramQueryRow(
"SELECT count(c_id) namecnt "
+ "FROM customer "
+ "WHERE w_id = ? AND d_id= ? AND c_last=?",
new Object[] {warehouseId, districtId, lastName});
int nameCount = (int) (long) row[0];
if (nameCount % 2 == 0) {
nameCount++;
}
List<Object[]> resultSet =
executeParamQuery(
"SELECT c_balance, c_first, c_middle, c_id "
+ "FROM customer WHERE w_id = ? AND d_id= ? AND c_last=? "
+ "ORDER BY c_first",
new Object[] {warehouseId, districtId, lastName});
for (int counter = 0; counter < Math.min(nameCount, resultSet.size()); counter++) {
balance = (BigDecimal) resultSet.get(counter)[0];
first = (String) resultSet.get(counter)[1];
middle = (String) resultSet.get(counter)[2];
customerId = (long) resultSet.get(counter)[3];
}
} else {
row =
paramQueryRow(
"SELECT c_balance, c_first, c_middle, c_last "
+ "FROM customer "
+ "WHERE w_id = ? AND d_id=? AND c_id=?",
new Object[] {warehouseId, districtId, customerId});
balance = (BigDecimal) row[0];
first = (String) row[1];
middle = (String) row[2];
last = (String) row[3];
}
row =
paramQueryRow(
"SELECT o_id, o_carrier_id, o_entry_d "
+ "FROM orders "
+ "WHERE w_id = ? AND d_id = ? AND c_id = ? "
+ "ORDER BY o_id DESC",
new Object[] {warehouseId, districtId, customerId});
long orderId = (long) row[0];
long item_id, supply_warehouse_id, quantity;
BigDecimal amount;
Timestamp delivery_date;
List<Object[]> resultSet =
executeParamQuery(
"SELECT ol_i_id, ol_supply_w_id, ol_quantity, ol_amount, ol_delivery_d "
+ "FROM order_line "
+ "WHERE w_id = ? AND d_id = ? AND o_id = ?",
new Object[] {warehouseId, districtId, orderId});
for (int counter = 0; counter < resultSet.size(); counter++) {
item_id = (long) resultSet.get(counter)[0]; // item_id
supply_warehouse_id = (long) resultSet.get(counter)[1]; // supply_warehouse_id
quantity = (long) resultSet.get(counter)[2]; // quantity
amount = (BigDecimal) resultSet.get(counter)[3]; // amount
delivery_date = (Timestamp) resultSet.get(counter)[4]; // delivery_date
}
LOG.debug("Committing order_status");
executeStatement("commit");
}