2016-03-11 7 views
0

Я пытаюсь сгенерировать запись с помощью Liquibase. Требование состоит в том, чтобы построить скрипт Liquibase с динамическими датами. Это означает, что всякий раз, когда выполняется сценарий, даты будут вычисляться на основе текущей даты. Есть ли способ, которым Liquibase автоматически генерирует поля даты таким образом?Liquibase generatechangelog динамические даты

пример

<insert tableName="account"> 
     <column name="id" value="1"/> 
     <column name="availablebalance" valueNumeric="36239.07"/> 
     <column name="currentbalance" valueNumeric="36000.00"/> 
     <column name="maturitydate" valueDate="2015-09-30"/> 
     <column name="opendate" valueDate="2012-09-30"/> 
     <column name="status" value="OPEN"/> 
     <column name="title" value="Alpha Deposit"/> 
     <column name="version" valueNumeric="0"/> 
     <column name="type_id" valueNumeric="20"/> 
     <column name="product_id" valueNumeric="2010101121"/> 
    </insert> 

должно быть что-то вроде

<insert tableName="account"> 
     <column name="id" value="1"/> 
     <column name="availablebalance" valueNumeric="36239.07"/> 
     <column name="currentbalance" valueNumeric="36000.00"/> 
     <column name="maturitydate" valueDate="current_date + interval '-5 months'"/> 
     <column name="opendate" valueDate="current_date + interval '-5 months'"/> 
     <column name="status" value="OPEN"/> 
     <column name="title" value="Alpha Deposit"/> 
     <column name="version" valueNumeric="0"/> 
     <column name="type_id" valueNumeric="20"/> 
     <column name="product_id" valueNumeric="2010101121"/> 
    </insert> 
+0

Это может помочь, если вы добавите пример. На какие даты вы ссылаетесь? Я думаю, что 'generateChangeLog' сам по себе не имеет такой функции. Но для меня не совсем ясно, какие даты вы хотели бы рассчитывать при запуске 'generateChangeLog'? – Jens

ответ

1

Нет, LiquiBase не имеет возможности сделать что-то вроде того, что вы ищете. Вам нужно будет написать что-то для пост-обработки XML, чтобы изменить значения даты.

Один из вариантов будут сканировать XML для <column> элементов, которые имеют valueDate атрибуты и заменить значения с ООН вспененных свойствами, так что XML выглядит следующим образом:

<insert tableName="account"> 
     <column name="id" value="1"/> 
     <column name="availablebalance" valueNumeric="36239.07"/> 
     <column name="currentbalance" valueNumeric="36000.00"/> 
     <column name="maturitydate" valueDate="${todayMinusFiveMonths}"/> 
     <column name="opendate" valueDate="${todayMinusFiveMonths}"/> 
     <column name="status" value="OPEN"/> 
     <column name="title" value="Alpha Deposit"/> 
     <column name="version" valueNumeric="0"/> 
     <column name="type_id" valueNumeric="20"/> 
     <column name="product_id" valueNumeric="2010101121"/> 
    </insert> 

... а затем добавить a <property> тег в верхней части файла, определяющий действительное значение. Это будет выглядеть примерно так:

<databaseChangeLog 
     xmlns="http://www.liquibase.org/xml/ns/dbchangelog" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:ext="http://www.liquibase.org/xml/ns/dbchangelog-ext" 
     xsi:schemaLocation="http://www.liquibase.org/xml/ns/dbchangelog http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-3.5.xsd 
     http://www.liquibase.org/xml/ns/dbchangelog-ext http://www.liquibase.org/xml/ns/dbchangelog/dbchangelog-ext.xsd"> 

    <property name="todayMinusFiveMonths" value="2015-11-10"/> 
    ... 
    remainder of changelog 
    ... 

Обратите внимание, что даже там, вы должны поставить в предварительно вычисленного значения для даты - Я не думаю, что LiquiBase имеет возможность сделать какой-либо оценки даты во время выполнения.

+0

Это то, чего я пытался избежать, но это цифры Я не буду – Apostelis

Смежные вопросы