BugzillaORM

Материал из YourcmcWiki
Перейти к: навигация, поиск

В Bugzilla (например, 3.6) половина кода в шаблонах, половина на основе полу-ORM’а, а большая часть не пойми как. А ORM бы туда, было бы классно, что-то в духе:

Есть сущности:

  • баг
  • классификация, продукт, компонент
  • ключевое слово, milestone, версия, статус бага, agreement (кастомное поле!)
  • вложение, комментарий, флаг, тип флага
  • пользователь, группа
  • как ни странно, «сущность» — «метакласс» (класс сущности)

У сущностей есть:

  • ID — первичный ключ
  • атрибуты
  • ссылка на контролирующую сущность (тип + ID)
    то есть если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую
  • способ преобразования в строку
  • могут быть права доступа к сущности — привязка действий над сущностью (просмотр, правка, возможно, другие) к группам пользователей

Типы атрибутов:

  • Строка
  • Boolean
  • Decimal
  • Дата
  • Время
  • Дата+время
  • Single-Select → ссылка на сущность (то есть «многие к 1»)
    • Необязательный вариант синглселекта — «1 к 1».
  • Multi-Select → ссылка на несколько сущностей одного типа (то есть «многие ко многим»)
    • Атрибут атрибута — в каком виде показывать список (если в коде/шаблонах не задано специального поведения).
    • Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу.

У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).

Поля багов:

поле тип примечания
short_desc строка
classification single-select
product single-select контролируется classification (или никем), у поля есть привязка к правам пользователя
component single-select контролируется product
version single-select контролируется product
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 дата+время
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, так как данные хранятся в локальных файлах