Метаданные Celesta

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

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

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

Объекты метаданных не являются неизменяемыми, текущее состояние метаданных может быть выгружено в CelestaSQL с помощью класса GrainSaver.

Изменяемость метаданных можно использовать для разработки инструментов, читающих и генерирующих CelestaSQL — например, для интеграции с инструментами визуального проектирования баз данных. Изменение метаданных во время выполнения программы, использующей Celesta, запрещено и может привести к недетерминированному поведению системы.

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

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

  • Таблицы состоят из столбцов (Column) и содержат внешние ключи.

  • Индексы относятся к таблицам и состоят из их столбцов (Column).

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

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

metaclasses

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

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

columnclasses

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

Модификация метаданных используется только при разработке инструментов, генерирующих CelestaSQL код.

Модификация метаданных во время выполнения приложения на базе Celesta может привести к недетерминированному поведению системы.
  • Для создания новых объектов метаданных используются конструкторы. Необходимые связи с другими элементами передаются через параметры: например, IntegerColumn(table, name) создаёт новое целочисленное поле с именем name в таблице table.

  • Для удаления объектов следует пользоваться методами delete(), определёнными во многих из классов метаданных.

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

  • Для работы с объектами метаданных см. соответствующую документацию по API.