package org.voltdb.benchmark.tpcc.procedures;
import java.util.HashMap;
import java.util.Map.Entry;
import org.voltdb.ProcInfo;
import org.voltdb.SQLStmt;
import org.voltdb.VoltProcedure;
import org.voltdb.VoltTable;
import org.voltdb.VoltType;
@ProcInfo(
singlePartition = false
)
public class GetTableCounts extends VoltProcedure {
public final SQLStmt WarehouseCount = new SQLStmt("SELECT COUNT(*) FROM WAREHOUSE");
public final SQLStmt DistrictCount = new SQLStmt("SELECT COUNT(D_ID) FROM DISTRICT");
public final SQLStmt CustomerCount = new SQLStmt("SELECT COUNT(C_ID) FROM CUSTOMER");
public final SQLStmt OrdersCount = new SQLStmt("SELECT COUNT(O_ID) FROM ORDERS");
public final SQLStmt NewOrderCount = new SQLStmt("SELECT COUNT(NO_W_ID) FROM NEW_ORDER");
public final SQLStmt OrderLineCount = new SQLStmt("SELECT COUNT(OL_O_ID) FROM ORDER_LINE");
public final SQLStmt HistoryCount = new SQLStmt("SELECT COUNT(H_W_ID) FROM HISTORY");
public final SQLStmt ItemCount = new SQLStmt("SELECT COUNT(I_ID) FROM ITEM");
public final SQLStmt StockCount = new SQLStmt("SELECT COUNT(S_W_ID) FROM STOCK");
private final HashMap<String, SQLStmt> table_map = new HashMap<String, SQLStmt>();
{
this.table_map.put("WAREHOUSE", WarehouseCount);
this.table_map.put("DISTRICT", DistrictCount);
this.table_map.put("CUSTOMER", CustomerCount);
this.table_map.put("ORDERS", OrdersCount);
this.table_map.put("NEW_ORDER", NewOrderCount);
this.table_map.put("ORDER_LINE", OrderLineCount);
this.table_map.put("HISTORY", HistoryCount);
this.table_map.put("ITEM", ItemCount);
// this.table_map.put("STOCK", StockCount);
}
private final VoltTable.ColumnInfo columns[] = {
new VoltTable.ColumnInfo("name", VoltType.STRING),
new VoltTable.ColumnInfo("size", VoltType.BIGINT),
};
public VoltTable[] run() {
VoltTable ret = new VoltTable(this.columns);
for (Entry<String, SQLStmt> e : this.table_map.entrySet()) {
// System.err.println("Retrieving number of tuples for " + e.getKey());
voltQueueSQL(e.getValue());
VoltTable results[] = voltExecuteSQL();
assert(results.length == 1) : "Got " + results.length + " results for table " + e.getKey();
assert(results[0].getRowCount() > 0);
boolean adv = results[0].advanceRow();
assert(adv) : "Unable to advance results row for table " + e.getKey();
ret.addRow(e.getKey(), results[0].getLong(0));
} // FOR
return (new VoltTable[]{ ret });
}
}