4.3.3. Выполнение скриптов БД задачами Gradle
Данный механизм применяется обычно разработчиками приложения для собственного экземпляра базы данных. Выполнение скриптов в этом случае сводится к запуску специальных задач Gradle, описанных в скрипте сборки build.gradle. Это можно сделать как из командной строки, так и с помощью интерфейса Studio.
Для запуска скриптов создания БД служит задача createDb
. В Studio ей соответствует команда главного меню Run → Create database. При запуске задачи происходит следующее:
-
В каталоге
modules/core/build/db
собираются скрипты базовых проектов платформы и скриптыdb/**/*.sql
модуля core текущего проекта. Наборы скриптов базовых проектов располагаются в подкаталогах с числовыми префиксами начиная с 10, скрипты текущего проекта - в подкаталоге с префиксом 50. Числовые префиксы необходимы для соблюдения алфавитного порядка выполнения скриптов - сначала выполняются скрипты cuba, затем других базовых проектов, затем текущего проекта. -
Если БД существует, она полностью очищается. Если не существует, то создается новая пустая БД.
-
Последовательно в алфавитном порядке выполняются все скрипты создания
modules/core/build/db/init/**/*create-db.sql
, и их имена вместе с путем относительно каталогаdb
регистрируются в таблицеSYS_DB_CHANGELOG
. -
В таблице
SYS_DB_CHANGELOG
аналогично регистрируются все имеющиеся на данный момент скрипты обновленияmodules/core/build/db/update/**/*.sql
. Это необходимо для будущего инкрементального обновления БД новыми скриптами.
Для запуска скриптов обновления БД служит задача updateDb
. В Studio ей соответствует команда главного меню Run → Update database. При запуске задачи происходит следующее:
-
Производится сборка скриптов аналогично описанному выше.
-
Производится проверка, все ли базовые проекты имеют необходимые таблицы в базе данных. Если обнаруживается, что БД не инициализирована для работы некоторого базового проекта, выполняются его скрипты создания.
-
В каталогах
modules/core/build/db/update/**
производится поиск скриптов обновления, не зарегистрированных в таблицеSYS_DB_CHANGELOG
, то есть не выполненных ранее и содержимое которых не отражено в БД при ее инициализации. -
Последовательно в алфавитном порядке выполняются все найденные на предыдущем шаге скрипты, и их имена вместе с путем относительно каталога
db
регистрируются в таблицеSYS_DB_CHANGELOG
.