BugzillaORM
Материал из YourcmcWiki
Версия от 16:48, 2 августа 2010; VitaliyFilippov (обсуждение | вклад) (переименовал «Perl, ORM и новый взгляд на мир: Лоровское 4.2» в «BugzillaORM»)
Bugzilla:
Есть сущности:
- баг
- классификация, продукт, компонент
- пользователь
- группа
У сущностей есть:
- ID - первичный ключ
- атрибуты
- ссылка на контролирующую сущность (тип + ID)
т.е. если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую - способ преобразования в строку
Типы атрибутов:
- Строка
- Boolean
- Decimal
- Дата
- Время
- Дата+время
- Single-Select → ссылка на сущность
- Multi-Select → ссылка на несколько сущностей одного типа
- Атрибут атрибута - в каком виде показывать список.
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).
Поля багов:
| short_desc | строка |
|---|---|
| classification | single-select |
| product | single-select, контролируется classification (или никем), у поля есть привязка к правам пользователя |
| version | single-select, контролируется product |
| component | single-select, контролируется |
| rep_platform | single-select, специальная функция "угадывания" дефолтного значения |
| bug_file_loc | строка |
| op_sys | single-select, специальная функция "угадывания" дефолтного значения |
| bug_status | single-select, есть функция валидации (Bug Status Workflow) |
| resolution | single-select, у атрибута есть контролирующая сущность (показывается только при bug_status.closed=1) |
| status_whiteboard | строка |
| keywords | multi-select, показ в виде списка |
| bug_severity | single-select |
| priority | single-select, есть желание сделать decimal |
| assigned_to | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
| reporter | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
| qa_contact | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
| votes | decimal(,0) |
| cc | multi-select, показ в виде combo-box'а, есть функция валидации (угадывания юзера по некорректному имени) |
| dependson | multi-select, показ в виде списка |
| blocked | multi-select, показ в виде списка |
| target_milestone | строка |
| see_also | multi-select, показ в виде списка (багов) |
| alias | строка |
| reporter_accessible | boolean |
| cclist_accessible | boolean |
| estimated_time | время |
| remaining_time | время |
| deadline | дата |
| creation_ts | дата+время |
| delta_ts | дата+время |
| lastdiffed | дата+время, скрыто в интерфейсе |
Устаревшие поля / поля, которые ХЗ зачем нужны в таблице полей багов:
- assignee_accessible
- qacontact_accessible
- longdesc
- commenter
- longdescs.isprivate
- content
- bug_group
- flagtypes.name
- requestees.login_name
- setters.login_name
Вычисляемые поля багов:
| work_time | Сумма work_time от связанных longdescs |
|---|---|
| percentage_complete | (Сумма work_time связанных багов)/(Сумма estimated_time связанных багов) |
| owner_idle_time | Текущая дата минус MAX(дата последнего коммента от Assignee, дата последней активности от Assignee) |
| days_elapsed | Текущая дата минус delta_ts |
| everconfirmed | Менялся ли статус хоть раз на != UNCONFIRMED |
Поля вложений:
| bug_id | single-select, показ в виде строки |
|---|---|
| submitter | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
| description | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
| filename | строка |
| mimetype | строка |
| ispatch | boolean |
| isobsolete | boolean |
| isprivate | boolean |
| isurl | boolean |
| thedata | потенциально строка, а вообще-то обычно NULL, т.к. данные хранятся в локальных файлах |