DDL и create.sql
Описание
В конфигурации модели можно указывать ddl-скрипты, которые собираются и на основе их
формируется скрипт create.sql, который используется для создания структры базы данных.
Пример использования:
<root>
<dbm>
<model name="my-model">
<!-- скрипт из указанного файла -->
<ddl name="ddl.1"
stage="afterTables"
file="#{path}/script1.sql"/>
<!-- генерация скрипта с помощью gsp -->
<ddl name="ddl.2"
stage="tables"
file="#{path}/script1.gsp"/>
<!-- генерация ddl с помощью ddl-провайдера -->
<ddl name="ddl.3"
stage="afterTables"
class="jandcode.core.dbm.ddl.DDLProvider"/>
</model>
</dbm>
</root>ddl.1 - можно просто указать файл с текстом ddl-операторов, разделенных строкой ~~,
которая должна быть в начале строки и в этой строке более ничего быть не должно:
create table t1(
id varchar(10)
)
~~
create table t2(
id varchar(10)
)
~~
ddl.2 - можно указать gsp-скрипт, который сгенерирует текст ddl-операторов,
разделенных ~~. Примеры можно посмотреть в
jandcode/core/dbm/dbstruct/ddl/domain-table.gsp и других файлов в этом пакете.
ddl.3 - можно указать реализатор интерфейса
jandcode.core.dbm.ddl.DDLProvider, который вернет набор ddl-операторов. Пример
реализации: jandcode.core.dbm.ddl.impl.DefaultDDLProvider.
stage
Сбор ddl осуществляется в несколько стадий. Стадии описаны в
jandcode.core.dbm.ddl.DDLStage. В конфигурации dll указываетя соотвествующая стадия,
для которой предназначен этот ddl.
Это позволяет разместить текст ddl в ожидаемой части общео скрипта create.sql.
Например ddl должен расчитывать, что все таблицы уже созданы, тогда стадия
должна быть afterTables.
dbdata
Имеется возможность сгенерировать набор insert-операторов по файлам csv и xml.
<root>
<dbm>
<model name="my-model">
<ddl name="dbdata.system"
class="jandcode.core.dbm.dbdata.DDLProvider_dbdata"
stage="data"
path="#{path}/dbdata/*.*"/>
</model>
</dbm>
</root>Указываем провайдер jandcode.core.dbm.dbdata.DDLProvider_dbdata, stage data, и путь, в
котором лежат csv/xml файлы с именам, как у таблиц, для которых эти данные предназначены.
csv
Формат csv: разделитель запятая, если значение содержит запятую, то значение берется в двойные кавычки, первая строка - имена столбцов.
id,val
1,val1
2,"val2,2"
xml
Каждый тег верхнего уровня - строка. Атрибут - значение поля с соответствующем именем.
<root>
<row id="1" val="val1"/>
<row id="2" val="val2,2"/>
</root>