package edu.brown.benchmark.seats.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;
import edu.brown.benchmark.seats.SEATSConstants;
@ProcInfo(
singlePartition = false
)
public class GetTableCounts extends VoltProcedure {
public final SQLStmt CountryCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_COUNTRY);
public final SQLStmt AirlineCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_AIRLINE);
public final SQLStmt CustomerCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_CUSTOMER);
public final SQLStmt FrequentFlyerCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_FREQUENT_FLYER);
public final SQLStmt AirportCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_AIRPORT);
public final SQLStmt AirportDistanceCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_AIRPORT_DISTANCE);
public final SQLStmt FlightCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_FLIGHT);
public final SQLStmt ReservationCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_RESERVATION);
public final SQLStmt ConfigProfileCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_CONFIG_PROFILE);
public final SQLStmt ConfigHistogramsCount = new SQLStmt("SELECT COUNT(*) FROM " + SEATSConstants.TABLENAME_CONFIG_HISTOGRAMS);
private final HashMap<String, SQLStmt> table_map = new HashMap<String, SQLStmt>();
{
this.table_map.put(SEATSConstants.TABLENAME_COUNTRY, CountryCount);
this.table_map.put(SEATSConstants.TABLENAME_AIRLINE, AirlineCount);
this.table_map.put(SEATSConstants.TABLENAME_CUSTOMER, CustomerCount);
this.table_map.put(SEATSConstants.TABLENAME_FREQUENT_FLYER, FrequentFlyerCount);
this.table_map.put(SEATSConstants.TABLENAME_AIRPORT, AirportCount);
this.table_map.put(SEATSConstants.TABLENAME_AIRPORT_DISTANCE, AirportDistanceCount);
this.table_map.put(SEATSConstants.TABLENAME_FLIGHT, FlightCount);
this.table_map.put(SEATSConstants.TABLENAME_RESERVATION, ReservationCount);
this.table_map.put(SEATSConstants.TABLENAME_CONFIG_PROFILE, ConfigProfileCount);
this.table_map.put(SEATSConstants.TABLENAME_CONFIG_HISTOGRAMS, ConfigHistogramsCount);
}
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 });
}
}