package edu.brown.benchmark.wikipedia.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 ipblocks = new SQLStmt("SELECT COUNT(*) FROM IPBLOCKS"); public final SQLStmt useracct = new SQLStmt("SELECT COUNT(*) FROM USERACCT"); public final SQLStmt logging = new SQLStmt("SELECT COUNT(*) FROM LOGGING"); public final SQLStmt page = new SQLStmt("SELECT COUNT(*) FROM PAGE"); public final SQLStmt page_restrictions = new SQLStmt("SELECT COUNT(*) FROM PAGE_RESTRICTIONS"); public final SQLStmt recentchanges = new SQLStmt("SELECT COUNT(*) FROM RECENTCHANGES"); public final SQLStmt text = new SQLStmt("SELECT COUNT(*) FROM TEXT"); public final SQLStmt revision = new SQLStmt("SELECT COUNT(*) FROM REVISION"); public final SQLStmt user_groups = new SQLStmt("SELECT COUNT(*) FROM USER_GROUPS"); public final SQLStmt watchlist = new SQLStmt("SELECT COUNT(*) FROM WATCHLIST"); private final HashMap<String, SQLStmt> table_map = new HashMap<String, SQLStmt>(); { this.table_map.put("IPBLOCKS", ipblocks); this.table_map.put("USERACCT", useracct); this.table_map.put("LOGGING", logging); this.table_map.put("PAGE", page); this.table_map.put("PAGE_RESTRICTIONS", page_restrictions); this.table_map.put("RECENTCHANGES", recentchanges); this.table_map.put("TEXT", text); this.table_map.put("REVISION", revision); this.table_map.put("USER_GROUPS", user_groups); this.table_map.put("WATCHLIST", watchlist); } 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); assert(results[0].advanceRow()) : "Unable to advance results row for table " + e.getKey(); ret.addRow(e.getKey(), results[0].getLong(0)); } // FOR return (new VoltTable[]{ ret }); } }