import net.jaekl.cfb.xml.BugCollection;
import net.jaekl.cfb.xml.BugInstance;
import net.jaekl.cfb.xml.LocalVariable;
+import net.jaekl.cfb.xml.Variable;
+import net.jaekl.cfb.xml.messages.BugCategory;
+import net.jaekl.cfb.xml.messages.BugPattern;
import net.jaekl.cfb.xml.messages.MessageCollection;
public class DbStore {
m_msgColl = msgColl;
}
- public Analysis getPrior(Analysis analysis) throws SQLException, TypeMismatchException {
+ public Analysis getPrior(Analysis analysis) throws SQLException, TypeMismatchException, StoreException {
if (null == analysis) {
return null;
}
return getAnalysis(priorId);
}
- public boolean put(Analysis analysis) throws SQLException, TypeMismatchException {
+ public boolean put(Analysis analysis) throws SQLException, TypeMismatchException, StoreException {
if (null == analysis) {
return false;
}
+ assert (null != analysis.getProjectName());
+
// ----------------------------------
// Add a run record for this analysis
Location secondLoc = (locs.size() > 1) ? locs.get(1) : null;
Location thirdLoc = (locs.size() > 2) ? locs.get(2) : null;
+ if (BugPattern.UNKNOWN.getId() == bugId) {
+ throw new StoreException(StoreException.Type.UNKNOWN_PATTERN, ""+bug.getType());
+ }
+ if (BugCategory.UNKNOWN.getId() == categoryId) {
+ throw new StoreException(StoreException.Type.UNKNOWN_CATEGORY, ""+bug.getCategory());
+ }
+
values[row][0] = foundId;
values[row][1] = runId;
values[row][2] = bugId;
}
- Location getLoc(Long locId) throws SQLException, TypeMismatchException
+ Location getLoc(Long locId) throws TypeMismatchException, StoreException
{
if (null == locId) {
return null;
Table[] tables = { CfbSchema.LOCATIONS };
Condition[] conditions = { new Condition(CfbSchema.LOCID, locId, Operation.EQUAL) };
- Row row = m_driver.selectExactlyOne(m_con, columns, tables, conditions);
-
- String className = row.getString(0);
- String methodName = row.getString(1);
- String methodRole = row.getString(2);
- Integer startLine = row.getInt(3);
- Integer endLine = row.getInt(4);
-
- Location loc = new Location(locId, className, methodName, methodRole, startLine, endLine);
- return loc;
+ try {
+ Row row = m_driver.selectExactlyOne(m_con, columns, tables, conditions);
+
+ String className = row.getString(0);
+ String methodName = row.getString(1);
+ String methodRole = row.getString(2);
+ Integer startLine = row.getInt(3);
+ Integer endLine = row.getInt(4);
+
+ Location loc = new Location(locId, className, methodName, methodRole, startLine, endLine);
+ return loc;
+ }
+ catch (SQLException exc) {
+ throw new StoreException(exc, StoreException.Type.INVALID_LOC_ID, ""+locId);
+ }
}
Long getLocId(Location loc) throws SQLException, TypeMismatchException
return null;
}
- List<LocalVariable> vars = bug.getVariables();
+ List<Variable> vars = bug.getVariables();
if ((null == vars) || (0 == vars.size())) {
return null;
}
return getVarId(vars.get(0));
}
- LocalVariable getVar(Long varId) throws SQLException, TypeMismatchException
+ LocalVariable getVar(Long varId) throws SQLException, TypeMismatchException, StoreException
{
if (null == varId) {
return null;
List<Row> result = m_driver.select(m_con, columns, tables, conditions);
if (result.size() < 1) {
- throw new SQLException("No variable found for ID " + varId);
+ throw new StoreException(StoreException.Type.INVALID_VAR_ID, ""+varId);
}
if (result.size() > 1) {
throw new SQLException("Too many matches (" + result.size() + ") found for variable ID " + varId);
return new LocalVariable(varId, varName, varRole);
}
- Long getVarId(LocalVariable var) throws SQLException, TypeMismatchException
+ Long getVarId(Variable var) throws SQLException, TypeMismatchException
{
if (null == var) {
return null;
return storeVar(var);
}
- Long findVarId(LocalVariable var) throws SQLException, TypeMismatchException
+ Long findVarId(Variable var) throws SQLException, TypeMismatchException
{
Column[] columns = { CfbSchema.VARID_PK };
Table[] tables = { CfbSchema.VARIABLES };
return null; // not found
}
- Long storeVar(LocalVariable var) throws SQLException
+ Long storeVar(Variable var) throws SQLException
{
long varId = m_driver.nextVal(m_con, CfbSchema.VARIABLE_SEQ);
return rows.get(0).getLong(0);
}
- Analysis getAnalysis(Long analysisId) throws SQLException, TypeMismatchException
+ Analysis getAnalysis(Long analysisId) throws SQLException, TypeMismatchException, StoreException
{
Column[] columns = { CfbSchema.PROJNAME, CfbSchema.VERSION, CfbSchema.STARTTIME, CfbSchema.ENDTIME };
Table[] tables = { CfbSchema.RUNS };
return prior;
}
- BugCollection getBugCollection(Long runId) throws SQLException, TypeMismatchException
+ BugCollection getBugCollection(Long runId) throws SQLException, TypeMismatchException, StoreException
{
Column[] columns = {
CfbSchema.FOUNDID,