def testOrderBy(self): result = TraceQueryLanguage.query(self.env, "select event.seq, event.name from t0 order by event.name desc, event.seq") self.assertEqual(len(result.rows), len(self.trace.events)) self.assertEqual(result.rows[0][0], 41998)
def testSelectInto(self): result = TraceQueryLanguage.query(self.env, "select * into new_trace from t0 where event.name = 'vgDrawPath'") assert "new_trace" in self.env.traces self.assertEqual(len(self.env.traces["new_trace"].events), 3)
def testSelectMultipleTables(self): result = TraceQueryLanguage.query(self.env, "select distinct event.seq, event.name from t0, t1 where t0.event.duration > 1000") self.assertEqual(len(result.rows), 3)
def testWhereClause2(self): result = TraceQueryLanguage.query(self.env, "select event.seq, event.name from t0 where event.name = 'vgDrawPath'") self.assertEqual(len(result.rows), 3)
def testWhereClause(self): result = TraceQueryLanguage.query(self.env, "select event.seq, event.name from t0 where event.seq > 1000") self.assertEqual(len(result.rows), 91)
def testBasicQuery2(self): result = TraceQueryLanguage.query(self.env, "select * from t0") self.assertEqual(len(result.rows), len(self.trace.events))
def testBasicQuery(self): result = TraceQueryLanguage.query(self.env, "select event.seq, event.name from t0") self.assertEqual(len(result.rows), len(self.trace.events)) self.assertEqual(len(result.columns), 2)
def select(self, expression): """ Choose events from one or many traces based on a condition. The condition for choosing the events is expressed in an SQL-like language. Here are some example queries to get you started: - SELECT event.seq, event.name FROM t0 List all events in trace 't0'. - SELECT event.seq, event.name FROM t0 WHERE event.duration > 10000 List all events that took more than 10 milliseconds. - SELECT event.seq, event.name FROM t0 WHERE event.name = "glDrawElements" List all glDrawElements events. - SELECT event.seq, event.duration, event.name FROM t0 ORDER BY event.duration DESC LIMIT 10 List the ten longest running events. - SELECT event.seq, event.name FROM t0 ORDER BY event.duration List all events that took more than 10 milliseconds. - SELECT * FROM t0 List all possible attribute values for all events in trace 't0'. - SELECT * INTO t1 FROM t0 WHERE event.seq > 1000 AND event.seq < 2000 Copy a 1000 events from trace 't0' into trace 't1'. - SELECT event.seq, event.name FROM t0, t1 WHERE t0.event.seq=t1.event.seq List corresponding events from traces 't0' and 't1'. - SELECT DISTINCT event.name FROM t0 WHERE event.values.path List all functions that have a path parameter. @param expression: A trace query language expression """ # Prepare the environment for the query env = TraceQueryLanguage.Environment(dict(self.analyzer.traces.items())) # Perform the query try: result = TraceQueryLanguage.query(env, "select " + expression) # Copy any new created traces over to the analyzer newTraces = [] for traceName, trace in env.traces.items(): if not traceName in self.analyzer.traces: self.analyzer.traces[traceName] = trace newTraces.append(traceName) resultDesc = "%d %s selected"% (len(result.rows), len(result.rows) > 1 and "events" or "event") if not newTraces: self.analyzer.reportInfo(str(result)) else: resultDesc += " into " + ", ".join(newTraces) self.analyzer.reportInfo(resultDesc + ".") except TraceQueryLanguage.QueryException, e: self.analyzer.reportError(e)