BugzillaORM — различия между версиями

Материал из YourcmcWiki
Перейти к: навигация, поиск
м
Строка 1: Строка 1:
Bugzilla:
+
В Bugzilla (например, 3.6) половина кода в шаблонах, половина на основе полу-ORM’а, а большая часть не пойми как. А ORM бы туда, было бы классно, что-то в духе:
  
 
Есть сущности:
 
Есть сущности:
Строка 8: Строка 8:
  
 
У сущностей есть:
 
У сущностей есть:
* ID - первичный ключ
+
* ID — первичный ключ
 
* атрибуты
 
* атрибуты
* ссылка на контролирующую сущность (тип + ID) <br /> т.е. если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую
+
* ссылка на контролирующую сущность (тип + ID) <br /> то есть если другая сущность ссылается на эту, другим полем она должна ссылаться и на контролирующую
 
* способ преобразования в строку
 
* способ преобразования в строку
  
Строка 22: Строка 22:
 
* Single-Select &rarr; ссылка на сущность
 
* Single-Select &rarr; ссылка на сущность
 
* Multi-Select &rarr; ссылка на несколько сущностей одного типа
 
* Multi-Select &rarr; ссылка на несколько сущностей одного типа
** Атрибут атрибута - в каком виде показывать список.
+
** Атрибут атрибута — в каком виде показывать список.
  
 
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).
 
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них).
Строка 28: Строка 28:
 
Поля багов:
 
Поля багов:
 
<tab sep=bar class=simpletable head=left>
 
<tab sep=bar class=simpletable head=left>
short_desc         | строка
+
short_desc | строка
classification         | single-select
+
classification | single-select
product                 | single-select, контролируется classification (или никем), у поля есть привязка к правам пользователя
+
product | single-select, контролируется classification (или никем), у поля есть привязка к правам пользователя
version                 | single-select, контролируется product
+
version | single-select, контролируется product
component               | single-select, контролируется  
+
component | 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 | строка
see_also               | multi-select, показ в виде списка (багов)
+
see_also | multi-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 | дата+время
lastdiffed             | дата+время, скрыто в интерфейсе
+
lastdiffed | дата+время, скрыто в интерфейсе
 
</tab>
 
</tab>
  
Строка 76: Строка 76:
 
Вычисляемые поля багов:
 
Вычисляемые поля багов:
 
<tab sep=bar class=simpletable head=left>
 
<tab sep=bar class=simpletable head=left>
work_time               | Сумма work_time от связанных longdescs
+
work_time | Сумма work_time от связанных longdescs
 
percentage_complete | (Сумма work_time связанных багов)/(Сумма estimated_time связанных багов)
 
percentage_complete | (Сумма work_time связанных багов)/(Сумма estimated_time связанных багов)
 
owner_idle_time | Текущая дата минус MAX(дата последнего коммента от Assignee, дата последней активности от Assignee)
 
owner_idle_time | Текущая дата минус MAX(дата последнего коммента от Assignee, дата последней активности от Assignee)
days_elapsed         | Текущая дата минус delta_ts
+
days_elapsed | Текущая дата минус delta_ts
everconfirmed           | Менялся ли статус хоть раз на != UNCONFIRMED
+
everconfirmed | Менялся ли статус хоть раз на != UNCONFIRMED
 
</tab>
 
</tab>
  
 
Поля вложений:
 
Поля вложений:
 
<tab sep=bar class=simpletable head=top>
 
<tab sep=bar class=simpletable head=top>
bug_id     | single-select, показ в виде строки
+
bug_id | single-select, показ в виде строки
submitter   | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени)
+
submitter | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
description | single-select, показ в виде select'а или строки, есть функция валидации (угадывания юзера по некорректному имени)
+
description | single-select, показ в виде select’а или строки, есть функция валидации (угадывания юзера по некорректному имени)
filename   | строка
+
filename | строка
mimetype   | строка
+
mimetype | строка
ispatch     | boolean
+
ispatch | boolean
isobsolete | boolean
+
isobsolete | boolean
isprivate   | boolean
+
isprivate | boolean
isurl       | boolean
+
isurl | boolean
thedata     | потенциально строка, а вообще-то обычно NULL, т.к. данные хранятся в локальных файлах
+
thedata | потенциально строка, а вообще-то обычно NULL, так как данные хранятся в локальных файлах
 
</tab>
 
</tab>
  
 
[[Категория:Разработка]]
 
[[Категория:Разработка]]

Версия 16:52, 2 августа 2010

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

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

  • баг
  • классификация, продукт, компонент
  • пользователь
  • группа

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

  • 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, так как данные хранятся в локальных файлах