# HG changeset patch # User David A. Holland # Date 1329700911 18000 # Node ID 1720f45dd4953617bb698594b174fe57b4b05fb2 # Parent efb427d8b704467abe65b64957e7b736822d0943 Replace insane handling of states with something more likely workable. diff -r efb427d8b704 -r 1720f45dd495 database/schema/bugs.sql --- a/database/schema/bugs.sql Sun Feb 19 19:55:32 2012 -0500 +++ b/database/schema/bugs.sql Sun Feb 19 20:21:51 2012 -0500 @@ -15,48 +15,14 @@ confidential boolean not null, -- states - -- - -- there are 64 combinations but only these 15 are valid: - -- (un)locked closed ("closed") - -- (un)locked closed analyzed ("closed") - -- (un)locked closed invalid ("dead") - -- unlocked open ("open") - -- unlocked open analyzed ("analyzed") - -- unlocked open analyzed? feedback ("feedback") - -- unlocked open analyzed? suspended ("suspended") - -- unlocked open analyzed? feedback suspended ("stuck") - -- unlocked open invalid feedback ("incomplete") - -- - -- gnats states map to: open inval. anal. feedb. susp. - -- open open - -- analyzed open analyzed - -- feedback open feedback - -- (pullups-needed) open (*) - -- pending-pullups open (*) - -- suspended open analyzed suspended - -- (stuck) open feedback suspended - -- closed - - -- dead invalid - -- - -- The cases marked (*) are distinguished from open by the - -- branchstate in the relevance table. + state text not null references states (name); + locked boolean not null, -- deny modifications - locked boolean not null, -- deny modifications - open boolean not null, -- master switch - - invalid boolean not null, -- report is no good - analyzed boolean not null, -- issue is believed understood - feedback boolean not null, -- feedback required - suspended boolean not null, -- work halted - - -- feedback and suspended imply open - check NOT (NOT open AND (feedback OR suspended)), - -- invalid precludes analyzed and suspended - check NOT (invalid AND (analyzed OR suspended)), - -- open and invalid implies feedback - check NOT (NOT feedback AND open AND invalid), - -- locked implies not open - check NOT (open AND locked), + -- intended constraint: + -- select * from PRs, states where PRs.state = states.name + -- and states.closed = false and PRs.locked = true + -- should always return empty. + -- (no PR should be locked unless it is closed) -- fixed-size history arrival_schemaversion int not null, diff -r efb427d8b704 -r 1720f45dd495 database/schema/config.sql --- a/database/schema/config.sql Sun Feb 19 19:55:32 2012 -0500 +++ b/database/schema/config.sql Sun Feb 19 20:21:51 2012 -0500 @@ -24,16 +24,40 @@ WITHOUT OIDS; -- Types of bugs (sw-bug, doc-bug, etc.) -create table classes ( +CREATE TABLE classes ( name text primary key, obsolete boolean not null, description text -) without oids; +) WITHOUT OIDS; -- Categories of bugs (bin, kern, pkg, etc.) -create table categories ( +CREATE TABLE categories ( name text primary key, obsolete boolean not null, description text -) without oids; +) WITHOUT OIDS; +-- States of bugs +-- +-- The additional booleans govern the semantics of the defined states. +-- closed resolved (one way or another) +-- nagresponsible the "responsible" users should get nag-mail +-- nagsubmitter the "submitter" users should get nag-mail +-- +-- It is reasonable for multiple states to have the same settings; +-- such states presumably mean different things in ways the database +-- doesn't need to know about. +-- +-- For example: "open" might be defined as +-- ("open", false, "bug is unresolved", false, true, false) +-- and "feedback" as +-- ("feedback", false, "awaiting submitter feedback", false, false, true) +-- +CREATE TABLE states ( + name text primary key, + obsolete boolean not null, + description text , + closed boolean not null, + nagresponsible boolean not null, + nagsubmitter boolean not null +) WITHOUT OIDS;