BugzillaORM — различия между версиями
Материал из YourcmcWiki
м |
м |
||
Строка 20: | Строка 20: | ||
* Время | * Время | ||
* Дата+время | * Дата+время | ||
− | * Single-Select → ссылка на сущность | + | * Single-Select → ссылка на сущность (то есть многие к 1) |
− | * Multi-Select → ссылка на несколько сущностей одного типа | + | ** ''Вариант синглселекта — «1 к 1». Необязательный.'' |
− | ** Атрибут атрибута — в каком виде показывать список. | + | * Multi-Select → ссылка на несколько сущностей одного типа (то есть многие ко многим) |
+ | ** Атрибут атрибута — в каком виде показывать список (если в коде/шаблонах не задано специального поведения). | ||
+ | ** Вариант мультиселекта — «список подчинённых» (то есть 1 ко многим). Например, список аттачментов бага, список комментов к багу. | ||
У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них). | У всех атрибутов тоже есть ссылка на контролирующую сущность, означающая, что атрибут показывается, только если его сущность ссылается на его контролирующую сущность (или одну из них). | ||
Строка 28: | Строка 30: | ||
Поля багов: | Поля багов: | ||
<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 (или никем), у поля есть привязка к правам пользователя |
− | + | component | single-select, контролируется product | |
− | + | version | single-select, контролируется product | |
− | 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 | + | reporter_accessible | boolean |
− | cclist_accessible | + | cclist_accessible | boolean |
− | estimated_time | время | + | estimated_time | время |
− | remaining_time | время | + | remaining_time | время |
− | deadline | дата | + | deadline | дата |
− | creation_ts | дата+время | + | creation_ts | дата+время |
− | delta_ts | дата+время | + | delta_ts | дата+время |
− | lastdiffed | дата+время, скрыто в интерфейсе | + | *** нет в fielddescs *** | |
+ | lastdiffed | дата+время, скрыто в интерфейсе | ||
+ | attachments | multi-select 1 ко многим | ||
+ | longdescs | multi-select 1 ко многим | ||
</tab> | </tab> | ||
Строка 76: | Строка 81: | ||
Вычисляемые поля багов: | Вычисляемые поля багов: | ||
<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 | + | percentage_complete | (Сумма work_time от dependson)/(Сумма estimated_time от dependson) |
− | 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> | ||
− | + | 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> | ||
[[Категория:Разработка]] | [[Категория:Разработка]] |
Версия 17:07, 2 августа 2010
В Bugzilla (например, 3.6) половина кода в шаблонах, половина на основе полу-ORM’а, а большая часть не пойми как. А ORM бы туда, было бы классно, что-то в духе:
Есть сущности:
- баг
- классификация, продукт, компонент
- пользователь
- группа
У сущностей есть:
- 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 | дата+время |
*** нет в fielddescs *** | |
lastdiffed | дата+время, скрыто в интерфейсе |
attachments | multi-select 1 ко многим |
longdescs | 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, так как данные хранятся в локальных файлах |