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>