X-Git-Url: http://jaekl.net/gitweb/?p=cfb.git;a=blobdiff_plain;f=prod%2Fnet%2Fjaekl%2Fcfb%2Fdb%2FCfbSchema.java;h=84f858db4db6572ab20b2b84246b9537962f68eb;hp=1b989ff5e3ba6a91c372d06dd32e29b86715d9ff;hb=2769cf82ccae57ee3716aecc9bd694be1f115d92;hpb=083fb5094456d37fa4765400a461625635fbf77d diff --git a/prod/net/jaekl/cfb/db/CfbSchema.java b/prod/net/jaekl/cfb/db/CfbSchema.java index 1b989ff..84f858d 100644 --- a/prod/net/jaekl/cfb/db/CfbSchema.java +++ b/prod/net/jaekl/cfb/db/CfbSchema.java @@ -7,9 +7,12 @@ import static net.jaekl.cfb.db.Column.Type.*; import java.sql.Connection; import java.sql.SQLException; +import java.util.Collection; import net.jaekl.cfb.analyze.MessageMap; import net.jaekl.cfb.db.driver.DbDriver; +import net.jaekl.cfb.xml.messages.BugCategory; +import net.jaekl.cfb.xml.messages.BugPattern; public class CfbSchema extends Schema { @@ -20,82 +23,62 @@ public class CfbSchema extends Schema { public static final Sequence FOUND_SEQ = new Sequence("FOUND_SEQ"); public static final Sequence LOC_SEQ = new Sequence("LOC_SEQ"); public static final Sequence RUN_SEQ = new Sequence("RUN_SEQ"); + public static final Sequence VARIABLE_SEQ = new Sequence("VARIABLE_SEQ"); - public static final String BUGID = "BUGID"; - public static final String CATEGORYID = "CATEGORYID"; - public static final String FOUNDID = "FOUNDID"; - public static final String LOCID = "LOCID"; - public static final String RUNID = "RUNID"; + public static final Column BUGID = new Column("BUGID", INTEGER, -1, NOT_NULL); + public static final Column CATEGORY = new Column("CATEGORY", VARCHAR, 80, NOT_NULL); + public static final Column CATEGORYID = new Column("CATEGORYID", INTEGER, -1, NOT_NULL); + public static final Column CLASSNAME = new Column("CLASSNAME", VARCHAR, 256, NOT_NULL); + public static final Column ENDLINE = new Column("ENDLINE", INTEGER, -1, NULL); + public static final Column ENDTIME = new Column("ENDTIME", TIMESTAMPTZ, -1, NOT_NULL); + public static final Column FIRSTLOCID = new Column("FIRSTLOCID", INTEGER, -1, NOT_NULL); + public static final Column FOUNDID = new Column("FOUNDID", INTEGER, -1, NOT_NULL); + public static final Column LOCID = new Column("LOCID", INTEGER, -1, NOT_NULL); + public static final Column METHODNAME = new Column("METHODNAME", VARCHAR, 256, NULL); + public static final Column METHODROLE = new Column("METHODROLE", VARCHAR, 80, NULL); + public static final Column NAME = new Column("NAME", VARCHAR, 256, NOT_NULL); + public static final Column PROJNAME = new Column("PROJNAME", VARCHAR, 80, NOT_NULL); + public static final Column RUNID = new Column("RUNID", INTEGER, -1, NOT_NULL); + public static final Column SECONDLOCID = new Column("SECONDLOCID", INTEGER, -1, NULL); + public static final Column STARTLINE = new Column("STARTLINE", INTEGER, -1, NULL); + public static final Column STARTTIME = new Column("STARTTIME", TIMESTAMPTZ, -1, NOT_NULL); + public static final Column THIRDLOCID = new Column("THIRDLOCID", INTEGER, -1, NULL); + public static final Column TYPE = new Column("TYPE", VARCHAR, 80, NOT_NULL); + public static final Column VARID_FK = new Column("VARID", INTEGER, -1, NULL); // foreign key + public static final Column VARID_PK = new Column("VARID", INTEGER, -1, NOT_NULL); // primary key + public static final Column VARROLE = new Column("VARROLE", VARCHAR, 80, NOT_NULL); + public static final Column VERSION = new Column("VERSION", VARCHAR, 32, NULL); - // Define each table as follows: - // { - // { table_name }, - // { column_name, type, width (-1 for default), null/not_null } - // } - private static final Object[][] BUGS_DEFN = - { - // Description of each possible bug - { "BUG" }, - { BUGID, INTEGER, -1, NOT_NULL }, - { "TYPE", VARCHAR, 80, NOT_NULL } - }; - private static final Object[][] CATEGORIES_DEFN = - { - // Description of each possible bug category - { "CATEGORY" }, - { CATEGORYID, INTEGER, -1, NOT_NULL }, - { "CATEGORY", VARCHAR, 80, NOT_NULL } - }; - private static final Object[][] FOUND_DEFN = - { - // One BugInstance, found during an analysis - { "FOUND" }, - { FOUNDID, INTEGER, -1, NOT_NULL }, - { "BUGID", INTEGER, -1, NOT_NULL }, - { "CATEGORYID", INTEGER, -1, NOT_NULL }, - { "FIRSTLOCID", INTEGER, -1, NOT_NULL }, - { "SECONDLOCID", INTEGER, -1, NULL }, - { "THIRDLOCID", INTEGER, -1, NULL } - }; - private static final Object[][] LOCATIONS_DEFN = - { - // Location in the source code referenced by a BugInstance - { "LOCATION" }, - { LOCID, INTEGER, -1, NOT_NULL }, - { "CLASSNAME", VARCHAR, 256, NOT_NULL }, - { "STARTLINE", INTEGER, -1, NULL }, - { "ENDLINE", INTEGER, -1, NULL } - }; - private static final Object[][] RUNS_DEFN = - { - // Runs of FindBugs, normally one per build version - { "RUN" }, - { RUNID, INTEGER, -1, NOT_NULL }, - { "VERSION", VARCHAR, 32, NULL }, - { "STARTTIME", TIMESTAMPTZ, -1, NOT_NULL }, - { "ENDTIME", TIMESTAMPTZ, -1, NOT_NULL } - }; - - public static final Table BUGS = Table.construct(BUGS_DEFN); - public static final Table CATEGORIES = Table.construct(CATEGORIES_DEFN); - public static final Table FOUND = Table.construct(FOUND_DEFN); - public static final Table LOCATIONS = Table.construct(LOCATIONS_DEFN); - public static final Table RUNS = Table.construct(RUNS_DEFN); + private static final Column[] BUGS_COLS = { BUGID, TYPE }; + private static final Column[] CATEGORIES_COLS = { CATEGORYID, CATEGORY }; + private static final Column[] FOUND_COLS = { FOUNDID, RUNID, BUGID, CATEGORYID, FIRSTLOCID, SECONDLOCID, THIRDLOCID, VARID_FK }; + private static final Column[] LOCATIONS_COLS = { LOCID, CLASSNAME, METHODNAME, METHODROLE, STARTLINE, ENDLINE }; + private static final Column[] RUNS_COLS = { RUNID, PROJNAME, VERSION, STARTTIME, ENDTIME }; + private static final Column[] VARIABLES_COLS = { VARID_PK, NAME, VARROLE }; + + public static final Table BUGS = new Table("BUGS", BUGS_COLS); + public static final Table CATEGORIES = new Table("CATEGORIES", CATEGORIES_COLS); + public static final Table FOUND = new Table("FOUND", FOUND_COLS); + public static final Table LOCATIONS = new Table("LOCATIONS", LOCATIONS_COLS); + public static final Table RUNS = new Table("RUNS", RUNS_COLS); + public static final Table VARIABLES = new Table("VARIABLES", VARIABLES_COLS); - private static final Sequence[] SEQUENCES = { + static final Sequence[] SEQUENCES = { BUG_SEQ, CATEGORY_SEQ, FOUND_SEQ, LOC_SEQ, - RUN_SEQ + RUN_SEQ, + VARIABLE_SEQ }; - private static final Table[] TABLES = { + static final Table[] TABLES = { BUGS, CATEGORIES, FOUND, LOCATIONS, - RUNS + RUNS, + VARIABLES }; public CfbSchema(DbDriver driver) { @@ -115,8 +98,53 @@ public class CfbSchema extends Schema { boolean postCreationInit(Connection con) throws SQLException { assert(null != m_msgMap); - + if (! insertCategories(con)) { + return false; + } + if (! insertPatterns(con)) { + return false; + } return true; } + + boolean insertCategories(Connection con) throws SQLException { + Collection categories = m_msgMap.getColl().getCategories(); + + Object[][] values = new Object[categories.size()][CATEGORIES.getNumColumns()]; + + int row = 0; + for (BugCategory cat : categories) { + long categoryId = m_driver.nextVal(con, CATEGORY_SEQ); + cat.setId(categoryId); + + values[row][0] = Long.valueOf(categoryId); + values[row][1] = cat.getCategory(); + row++; + } + + int count = m_driver.insert(con, CATEGORIES, values); + + return (categories.size() == count); + } + + boolean insertPatterns(Connection con) throws SQLException { + Collection patterns = m_msgMap.getColl().getPatterns(); + + Object[][] values = new Object[patterns.size()][BUGS.getNumColumns()]; + + int row = 0; + for (BugPattern bug : patterns) { + long bugId = m_driver.nextVal(con, BUG_SEQ); + bug.setId(bugId); + + values[row][0] = Long.valueOf(bugId); + values[row][1] = bug.getType(); + row++; + } + + int count = m_driver.insert(con, BUGS, values); + + return (patterns.size() == count); + } }