1 package net.jaekl.cfb.db;
3 // Copyright (C) 2015 Christian Jaekl
5 import static net.jaekl.cfb.db.Column.Null.*;
6 import static net.jaekl.cfb.db.Column.Type.*;
8 import java.sql.Connection;
9 import java.sql.SQLException;
10 import java.util.Collection;
12 import net.jaekl.cfb.analyze.MessageMap;
13 import net.jaekl.cfb.db.driver.DbDriver;
14 import net.jaekl.cfb.xml.messages.BugCategory;
15 import net.jaekl.cfb.xml.messages.BugPattern;
18 public class CfbSchema extends Schema {
21 public static final Sequence BUG_SEQ = new Sequence("BUG_SEQ");
22 public static final Sequence CATEGORY_SEQ = new Sequence("CATEGORY_SEQ");
23 public static final Sequence FOUND_SEQ = new Sequence("FOUND_SEQ");
24 public static final Sequence LOC_SEQ = new Sequence("LOC_SEQ");
25 public static final Sequence RUN_SEQ = new Sequence("RUN_SEQ");
26 public static final Sequence VARIABLE_SEQ = new Sequence("VARIABLE_SEQ");
28 public static final Column BUGID = new Column("BUGID", INTEGER, -1, NOT_NULL);
29 public static final Column CATEGORY = new Column("CATEGORY", VARCHAR, 80, NOT_NULL);
30 public static final Column CATEGORYID = new Column("CATEGORYID", INTEGER, -1, NOT_NULL);
31 public static final Column CLASSNAME = new Column("CLASSNAME", VARCHAR, 256, NOT_NULL);
32 public static final Column ENDLINE = new Column("ENDLINE", INTEGER, -1, NULL);
33 public static final Column ENDTIME = new Column("ENDTIME", TIMESTAMPTZ, -1, NOT_NULL);
34 public static final Column FIRSTLOCID = new Column("FIRSTLOCID", INTEGER, -1, NOT_NULL);
35 public static final Column FOUNDID = new Column("FOUNDID", INTEGER, -1, NOT_NULL);
36 public static final Column LOCID = new Column("LOCID", INTEGER, -1, NOT_NULL);
37 public static final Column METHODNAME = new Column("METHODNAME", VARCHAR, 256, NULL);
38 public static final Column METHODROLE = new Column("METHODROLE", VARCHAR, 80, NULL);
39 public static final Column NAME = new Column("NAME", VARCHAR, 256, NOT_NULL);
40 public static final Column PROJNAME = new Column("PROJNAME", VARCHAR, 80, NOT_NULL);
41 public static final Column RUNID = new Column("RUNID", INTEGER, -1, NOT_NULL);
42 public static final Column SECONDLOCID = new Column("SECONDLOCID", INTEGER, -1, NULL);
43 public static final Column STARTLINE = new Column("STARTLINE", INTEGER, -1, NULL);
44 public static final Column STARTTIME = new Column("STARTTIME", TIMESTAMPTZ, -1, NOT_NULL);
45 public static final Column THIRDLOCID = new Column("THIRDLOCID", INTEGER, -1, NULL);
46 public static final Column TYPE = new Column("TYPE", VARCHAR, 80, NOT_NULL);
47 public static final Column VARID_FK = new Column("VARID", INTEGER, -1, NULL); // foreign key
48 public static final Column VARID_PK = new Column("VARID", INTEGER, -1, NOT_NULL); // primary key
49 public static final Column VARROLE = new Column("VARROLE", VARCHAR, 80, NOT_NULL);
50 public static final Column VERSION = new Column("VERSION", VARCHAR, 32, NULL);
52 private static final Column[] BUGS_COLS = { BUGID, TYPE };
53 private static final Column[] CATEGORIES_COLS = { CATEGORYID, CATEGORY };
54 private static final Column[] FOUND_COLS = { FOUNDID, RUNID, BUGID, CATEGORYID, FIRSTLOCID, SECONDLOCID, THIRDLOCID, VARID_FK };
55 private static final Column[] LOCATIONS_COLS = { LOCID, CLASSNAME, METHODNAME, METHODROLE, STARTLINE, ENDLINE };
56 private static final Column[] RUNS_COLS = { RUNID, PROJNAME, VERSION, STARTTIME, ENDTIME };
57 private static final Column[] VARIABLES_COLS = { VARID_PK, NAME, VARROLE };
59 public static final Table BUGS = new Table("BUGS", BUGS_COLS);
60 public static final Table CATEGORIES = new Table("CATEGORIES", CATEGORIES_COLS);
61 public static final Table FOUND = new Table("FOUND", FOUND_COLS);
62 public static final Table LOCATIONS = new Table("LOCATIONS", LOCATIONS_COLS);
63 public static final Table RUNS = new Table("RUNS", RUNS_COLS);
64 public static final Table VARIABLES = new Table("VARIABLES", VARIABLES_COLS);
66 static final Sequence[] SEQUENCES = {
75 static final Table[] TABLES = {
84 public CfbSchema(DbDriver driver) {
90 addSequences(SEQUENCES);
93 public void setMessageMap(MessageMap msgMap) {
98 boolean postCreationInit(Connection con) throws SQLException {
99 assert(null != m_msgMap);
101 if (! insertCategories(con)) {
104 if (! insertPatterns(con)) {
111 boolean insertCategories(Connection con) throws SQLException {
112 Collection<BugCategory> categories = m_msgMap.getColl().getCategories();
114 Object[][] values = new Object[categories.size()][CATEGORIES.getNumColumns()];
117 for (BugCategory cat : categories) {
118 long categoryId = m_driver.nextVal(con, CATEGORY_SEQ);
119 cat.setId(categoryId);
121 values[row][0] = Long.valueOf(categoryId);
122 values[row][1] = cat.getCategory();
126 int count = m_driver.insert(con, CATEGORIES, values);
128 return (categories.size() == count);
131 boolean insertPatterns(Connection con) throws SQLException {
132 Collection<BugPattern> patterns = m_msgMap.getColl().getPatterns();
134 Object[][] values = new Object[patterns.size()][BUGS.getNumColumns()];
137 for (BugPattern bug : patterns) {
138 long bugId = m_driver.nextVal(con, BUG_SEQ);
141 values[row][0] = Long.valueOf(bugId);
142 values[row][1] = bug.getType();
146 int count = m_driver.insert(con, BUGS, values);
148 return (patterns.size() == count);