Как вывести строку 'GETDATE ()' в строковый столбец с Liquibase 3.5 для MSSQL с изменением loadData? - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть изменение loadData в liquibase:

<changeSet author="author" id="13">
        <sql>SET IDENTITY_INSERT M_Conversion ON</sql>
        <loadData tableName="M_Conversion" separator="~" file="data/13-M_Conversion.csv">
            <column name="MconID" type="NUMERIC" />
            <column name="MdbtID" type="NUMERIC" />
            <column name="MlokID" type="NUMERIC" />
            <column name="MconKeyword" type="STRING" />
            <column name="MconExtra" type="STRING" />
        </loadData>
        <sql>SET IDENTITY_INSERT M_Conversion OFF</sql>
        <rollback>
            <sql>SET IDENTITY_INSERTM_Conversion OFF</sql>
        </rollback>
</changeSet> 

В файле 13-M_Conversion.csv есть одно значение, которое вызывает проблемы для MSSQL: 201~2~200~GETDATE()~ значение GETDATE () для столбца MconKeyword не являетсяв результирующем sql

в качестве строки указывается sql, который сгенерирует liquibase для этих данных: INSERT INTO [pd].[M_Conversion] ([MconID], [MdbtID], [MlokID], [MconKeyword], [MconExtra]) VALUES (201, 2, 200, GETDATE());, но должно быть (201, 2, 200, 'GETDATE()')

Проблема в том, что в методе liquibase.sqlgenerator.core.InsertGenerator#generateValues дляВ строковых значениях есть вызов, чтобы проверить, выглядит ли строка как вызов функции

public boolean looksLikeFunctionCall(String value, Database database) {
        return value.startsWith("\"SYSIBM\"") || value.startsWith("to_date(") || value.equalsIgnoreCase(database.getCurrentDateTimeFunction());
    }

, а для MSSQLDatabase GETDATE () точно currentDateTimeFunction

Итак, вопрос в том, как мне получить это конкретное значениебыть правильно экранированным с изменением loadData?

...