Документация COREmanager
Режим фокусировки

Добавление дополнительных полей в таблицы

Иногда при написании плагинов нужно сохранять дополнительные параметры для встроенных объектов. COREmanager (Class mgr_db::Cache) позволяет добавлять дополнительные поля в таблицы базы данных (БД) без внесения изменений в код приложения. Добавленные поля обрабатываются стандартными алгоритмами. Система автоматически отслеживает наличие поля в таблице и его тип. При необходимости поле будет добавлено или изменён его тип. Значения таких полей можно изменить через форму редактирования или вывести в списке записей. Для этого достаточно добавить соответствующее поле в метаданные. 

Добавление поля

Перед модификацией схемы БД рекомендуется создать резервную копию данных.

Чтобы добавить дополнительное поле в таблицу, создайте каталог /usr/local/mgr5/etc/sql/{имя_продукта}.{имя_таблицы}.addon или /usr/local/mgr5/etc/sql/{имя_таблицы}.addon. Каждый файл этих каталогов описывает отдельное поле таблицы. Имя поля совпадает с именем файла. По умолчанию будет создано поле типа string с максимально возможной длиной (VARCHAR(255)). Вы можете:

  • задать другой тип данных;
  • определить значение по умолчанию;
  • определить параметры доступа, соответствующие структуре Struct mgr_db::TableDesc::Field.
Пример файла:
type=string
size=40
access_read=registered
access_write=admin+
default=0.0.0.0

type — определяет тип поля. Значения соответствуют именам классов-наследников Class mgr_db::Field. Например, string создаёт поле типа class mgr_db::StringField, а intclass mgr_db::IntField. Возможные значения:

  • string — строка. Параметр size задаёт максимальную длину ячейки. По умолчанию: 255;
  • int — целочисленное поле;
  • bool — булево значение: on или off;
  • decimal — поле для хранения чисел с фиксированной запятой;
  • date — поле для хранения даты;
  • money — поле для хранения валютных значений с автоматическим форматированием; 
  • text — текстовое поле;
  • idn — поле для хранения интернационализированного доменного имени (IDN);
  • long — целочисленное поле увеличенной длины;
  • datetime — поле для хранения времени с датой.

size — размер поля для class mgr_db::StringField. По умолчанию: 255.

access_read — ограничивает доступ на чтение значения поля по уровням доступа пользователей (см. пространство имён mgr access). По умолчанию поле доступно для всех пользователей.

access_write — ограничивает доступ на запись. Аналогично access_read.

access — задаёт права на чтение и запись одновременно. Переопределяет значения access_read и access_write.

default — устанавливает значение по умолчанию. Чтобы установить значение NULL, укажите параметр:

default null

Применение изменений

После создания или редактирования файлов очистите кеш и перезапустите панель:

rm -rf /usr/local/mgr5/var/.db.cache*
killall core

Диагностика

Чтобы убедиться, что изменения применены, подключитесь к СУБД и убедитесь, что поле добавлено:

mysql mgrName -e "DESC <MYTABLE>"
Пояснение