Restructure database code.
[cfb.git] / prod / net / jaekl / cfb / db / CfbSchema.java
1 package net.jaekl.cfb.db;
2
3 // Copyright (C) 2015 Christian Jaekl
4
5 import static net.jaekl.cfb.db.Column.Null.*;
6 import static net.jaekl.cfb.db.Column.Type.*;
7
8 import java.sql.Connection;
9 import java.sql.SQLException;
10
11 import net.jaekl.cfb.analyze.MessageMap;
12 import net.jaekl.cfb.db.driver.DbDriver;
13
14
15 public class CfbSchema extends Schema {
16         MessageMap m_msgMap;
17         
18         public static final Sequence BUG_SEQ      = new Sequence("BUG_SEQ");
19         public static final Sequence CATEGORY_SEQ = new Sequence("CATEGORY_SEQ");
20         public static final Sequence FOUND_SEQ    = new Sequence("FOUND_SEQ");
21         public static final Sequence LOC_SEQ      = new Sequence("LOC_SEQ");
22         public static final Sequence RUN_SEQ      = new Sequence("RUN_SEQ");
23         
24         public static final String BUGID = "BUGID";
25         public static final String CATEGORYID = "CATEGORYID";
26         public static final String FOUNDID = "FOUNDID";
27         public static final String LOCID = "LOCID";
28         public static final String RUNID = "RUNID";
29         
30         // Define each table as follows:
31         // {
32         //   { table_name },
33         //   { column_name, type, width (-1 for default), null/not_null }
34         // }
35         private static final Object[][] BUGS_DEFN = 
36                                 {
37                                         // Description of each possible bug
38                                         { "BUG" },
39                                         { BUGID, INTEGER, -1, NOT_NULL },
40                                         { "TYPE", VARCHAR, 80, NOT_NULL }
41                                 };
42         private static final Object[][] CATEGORIES_DEFN = 
43                                 {
44                                         // Description of each possible bug category
45                                         { "CATEGORY" },
46                                         { CATEGORYID, INTEGER, -1, NOT_NULL },
47                                         { "CATEGORY", VARCHAR, 80, NOT_NULL }
48                                 };
49         private static final Object[][] FOUND_DEFN = 
50                                 { 
51                                         // One BugInstance, found during an analysis
52                                         { "FOUND" },
53                                         { FOUNDID, INTEGER, -1, NOT_NULL },
54                                         { "BUGID", INTEGER, -1, NOT_NULL },
55                                         { "CATEGORYID", INTEGER, -1, NOT_NULL },
56                                         { "FIRSTLOCID", INTEGER, -1, NOT_NULL },
57                                         { "SECONDLOCID", INTEGER, -1, NULL },
58                                         { "THIRDLOCID", INTEGER, -1, NULL }
59                                 };
60         private static final Object[][] LOCATIONS_DEFN = 
61                                 {
62                                         // Location in the source code referenced by a BugInstance
63                                         { "LOCATION" },
64                                         { LOCID, INTEGER, -1, NOT_NULL },
65                                         { "CLASSNAME", VARCHAR, 256, NOT_NULL },
66                                         { "STARTLINE", INTEGER, -1, NULL },
67                                         { "ENDLINE", INTEGER, -1, NULL }
68                                 };
69         private static final Object[][] RUNS_DEFN = 
70                                 {
71                                         // Runs of FindBugs, normally one per build version
72                                         { "RUN" },
73                                         { RUNID, INTEGER, -1, NOT_NULL },
74                                         { "VERSION", VARCHAR, 32, NULL },
75                                         { "STARTTIME", TIMESTAMPTZ, -1, NOT_NULL },
76                                         { "ENDTIME", TIMESTAMPTZ, -1, NOT_NULL }
77                                 };
78         
79         public static final Table BUGS       = Table.construct(BUGS_DEFN);
80         public static final Table CATEGORIES = Table.construct(CATEGORIES_DEFN);
81         public static final Table FOUND      = Table.construct(FOUND_DEFN);
82         public static final Table LOCATIONS  = Table.construct(LOCATIONS_DEFN);
83         public static final Table RUNS       = Table.construct(RUNS_DEFN);
84         
85         private static final Sequence[] SEQUENCES = {
86                                         BUG_SEQ,
87                                         CATEGORY_SEQ,
88                                         FOUND_SEQ,
89                                         LOC_SEQ,
90                                         RUN_SEQ
91                                 };
92         
93         private static final Table[] TABLES = { 
94                                         BUGS,
95                                         CATEGORIES,
96                                         FOUND,
97                                         LOCATIONS,
98                                         RUNS
99                                 };
100         
101         public CfbSchema(DbDriver driver) {
102                 super("CFB", driver);
103         
104                 m_msgMap = null;
105                 
106                 addTables(TABLES);
107                 addSequences(SEQUENCES);
108         }
109         
110         public void setMessageMap(MessageMap msgMap) {
111                 m_msgMap = msgMap;
112         }
113         
114         @Override
115         boolean postCreationInit(Connection con) throws SQLException {
116                 assert(null != m_msgMap);
117                 
118                 
119                 
120                 return true;
121         }
122 }