📄 benchcthread.java
字号:
prep.setInt(3, wId);
rs = db.query(prep);
// locate midpoint customer
if (namecnt % 2 != 0) {
namecnt++;
}
for (int n = 0; n < namecnt / 2; n++) {
rs.next();
}
rs.getString(1); // c_first
rs.getString(2); // c_middle
cId = rs.getInt(3);
rs.getString(4); // c_street_1
rs.getString(5); // c_street_2
rs.getString(6); // c_city
rs.getString(7); // c_state
rs.getString(8); // c_zip
rs.getString(9); // c_phone
credit = rs.getString(10);
rs.getString(11); // c_credit_lim
rs.getBigDecimal(12); // c_discount
balance = rs.getBigDecimal(13);
rs.getTimestamp(14); // c_since
rs.close();
} else {
prep = prepare("SELECT C_FIRST, C_MIDDLE, C_LAST, "
+ "C_STREET_1, C_STREET_2, C_CITY, C_STATE, C_ZIP, "
+ "C_PHONE, C_CREDIT, C_CREDIT_LIM, "
+ "C_DISCOUNT, C_BALANCE, C_SINCE FROM CUSTOMER "
+ "WHERE C_ID=? AND C_D_ID=? AND C_W_ID=?");
prep.setInt(1, cId);
prep.setInt(2, cdId);
prep.setInt(3, wId);
rs = db.query(prep);
rs.next();
rs.getString(1); // c_first
rs.getString(2); // c_middle
rs.getString(3); // c_last
rs.getString(4); // c_street_1
rs.getString(5); // c_street_2
rs.getString(6); // c_city
rs.getString(7); // c_state
rs.getString(8); // c_zip
rs.getString(9); // c_phone
credit = rs.getString(10);
rs.getString(11); // c_credit_lim
rs.getBigDecimal(12); // c_discount
balance = rs.getBigDecimal(13);
rs.getTimestamp(14); // c_since
rs.close();
}
balance = balance.add(amount);
if (credit.equals("BC")) {
prep = prepare("SELECT C_DATA INTO FROM CUSTOMER "
+ "WHERE C_ID=? AND C_D_ID=? AND C_W_ID=?");
prep.setInt(1, cId);
prep.setInt(2, cdId);
prep.setInt(3, wId);
rs = db.query(prep);
rs.next();
String cData = rs.getString(1);
rs.close();
String cNewData = "| " + cId + " " + cdId + " " + wId
+ " " + dId + " " + warehouseId + " " + amount + " "
+ cData;
if (cNewData.length() > 500) {
cNewData = cNewData.substring(0, 500);
}
prep = prepare("UPDATE CUSTOMER SET C_BALANCE=?, C_DATA=? "
+ "WHERE C_ID=? AND C_D_ID=? AND C_W_ID=?");
prep.setBigDecimal(1, balance);
prep.setString(2, cNewData);
prep.setInt(3, cId);
prep.setInt(4, cdId);
prep.setInt(5, wId);
db.update(prep, "updateCustomer");
} else {
prep = prepare("UPDATE CUSTOMER SET C_BALANCE=? "
+ "WHERE C_ID=? AND C_D_ID=? AND C_W_ID=?");
prep.setBigDecimal(1, balance);
prep.setInt(2, cId);
prep.setInt(3, cdId);
prep.setInt(4, wId);
db.update(prep, "updateCustomer");
}
// MySQL bug?
// String h_data = w_name + " " + d_name;
String hData = wName + " " + dName;
prep = prepare("INSERT INTO HISTORY (H_C_D_ID, H_C_W_ID, H_C_ID, H_D_ID, "
+ "H_W_ID, H_DATE, H_AMOUNT, H_DATA) "
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
prep.setInt(1, cdId);
prep.setInt(2, wId);
prep.setInt(3, cId);
prep.setInt(4, dId);
prep.setInt(5, warehouseId);
prep.setTimestamp(6, datetime);
prep.setBigDecimal(7, amount);
prep.setString(8, hData);
db.update(prep, "insertHistory");
db.commit();
}
private void processOrderStatus() throws Exception {
int dId = random.getInt(1, bench.districtsPerWarehouse);
boolean byName;
String last = null;
int cId = -1;
if (random.getInt(1, 100) <= 60) {
byName = true;
last = random.getLastname(random.getNonUniform(255, 0, 999));
} else {
byName = false;
cId = random.getNonUniform(1023, 1, bench.customersPerDistrict);
}
PreparedStatement prep;
ResultSet rs;
prep = prepare("UPDATE DISTRICT SET D_NEXT_O_ID=-1 WHERE D_ID=-1");
db.update(prep, "updateDistrict");
if (byName) {
prep = prepare("SELECT COUNT(C_ID) FROM CUSTOMER "
+ "WHERE C_LAST=? AND C_D_ID=? AND C_W_ID=?");
prep.setString(1, last);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
rs.next();
int namecnt = rs.getInt(1);
rs.close();
if (namecnt == 0) {
// TODO TPC-C: check if this can happen
db.rollback();
return;
}
prep = prepare("SELECT C_BALANCE, C_FIRST, C_MIDDLE, C_ID "
+ "FROM CUSTOMER "
+ "WHERE C_LAST=? AND C_D_ID=? AND C_W_ID=? "
+ "ORDER BY C_FIRST");
prep.setString(1, last);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
if (namecnt % 2 != 0) {
namecnt++;
}
for (int n = 0; n < namecnt / 2; n++) {
rs.next();
}
rs.getBigDecimal(1); // c_balance
rs.getString(2); // c_first
rs.getString(3); // c_middle
rs.close();
} else {
prep = prepare("SELECT C_BALANCE, C_FIRST, C_MIDDLE, C_LAST "
+ "FROM CUSTOMER "
+ "WHERE C_ID=? AND C_D_ID=? AND C_W_ID=?");
prep.setInt(1, cId);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
rs.next();
rs.getBigDecimal(1); // c_balance
rs.getString(2); // c_first
rs.getString(3); // c_middle
rs.getString(4); // c_last
rs.close();
}
prep = prepare("SELECT MAX(O_ID) "
+ "FROM ORDERS WHERE O_C_ID=? AND O_D_ID=? AND O_W_ID=?");
prep.setInt(1, cId);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
int oId = -1;
if (rs.next()) {
oId = rs.getInt(1);
if (rs.wasNull()) {
oId = -1;
}
}
rs.close();
if (oId != -1) {
prep = prepare("SELECT O_ID, O_CARRIER_ID, O_ENTRY_D "
+ "FROM ORDERS WHERE O_ID=?");
prep.setInt(1, oId);
rs = db.query(prep);
rs.next();
oId = rs.getInt(1);
rs.getInt(2); // o_carrier_id
rs.getTimestamp(3); // o_entry_d
rs.close();
prep = prepare("SELECT OL_I_ID, OL_SUPPLY_W_ID, OL_QUANTITY, "
+ "OL_AMOUNT, OL_DELIVERY_D FROM ORDER_LINE "
+ "WHERE OL_O_ID=? AND OL_D_ID=? AND OL_W_ID=?");
prep.setInt(1, oId);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
while (rs.next()) {
rs.getInt(1); // o_i_id
rs.getInt(2); // ol_supply_w_id
rs.getInt(3); // ol_quantity
rs.getBigDecimal(4); // ol_amount
rs.getTimestamp(5); // ol_delivery_d
}
rs.close();
}
db.commit();
}
private void processDelivery() throws Exception {
int carrierId = random.getInt(1, 10);
Timestamp datetime = new Timestamp(System.currentTimeMillis());
PreparedStatement prep;
ResultSet rs;
prep = prepare("UPDATE DISTRICT SET D_NEXT_O_ID=-1 WHERE D_ID=-1");
db.update(prep, "updateDistrict");
for (int dId = 1; dId <= bench.districtsPerWarehouse; dId++) {
prep = prepare("SELECT MIN(NO_O_ID) FROM NEW_ORDER "
+ "WHERE NO_D_ID=? AND NO_W_ID=?");
prep.setInt(1, dId);
prep.setInt(2, warehouseId);
rs = db.query(prep);
int noId = -1;
if (rs.next()) {
noId = rs.getInt(1);
if (rs.wasNull()) {
noId = -1;
}
}
rs.close();
if (noId != -1) {
prep = prepare("DELETE FROM NEW_ORDER "
+ "WHERE NO_O_ID=? AND NO_D_ID=? AND NO_W_ID=?");
prep.setInt(1, noId);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
db.update(prep, "deleteNewOrder");
prep = prepare("SELECT O_C_ID FROM ORDERS "
+ "WHERE O_ID=? AND O_D_ID=? AND O_W_ID=?");
prep.setInt(1, noId);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
rs.next();
rs.getInt(1); // o_c_id
rs.close();
prep = prepare("UPDATE ORDERS SET O_CARRIER_ID=? "
+ "WHERE O_ID=? AND O_D_ID=? AND O_W_ID=?");
prep.setInt(1, carrierId);
prep.setInt(2, noId);
prep.setInt(3, dId);
prep.setInt(4, warehouseId);
db.update(prep, "updateOrders");
prep = prepare("UPDATE ORDER_LINE SET OL_DELIVERY_D=? "
+ "WHERE OL_O_ID=? AND OL_D_ID=? AND OL_W_ID=?");
prep.setTimestamp(1, datetime);
prep.setInt(2, noId);
prep.setInt(3, dId);
prep.setInt(4, warehouseId);
db.update(prep, "updateOrderLine");
prep = prepare("SELECT SUM(OL_AMOUNT) FROM ORDER_LINE "
+ "WHERE OL_O_ID=? AND OL_D_ID=? AND OL_W_ID=?");
prep.setInt(1, noId);
prep.setInt(2, dId);
prep.setInt(3, warehouseId);
rs = db.query(prep);
rs.next();
BigDecimal amount = rs.getBigDecimal(1);
rs.close();
prep = prepare("UPDATE CUSTOMER SET C_BALANCE=C_BALANCE+? "
+ "WHERE C_ID=? AND C_D_ID=? AND C_W_ID=?");
prep.setBigDecimal(1, amount);
prep.setInt(2, noId);
prep.setInt(3, dId);
prep.setInt(4, warehouseId);
db.update(prep, "updateCustomer");
}
}
db.commit();
}
private void processStockLevel() throws Exception {
int dId = (terminalId % bench.districtsPerWarehouse) + 1;
int threshold = random.getInt(10, 20);
PreparedStatement prep;
ResultSet rs;
prep = prepare("UPDATE DISTRICT SET D_NEXT_O_ID=-1 WHERE D_ID=-1");
db.update(prep, "updateDistrict");
prep = prepare("SELECT D_NEXT_O_ID FROM DISTRICT "
+ "WHERE D_ID=? AND D_W_ID=?");
prep.setInt(1, dId);
prep.setInt(2, warehouseId);
rs = db.query(prep);
rs.next();
int oId = rs.getInt(1);
rs.close();
// prep = prepare("SELECT COUNT(DISTINCT S_I_ID) "
// + "FROM ORDER_LINE, STOCK WHERE OL_W_ID=? AND "
// + "OL_D_ID=? AND OL_O_ID<? AND "
// + "OL_O_ID>=?-20 AND S_W_ID=? AND "
// + "S_I_ID=OL_I_ID AND S_QUANTITY<?");
// prep.setInt(1, warehouseId);
// prep.setInt(2, d_id);
// prep.setInt(3, o_id);
// prep.setInt(4, o_id);
prep = prepare("SELECT COUNT(DISTINCT S_I_ID) "
+ "FROM ORDER_LINE, STOCK WHERE OL_W_ID=? AND "
+ "OL_D_ID=? AND OL_O_ID<? AND "
+ "OL_O_ID>=? AND S_W_ID=? AND "
+ "S_I_ID=OL_I_ID AND S_QUANTITY<?");
prep.setInt(1, warehouseId);
prep.setInt(2, dId);
prep.setInt(3, oId);
prep.setInt(4, oId - 20);
prep.setInt(5, warehouseId);
prep.setInt(6, threshold);
// TODO this is where HSQLDB is very slow
rs = db.query(prep);
rs.next();
rs.getInt(1); // stockCount
rs.close();
db.commit();
}
private PreparedStatement prepare(String sql) throws Exception {
PreparedStatement prep = (PreparedStatement) prepared.get(sql);
if (prep == null) {
prep = db.prepare(sql);
prepared.put(sql, prep);
}
return prep;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -