1 package net.jaekl.cfb.store;
3 import java.sql.Connection;
4 import java.sql.SQLException;
7 import net.jaekl.cfb.analyze.Analysis;
8 import net.jaekl.cfb.db.CfbSchema;
9 import net.jaekl.cfb.db.Column;
10 import net.jaekl.cfb.db.Condition;
11 import net.jaekl.cfb.db.Operation;
12 import net.jaekl.cfb.db.Row;
13 import net.jaekl.cfb.db.Table;
14 import net.jaekl.cfb.db.TypeMismatchException;
15 import net.jaekl.cfb.db.driver.DbDriver;
16 import net.jaekl.cfb.xml.BugInstance;
17 import net.jaekl.cfb.xml.SourceLine;
18 import net.jaekl.cfb.xml.messages.MessageCollection;
20 public class DbStore {
23 MessageCollection m_msgColl;
25 public DbStore(Connection con, DbDriver driver, MessageCollection msgColl) {
31 public boolean put(Analysis analysis) throws SQLException {
32 if (null == analysis) {
36 // ----------------------------------
37 // Add a run record for this analysis
39 long runId = m_driver.nextVal(m_con, CfbSchema.RUN_SEQ);
43 analysis.getBuildNumber(),
48 int count = m_driver.insert(m_con, CfbSchema.RUNS, values);
53 // -------------------------------------
54 // Add a found record for each bug found
56 List<BugInstance> bugs = analysis.getBugCollection().getBugs();
57 values = new Object[bugs.size()][CfbSchema.FOUND.getNumColumns()];
60 for (BugInstance bug : bugs)
62 long foundId = m_driver.nextVal(m_con, CfbSchema.FOUND_SEQ);
63 long bugId = m_msgColl.getPattern(bug.getType()).getId();
64 // values[row] = { foundId, bugId, firstLocId, secondLocId, thirdLocId };
71 Location[] computeLocations(BugInstance bug)
73 throw new UnsupportedOperationException("UNIMPLEMENTED");
76 long getLocId(SourceLine loc) throws SQLException, TypeMismatchException
78 long locId = findLocId(loc);
86 long findLocId(SourceLine loc) throws SQLException, TypeMismatchException
88 Column[] columns = { CfbSchema.LOCATIONS.getColumn(CfbSchema.LOCID) };
89 Table[] tables = { CfbSchema.LOCATIONS };
90 Condition[] conditions = {
91 new Condition( CfbSchema.LOCATIONS.getColumn(CfbSchema.CLASSNAME),
95 new Condition( CfbSchema.LOCATIONS.getColumn(CfbSchema.STARTLINE),
99 new Condition( CfbSchema.LOCATIONS.getColumn(CfbSchema.ENDLINE),
104 List<Row> rows = m_driver.select(m_con, columns, tables, conditions);
105 if (rows.size() > 0) {
106 assert(1 == rows.size()); // should only have one match
108 return rows.get(0).getLong(0);
111 return (-1); // not found
114 long storeLoc(SourceLine loc) throws SQLException
116 long locId = m_driver.nextVal(m_con, CfbSchema.LOC_SEQ);
118 Object[][] values = { {
121 Long.valueOf(loc.getStart()),
122 Long.valueOf(loc.getEnd())
124 m_driver.insert(m_con, CfbSchema.LOCATIONS, values);