BugzillaORM — различия между версиями
м |
м |
||
Строка 31: | Строка 31: | ||
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них). | У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них). | ||
− | Поля багов | + | Поля багов перечислены ниже. Жирное "да" в колонке "можно отключить" означает, что отключать можно уже сейчас (скорее всего, через параметры типа usevotes и т.п.). Нежирное "да" в колонках "можно отключить" и "можно менять тип" означают, что чисто теоретически логика работы Bugzilla это позволяет. |
<tab sep=bar class=simpletable head=topleft> | <tab sep=bar class=simpletable head=topleft> | ||
− | поле | тип | примечания | + | поле | тип | можно отключить? | можно менять тип? | примечания |
− | short_desc | строка | | + | short_desc | строка | нет | нет | |
− | classification | single-select | | + | classification | single-select | '''да''' | нет | |
− | product | single-select | контролируется classification (или никем), у поля есть привязка к правам пользователя | + | product | single-select | да | нет | контролируется classification (или никем), у поля есть привязка к правам пользователя |
− | component | single-select | контролируется product | + | component | single-select | да | нет | контролируется product |
− | version | single-select | контролируется product | + | version | single-select | да | да | контролируется product, если тип = single-select |
− | rep_platform | single-select | специальная функция «угадывания» дефолтного значения | + | rep_platform | single-select | '''да''' | да | специальная функция «угадывания» дефолтного значения |
− | bug_file_loc | строка | | + | bug_file_loc | строка | да | да | |
− | op_sys | single-select | специальная функция «угадывания» дефолтного значения | + | op_sys | single-select | '''да''' | да | специальная функция «угадывания» дефолтного значения |
− | bug_status | single-select | есть функция валидации (Bug Status Workflow) | + | bug_status | single-select | нет | нет | есть функция валидации (Bug Status Workflow) |
− | resolution | single-select | у атрибута есть контролирующая сущность (показывается только при bug_status.closed=1) | + | resolution | single-select | да | нет | у атрибута есть контролирующая видимость сущность (показывается только при bug_status.closed=1) |
− | status_whiteboard | строка | | + | status_whiteboard | строка | да | да | |
− | keywords | multi-select | показ в виде списка | + | keywords | multi-select | да | да | показ в виде списка |
− | bug_severity | single-select | | + | bug_severity | single-select | да | нет | |
− | priority | single-select | есть желание сделать decimal | + | priority | single-select | да | да | есть желание сделать decimal |
− | assigned_to | single-select | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) | + | assigned_to | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
− | reporter | single-select | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) | + | reporter | single-select | нет | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
− | qa_contact | single-select | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) | + | qa_contact | single-select | '''да''' | нет | показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
− | votes | decimal(,0) | | + | votes | decimal(,0) | '''да''' | нет | |
− | cc | multi-select | показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени) | + | cc | multi-select | да | нет | показ в виде combo-box’а, есть функция валидации (угадывания юзера по некорректному имени) |
− | dependson | multi-select | показ в виде списка | + | dependson | multi-select | да | нет | показ в виде списка |
− | blocked | multi-select | показ в виде списка | + | blocked | multi-select | да | нет | показ в виде списка |
− | target_milestone | | + | target_milestone | single-select | да | да | контролируется product, если тип = single-select |
− | see_also | multi-select | показ в виде списка (багов) | + | see_also | multi-select | да | да | показ в виде списка (багов), если тип = single-select |
− | alias | строка | | + | alias | строка | '''да''' | да | |
− | reporter_accessible | boolean | | + | reporter_accessible | boolean | нет | нет | |
− | cclist_accessible | boolean | | + | cclist_accessible | boolean | нет | нет | |
− | estimated_time | время | | + | estimated_time | время | '''да''' | нет | |
− | remaining_time | время | | + | remaining_time | время | '''да''' | нет | |
− | deadline | дата | | + | deadline | дата | '''да''' | нет | |
− | creation_ts | дата+время | | + | creation_ts | дата+время | нет | нет | |
− | delta_ts | дата+время | | + | delta_ts | дата+время | нет | нет | |
− | cf_agreement | single-select | контролируется product | + | cf_agreement | single-select | '''да''' | да | контролируется product |
*** нет в fielddescs *** | | *** нет в fielddescs *** | | ||
− | lastdiffed | дата+время | скрыто в интерфейсе | + | lastdiffed | дата+время | нет | нет | скрыто в интерфейсе |
− | attachments | multi-select | 1 ко многим | + | attachments | multi-select | нет | нет | 1 ко многим |
− | longdescs | multi-select | 1 ко многим | + | longdescs | multi-select | нет | нет | 1 ко многим |
− | flags | multi-select | 1 ко многим | + | flags | multi-select | да | нет | 1 ко многим |
</tab> | </tab> | ||
Версия 14:26, 4 августа 2010
В Bugzilla (например, 3.6) половина кода в шаблонах, половина на основе полу-ORM’а, а большая часть не пойми как. А ORM бы туда, было бы классно, что-то в духе:
Есть сущности:
- баг
- классификация, продукт, компонент
- ключевое слово, milestone, версия, статус бага, agreement (кастомное поле!)
- вложение, комментарий, флаг, тип флага
- пользователь, группа
- как ни странно, «сущность» — «метакласс» (класс сущности)
У сущностей есть:
- ID — первичный ключ
- атрибуты
- ссылка на контролирующую сущность (тип + ID)
то есть если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую - способ преобразования в строку
- Возможно, права доступа к сущности — привязка действий над сущностью (просмотр, правка, возможно, другие) к группам пользователей. Возможно, не нужно это сюда пихать.
Типы атрибутов:
- Строка
- Boolean
- Decimal
- Дата
- Время
- Дата+время
- Single-Select → ссылка на сущность (то есть «многие к 1»)
- Необязательный вариант синглселекта — «1 к 1».
- Multi-Select → ссылка на несколько сущностей одного типа (то есть «многие ко многим»)
- Атрибут атрибута — в каком виде показывать список (если в коде/шаблонах не задано специального поведения).
- Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу.
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).
Поля багов перечислены ниже. Жирное "да" в колонке "можно отключить" означает, что отключать можно уже сейчас (скорее всего, через параметры типа usevotes и т.п.). Нежирное "да" в колонках "можно отключить" и "можно менять тип" означают, что чисто теоретически логика работы Bugzilla это позволяет.
поле | тип | можно отключить? | можно менять тип? | примечания |
---|---|---|---|---|
short_desc | строка | нет | нет | |
classification | single-select | да | нет | |
product | single-select | да | нет | контролируется classification (или никем), у поля есть привязка к правам пользователя |
component | single-select | да | нет | контролируется product |
version | single-select | да | да | контролируется product, если тип = 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 | single-select | да | да | контролируется product, если тип = single-select |
see_also | multi-select | да | да | показ в виде списка (багов), если тип = single-select |
alias | строка | да | да | |
reporter_accessible | boolean | нет | нет | |
cclist_accessible | boolean | нет | нет | |
estimated_time | время | да | нет | |
remaining_time | время | да | нет | |
deadline | дата | да | нет | |
creation_ts | дата+время | нет | нет | |
delta_ts | дата+время | нет | нет | |
cf_agreement | single-select | да | да | контролируется product |
*** нет в fielddescs *** | ||||
lastdiffed | дата+время | нет | нет | скрыто в интерфейсе |
attachments | multi-select | нет | нет | 1 ко многим |
longdescs | multi-select | нет | нет | 1 ко многим |
flags | multi-select | да | нет | 1 ко многим |
Устаревшие поля / поля, которые ХЗ зачем нужны в таблице полей багов:
- 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 от dependson)/(Сумма estimated_time от dependson) |
owner_idle_time | Текущая дата минус MAX(дата последнего коммента от Assignee, дата последней активности от Assignee) |
days_elapsed | Текущая дата минус delta_ts |
everconfirmed | Менялся ли статус хоть раз на != UNCONFIRMED |
Поля вложений:
submitter | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
---|---|
description | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени) |
filename | строка |
mimetype | строка |
ispatch | boolean |
isobsolete | boolean |
isprivate | boolean |
isurl | boolean |
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах |