Mercurial > ~dholland > hg > swallowtail > index.cgi
diff database/schema/classify.sql @ 8:68cc276ac118
SQL material from old tree, split up for accessibility.
author | David A. Holland |
---|---|
date | Sun, 19 Feb 2012 19:54:48 -0500 |
parents | |
children | d42c0db81e28 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/database/schema/classify.sql Sun Feb 19 19:54:48 2012 -0500 @@ -0,0 +1,182 @@ +-- +-- Classification. +-- +-- +-- Sorting and classifying bug reports usefully is a nontrivial +-- problem. For this reason, rather than bake in any particular +-- taxonomy, we allow multiple arbitrary classification schemes, +-- all of which are created equal. (Administratively, some will +-- be more equal than others, but that does not concern the +-- database.) +-- +-- The classification schemes/taxonomies that already exist or are +-- projected to be wanted, as of this writing, are: +-- +-- 1. The old GNATS system of categories. A PR has one category, which +-- is taken from a fixed list of keywords, currently these: +-- bin install kern lib misc pkg port-* security standards +-- toolchain xsrc y2k +-- Also the old "class" field. +-- +-- 2. The old GNATS severity and priority fields, which are still +-- useful despite being broad. +-- +-- 3. The nearest man page to where the problem appears to be. This is +-- FreeBSD's idea and seems to work fairly well for many things. +-- +-- 4. The taxonomy dholland uses in the out-of-gnats PR lists, which +-- is related to the previous (it uses man pages for drivers and +-- programs) but is three-layer hierarchical. +-- +-- 5. Assorted flat tags (e.g. PRs releng considers critical for the +-- 6.0 release), or equivalently, arbitrary hand-maintained lists. +-- It is anticipated that every developer will be able to make their +-- own lists. +-- +-- 6. Properties derivable from other data that behave like flat tags +-- (e.g. "PRs in feedback more than 6 months") - these should not be +-- stored as tags in the database but it may be desirable to be able +-- to present them the same way as tags. +-- +-- 7. Other hierarchical schemes that have yet to be invented. +-- +-- Some of these classification schemes have additional special +-- semantics. +-- +-- It is furthermore assumed that new classification schemes will be +-- added on the fly, not frequently, but frequently enough that the +-- list of schemes should not be hard-coded into programs that access +-- the database. +-- +-- This creates something of a problem; encoding hierarchical data in +-- SQL is fun enough when the hierarchy is fixed. We need to be able +-- to handle hierarchical data whose layout hasn't been invented yet, +-- and that's really pushing it. +-- +-- Arbitrary flat tags we can do. For the rest, I think we need to set +-- up a system that allows, essentially, extensions to the schema, +-- which can be arbitrary SQL, and which provide views that allow +-- nonspecialized client software to read (and maybe update, but maybe +-- not) the available material in a standardized way. +-- +-- We will then have to have an additional set of views that take the +-- union of all the extensions; these views will need to be recreated +-- when a new classification scheme is added. +-- + +-- Tags. +CREATE TABLE tags ( + name text primary key, + confidential boolean not null + -- XXX should have an owner +) +WITHOUT OIDS; + +CREATE TABLE has_tags ( + pr bigint not null references PRs (id), + tag text not null references tags (name), +) +WITHOUT OIDS; + +-- Classifications. +-- +-- Each classification scheme should define whatever tables and +-- goop it needs. It should also define a text view, as follows +-- assuming the scheme is called "foo": +-- +-- . The name of the view should be "foo_classification_text". +-- . The view should produce tuples (scheme, order, pr, value). +-- . The types should be (text, int, bigint, text). +-- . The "scheme" column should be the scheme name, suitable +-- for display, e.g. "Foo". +-- . The "order" column should contain the canonical display +-- order number for this scheme. Used with ORDER BY ASCENDING +-- to get things to appear in a consistent order. +-- . The "pr" column should have pr numbers. +-- . The "value" column should have a text representation of the +-- value. +-- +-- Choose the canonical display order number for a new scheme based on +-- the existing values in use. See below for the numbers used by the +-- built-in schemes. +-- +-- Ideally it should be possible to update the value through the text +-- view. Ideally it would also be possible to insert through it, but +-- that will never work... have to think about how to handle that +-- best. (XXX?) +-- + +-------------------------------------------------------------- + +-- The "category" classification. +-- Each PR has one category that must be taken from the list in the +-- categories table. The category is used to select the default +-- responsible entity for incoming PRs. +CREATE TABLE has_categories ( + pr bigint unique not null references PRs (id), + category text not null references categories (name) +) +WITHOUT OIDS; + +CREATE VIEW category_classification_text AS + SELECT "Category" as scheme, 100 as order, pr, category as value + FROM has_categories +; + +-- The "class" classification. +-- Each PR has one class that must be taken from the list in the +-- classes table. +CREATE TABLE has_classes ( + pr bigint unique not null references PRs (id), + class text not null references classes (name) +) +WITHOUT OIDS; + +CREATE VIEW class_classification_text AS + SELECT "Class" as scheme, 200 as order, pr, class as value + FROM has_classes +; + +-- The "severity" classification. +-- Each PR has one severity that must be taken from the list in the +-- severities table. +CREATE TABLE has_severities ( + pr bigint unique not null references PRs (id), + severity text not null references severities (name) +) +WITHOUT OIDS; + +CREATE VIEW severity_classification_text AS + SELECT "Severity" as scheme, 300 as order, pr, severity as value + FROM has_severities +; + +-- The "priority" classification. +-- Each PR has one priority that must be taken from the list in the +-- priorities table. +CREATE TABLE has_priorities ( + pr bigint unique not null references PRs (id), + priority text not null references priorities (name) +) +WITHOUT OIDS; + +CREATE VIEW priority_classification_text AS + SELECT "Priority" as scheme, 400 as order, pr, priority as value + FROM has_priorities +; + +-------------------------------------------------------------- + +-- +-- The collected view of all classifications. +-- +-- (This does not include tags, as tags should be presented +-- differently.) +-- +CREATE VIEW classification_text AS + SELECT * from category_classification_text + UNION SELECT * from class_classification_text + UNION SELECT * from severity_classification_text + UNION SELECT * from priority_classification_text +; +