Столбец типа enum
может принимать значение из списка допустимых значений, явно перечисленных в спецификации столбца в момент создания таблицы.
Пример создания поля Статус (status
) в таблице Задачи (tasks
) :
Field name | Type | Is Nullable | Is Immutable | Default |
---|---|---|---|---|
stage |
enum('backlog', 'new', 'in_progress', 'done') |
false |
false |
'new' |
Список значений поля можно получить из SQL запроса, используя конструкцию
SELECT value
FROM DOMAIN OF FIELD pm.tasks.status as statuses
Результат этого запроса для примера выше
statuses.value |
---|
backlog |
new |
in_progress |
done |
Перечисление значений через запятую:
SELECT string_agg(value, ', ') as lst
FROM DOMAIN OF FIELD pm.tasks.status as statuses
statuses.lst |
---|
'backlog', 'new', 'in_progress', 'done' |
Атрибуты (field_attributes
) можно присваивать каждому значению enum-а с помощью mapping
. Имена атрибутов могут быть произвольными (в рамках допустимых имен)
@{
attribute = mapping
WHEN 'enum_val1' THEN 'attr_value1'
WHEN 'enum_val2' THEN 'attr_value2'
-- ...
END
}
Атрибуты поля tasks.status
@{
-- Field attributes --
caption = 'Status',
soft_disabled = is_archived,
text_align = 'center',
cell_variant = CASE WHEN is_archived THEN 'light' END,
-- Values attributes --
option_variant = mapping
WHEN 'backlog' THEN 'outline-secondary'
WHEN 'new' THEN 'outline-info'
WHEN 'in_progress' THEN 'outline-warning'
WHEN 'done' THEN 'outline-success'
END,
icon = mapping
WHEN 'backlog' THEN 'lightbulb'
WHEN 'new' THEN 'flag'
WHEN 'in_progress' THEN 'notifications'
WHEN 'done' THEN 'done_all'
END,
order_number = mapping
WHEN 'backlog' THEN 3
WHEN 'new' THEN 1
WHEN 'in_progress' THEN 2
WHEN 'done' THEN 4
END
}
text
Атрибут text
заменяет caption для каждого из значений enum-а - устанавливает "название", которое будет отображаться в интерфейсе у пользователей.
@{
text = mapping
WHEN 'backlog' THEN 'Идеи'
WHEN 'new' THEN 'Новое'
WHEN 'in_progress' THEN 'В работе'
WHEN 'done' THEN 'Завершено'
END
}
В случаях, где необходимо установить атрибуты для поля, являющегося "массивом перечислимых значений" (array(enum('backlog', 'new', 'in_progress', 'done'))
) вместо mapping
используется array mapping
:
{
$status array(enum('backlog', 'new', 'in_progress', 'done')) null @{
caption = 'Status',
text = array mapping
WHEN 'backlog' THEN 'Ideas'
WHEN 'new' THEN 'New'
WHEN 'in_progress' THEN 'In progress'
WHEN 'done' THEN 'Done'
END
}
}:
SELECT id
FROM pm.tasks
WHERE ($status IS NULL OR status = ANY($status))
В озме поддерживаются операторы .@
и .@@
, которые позволяют получить значения атрибутов поля и сущности соответственно.
SELECT @type = 'board',
status.@text as status @{
option_variant = status.@option_variant,
icon = status.@icon
},
subject,
due_date,
status as s @{
visible = false,
board_group = true
},
FROM pm.tasks
ORDER BY status.@order_number
status.@text
- возвращает 'Новое' для записей в статусе new
, 'В работе' для записей в статусе in_progress
и т.д.status.@icon
и status.@option_variant
, status.@order_number
- возвращают значения атрибутов, соответствующие указанному статусу записи