package edu.brown.benchmark.tm1.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.tm1.TM1Constants;
@ProcInfo(singlePartition = false)
public class GetTableCounts extends VoltProcedure {
private final String base_stmt = "SELECT COUNT(S_ID) FROM ";
public final SQLStmt SubscriberCount = new SQLStmt(base_stmt + TM1Constants.TABLENAME_SUBSCRIBER);
public final SQLStmt AccessInfoCount = new SQLStmt(base_stmt + TM1Constants.TABLENAME_ACCESS_INFO);
public final SQLStmt SpecialFacilityCount = new SQLStmt(base_stmt + TM1Constants.TABLENAME_SPECIAL_FACILITY);
public final SQLStmt CallForwardingCount = new SQLStmt(base_stmt + TM1Constants.TABLENAME_CALL_FORWARDING);
private final HashMap<String, SQLStmt> table_map = new HashMap<String, SQLStmt>();
{
this.table_map.put(TM1Constants.TABLENAME_SUBSCRIBER, SubscriberCount);
this.table_map.put(TM1Constants.TABLENAME_ACCESS_INFO, AccessInfoCount);
this.table_map.put(TM1Constants.TABLENAME_SPECIAL_FACILITY, SpecialFacilityCount);
this.table_map.put(TM1Constants.TABLENAME_CALL_FORWARDING, CallForwardingCount);
}
private final VoltTable.ColumnInfo columns[] = { new VoltTable.ColumnInfo("name", VoltType.STRING), new VoltTable.ColumnInfo("size", VoltType.BIGINT),
new VoltTable.ColumnInfo("min", VoltType.BIGINT), new VoltTable.ColumnInfo("max", VoltType.BIGINT), };
public VoltTable[] run() {
VoltTable ret = new VoltTable(this.columns);
for (Entry<String, SQLStmt> e : this.table_map.entrySet()) {
// if (!e.getKey().equals(TM1Constants.TABLENAME_SPECIAL_FACILITY))
// continue;
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), results[0].getLong(0), results[0].getLong(0));
} // FOR
return (new VoltTable[] { ret });
}
}