Метаданные Celesta

Материал из Course Orchestra
Перейти к: навигация, поиск
Внимание! Вы просматриваете документацию к Celesta 6.x. Документация по Celesta 7.x доступна на courseorchestra.github.io/celesta.

1. Справочник Celesta

1.1 Введение и основные понятия
1.2 Запуск и авто-обновление
1.3 Базовая настройка
1.4 Системные таблицы
1.5 CelestaSQL
1.6 CelestaDoc
1.7 Контексты сессии и вызова
1.8 Курсоры
1.9 BLOB-поля
1.10 Option-поля
1.11 Защита от потерянных обновлений
1.12 Метаданные Celesta
1.13 CelestaUnit

2. Celesta и базы данных

2.1 Особенности работы Celesta с поддерживаемыми типами СУБД
2.2 Проектирование базы данных Celesta в DBSchema

3. Создание решений с использованием Celesta для ShowCase

3.1 Программа обучения Celesta
3.2 Подготовка рабочего места для работы с Celesta
3.2.1 Для разработчиков платформы
3.2.2 Для разработчиков решений
3.3 Системные гранулы Celesta
3.3.1 common
3.3.1.1 Экспорт/импорт данных
3.3.1.2 Навигатор
3.3.1.3 Серии номеров
3.3.1.4 Иерархия Дьюи
3.3.1.5 Системные функции
3.3.1.6 Реестр настроек
3.3.1.7 Mailsender
3.3.1.8 Common.filter
3.3.2 common.api
3.3.4 security
3.3.3 lyra
3.4 Стандартные гранулы Celesta
3.4.1 dirusing
3.4.2 workflow
3.4.3 File repository
3.5 Отрисовка элементов Showcase при помощи Celesta
3.5.1 Конвертер XML-JSON
3.5.2 Навигатор (Navigator)
3.5.3 Информационная панель (Datapanel)
3.5.4 Серверное действие (Server activity)
3.5.5 Вебтекст (WebText)
3.5.6 Грид (Grid)
3.5.6.1 Панель инструментов (ToolBar)
3.5.7 XForms
3.5.7.1 Селекторы
3.5.7.2 Submission
3.5.7.3 Загрузка/Выгрузка файлов (Upload/Download)

5. Решение проблем

5.1 Проблемы с кодировкой jython-файлов

Метаданные и их динамическое изменение

Экземпляр класса Celesta доступен через метод getCelesta() переменной context, передаваемой в качестве аргумента в каждую процедуру обработки данных.

Через метод getScore() экземпляра класса Celesta разработчик решения может получить доступ к метаданным системы, построенным при разборе «партитуры» (парсинге SQL-файлов). Доступ к метаданным необходим для двух целей:

  1. получения информации о текущей структуре базы данных во время выполнения кода бизнес-логики,
  2. динамического изменения структуры базы данных.

Для динамического изменения структуры базы данных необходимо действовать в три этапа:

  1. Используя описанные далее методы объектов метаданных, изменить объектную модель данных в памяти (ограничение: попытка изменения объектов системной гранулы "celesta" приведёт к ошибке).
  2. Вызвать метод save() объекта Score. При этом система сериализует текущее состояние метаданных гранул в .sql-файлы партитуры Celesta, перезаписывая их текущее содержимое. Перезаписываться будут лишь файлы тех гранул, которые были изменены.
  3. Вызвать статический метод reInitialize() класса Celesta. При этом происходит переинициализация объекта Celesta на основе новой партитуры и создание нового экземпляра-синглетона Celesta.

Следует понимать, что хотя Celesta не будет перезаписывать .sql-файл, если в этом нет нужды (если метаданные не были изменены), при перезаписи содержимого .sql-файлов происходит необратимая потеря комментариев и форматирования, существовавших в них ранее. Сохранены в тексте будут только CelestaDoc-комментарии. Поэтому динамическим изменением следует пользоваться с осторожностью, данная функциональность относится к продвинутым возможностям Celesta.

Состав метаданных

Все метаданные (Score) делятся на гранулы (Grain), состоящие из таблиц (Table), индексов (Index) и представлений (View).

  • Таблицы состоят из столбцов (Column) и содержат внешние ключи.
  • Индексы относятся к таблицам и состоят из их столбцов (Column).
  • Представления состоят из столбцов представлений (ViewColumnMeta), которые отличаются от столбцов таблиц, но имеют ряд общих свойств.

Ниже представлена диаграмма классов, описывающих метаданные.

Score.png

Базовым интерфейсом для столбцов таблиц и представлений является интерфейс ColumnMeta, с помощью которого можно узнать Celesta-тип данных столбца, его nullability и CelestaDoc, привязанный к данному столбцу. Данный интерфейс реализуют классы ViewColumnMeta для описания полей представлений и Column для описания полей таблиц.

Класс Column является абстрактным, и для шести типов полей, поддерживаемых Celesta, от него наследуются шесть субклассов:

Column.png

Методы модификации метаданных

Модификация метаданных во время выполнения возможна следующим образом:

Тип объекта Методы добавления Методы модификации Метод удаления
Гранула Grain(score, name)

конструктор создаёт объект-гранулу
с именем name, привязанную к score.

setVersion(version)

устанавливает тэг версии (version tag).

метод отсутствует,

гранула может быть удалена только
физическим удалением папки
с гранулой из Score.

Таблица Table(grain, name)

конструктор создаёт объект-таблицу
с именем name, привязанную к объекту-грануле grain.

setPK(columnName, ...)

устанавливает первичный ключ таблицы на основе переданного
массива имён столбцов. Попытка установки пустого
первичного ключа приводит к ошибке.

delete()

удаляет таблицу из гранулы

Поле

BinaryColumn(table, name)
BooleanColumn(table, name)
DateTimeColumn(table, name)
ZonedDateTimeColumn(table, name)
FloatingColumn(table, name)
DecimalColumn(table, name, precision, scale)
IntegerColumn(table, name)
StringColumn(table, name)
создаёт поле нужного типа с именем name,
привязанное к объекту-таблице table.

setNullableAndDefault(nullable, defaultValue)

первый (булевский) аргумент этого метода управляет
свойством isNull, второй (строковый) — задаёт значение DEFAULT,
используя синтаксис соответствующего определения поля. Например,
для поля даты здесь допустимо использование слова GETDATE,
а для целочисленного поля — слово IDENTITY.
setLength(length)
определён только для StringColumn,
устанавливает длину строки. Возможно использование
слова MAX в качестве длины.
setPrecision(precision)
определён только для DecimalColumn,
устанавливает длину числа в символах.
setScale(scale)
определён только для DecimalColumn,
устанавливает длину дробной части в символах.

delete()

удаляет поле из таблицы

Внешний ключ ForeignKey(parentTable, referencedTable, columnNames)

конструктор создаёт объект-внешний ключ,
привязанный к таблице parentTable, ссылающийся на
referencedTable. В массиве строк columnNames
передаётся список имён столбцов, с которых идёт ссылка.

setUpdateRule(updateRule)

setDeleteRule(deleteRule)
устанавливает поведение внешнего ключа на обновление
или удаление записи, на которую есть ссылка
(SET NULL, CASCADE, NO_ACTION). В качестве аргумента
следует передавать одно из значений перечисления FKRule.

delete()

удаляет внешний ключ

Индекс Index(table, name, columnNames)

создаёт индекс на таблице table с именем name и списком
полей columnNames, передаваемом как массив строк.

delete()

удаляет индекс

Представление View(grain, name, sql)

создаёт представление в грануле grain, с именем name,
на основе sql-запроса sql.

Для того, чтобы изменить sql-запрос, на основе которого

сделано представление, удалите существующее
представление и создайте новое с тем же именем.
getCelestaQueryString() — вовзращает SQL-запрос представления
getColumns() — возвращает перечень имён столбцов представления

delete() — удаляет представление

У каждого класса-наследника NamedElement (т. е. Grain, Table, Column и Index) имеются также методы getCelestaDoc() и setCelestaDoc() для чтения и установки документирующих данных CelestaDoc. При сохранении в файл динамически изменённых метаданных CelestaDoc-комментарии сохраняются.