Метаданные Celesta
1. Метаданные и их динамическое изменение
Экземпляр класса Celesta
доступен через метод getCelesta() переменной CallContext context
, передаваемой в качестве аргумента в каждую процедуру обработки данных.
Через метод getScore() экземпляра класса Celesta разработчик решения может получить доступ к метаданным системы, построенным при разборе CelestaSQL-файлов. Доступ к метаданным необходим для получения информации о текущей структуре базы данных во время выполнения кода бизнес-логики, в том числе дополнительных метаданных, привязанных к объектами базы данных через CelestaDoc.
Объекты метаданных не являются неизменяемыми, текущее состояние метаданных может быть выгружено в CelestaSQL с помощью класса GrainSaver
.
Изменяемость метаданных можно использовать для разработки инструментов, читающих и генерирующих CelestaSQL — например, для интеграции с инструментами визуального проектирования баз данных. Изменение метаданных во время выполнения программы, использующей Celesta, запрещено и может привести к недетерминированному поведению системы.
2. Состав метаданных
Все метаданные (Score
) делятся на гранулы (Grain
), состоящие из таблиц (Table
), индексов (Index
) и представлений (View
).
-
Таблицы состоят из столбцов (
Column
) и содержат внешние ключи. -
Индексы относятся к таблицам и состоят из их столбцов (Column).
-
Представления состоят из столбцов представлений (
ViewColumnMeta
), которые отличаются от столбцов таблиц, но имеют ряд общих свойств.
Ниже представлена диаграмма классов, описывающих метаданные.

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

3. Модификация метаданных
Модификация метаданных используется только при разработке инструментов, генерирующих CelestaSQL код.
Модификация метаданных во время выполнения приложения на базе Celesta может привести к недетерминированному поведению системы. |
-
Для создания новых объектов метаданных используются конструкторы. Необходимые связи с другими элементами передаются через параметры: например,
IntegerColumn(table, name)
создаёт новое целочисленное поле с именемname
в таблицеtable
. -
Для удаления объектов следует пользоваться методами
delete()
, определёнными во многих из классов метаданных. -
У каждого класса-наследника
NamedElement
имеются методыgetCelestaDoc()
иsetCelestaDoc()
для чтения и установки документирующих данных CelestaDoc. При сохранении в файл динамически изменённых метаданных CelestaDoc-комментарии сохраняются. -
Для работы с объектами метаданных см. соответствующую документацию по API.