package edu.brown.workload; import java.util.*; import org.json.JSONObject; import org.voltdb.catalog.*; import org.voltdb.utils.CatalogUtil; import org.voltdb.utils.Pair; public class TestQueryTrace extends TestTransactionTrace { protected List<QueryTrace> query_traces = new ArrayList<QueryTrace>(); protected List<Object[]> query_params = new ArrayList<Object[]>(); protected final static int NUM_OF_QUERIES = 3; @Override protected void setUp() throws Exception { super.setUp(); Statement stmts[] = catalog_proc.getStatements().values(); for (int i = 0; i < NUM_OF_QUERIES; i++) { int idx = rand.nextInt(stmts.length); // System.out.println("idx=" + idx); // System.out.println("num_of_stmts=" + num_of_stmts); // System.out.println(catalog_proc.getStatements().size()); Statement catalog_stmt = stmts[idx]; assertNotNull(catalog_stmt); List<StmtParameter> catalog_params = CatalogUtil.getSortedCatalogItems(catalog_stmt.getParameters(), "index"); Pair<Object[], boolean[]> param_pair = this.makeParams(catalog_params, "javatype"); this.query_params.add((Object[])param_pair.getFirst()); this.query_traces.add(new QueryTrace(catalog_stmt, query_params.get(i), 0)); this.xact.getQueries().add(this.query_traces.get(i)); } // FOR } @Override public void testToJSONString() throws Exception { String json = xact.toJSONString(catalog_db); assertNotNull(json); // // Check to make sure our queries got serialized too // for (QueryTrace.Members element : QueryTrace.Members.values()) { assertTrue(json.indexOf(element.name()) != -1); } // FOR } public void testFromJSONString() throws Exception { String json = xact.toJSONString(catalog_db); assertNotNull(json); JSONObject jsonObject = new JSONObject(json); // System.out.println(jsonObject.toString(2)); // System.exit(1); TransactionTrace copy = TransactionTrace.loadFromJSONObject(jsonObject, catalog_db); assertEquals(xact.getQueries().size(), copy.getQueries().size()); for (int i = 0, cnt = xact.getQueries().size(); i < cnt; i++) { QueryTrace query = xact.getQueries().get(i); QueryTrace copy_query = copy.getQueries().get(i); assertEquals(query.catalog_item_name, copy_query.catalog_item_name); assertEquals(query.getBatchId(), copy_query.getBatchId()); assertEquals(query.start_timestamp, copy_query.start_timestamp); assertEquals(query.params.length, copy_query.params.length); for (int j = 0; j < query.params.length; j++) { this.compare(query.params[j], copy_query.params[j]); } // FOR } // FOR } }