Заполнитель пролетного пути, когда существующее значение, если не выход, пропустит замену - PullRequest
0 голосов
/ 17 февраля 2020

Я хотел бы заменить только значение, существующее, если оно не существует, я хочу пропустить его.

Пример:

1 V1__customer. sql

insert into customer(id,name) values(1, ${name});

2 V2__staff. sql

insert into staff(id,age) values(1, ${age});

в коде

            ThreadLocalContextUtil.setInstance(instance);
            final var flyway = new Flyway();
            flyway.setDataSource(Datasource.class);
            flyway.setLocations("instance_db");
            flyway.setOutOfOrder(true);
            flyway.setValidateOnMigrate(false);
            flyway.getPlaceholders().put("name", "mr empty");
            applyProperties(flyway);
            flyway.migrate();

Вопрос: Как заменить только по имени и по возрасту пропустить его.

1 Ответ

1 голос
/ 17 февраля 2020

Этот вариант использования на самом деле не поддерживается. Flyway выдаст ошибку, если найдет маркер-заполнитель без соответствующего значения. Однако я могу придумать обходной путь.

Вы можете «заполнить» ваши заполнители пустыми строками. Это остановит Flyway, выдающий ошибку для неустановленных значений.

Внутри ваших сценариев миграции вы можете ввести защитные условия, которые выполняются только при наличии значений.

Например, в Java:

// Seed with empty strings
flyway.getPlaceholders().put("name", "");
flyway.getPlaceholders().put("id", "");
...
// Overwrite some of the placeholders
flyway.getPlaceholders().put("name", "mr empty");

Затем в вашем скрипте (псевдокод):

IF '${name}' NOT EQUAL TO '' THEN
insert into customer(id,name) values(1, ${name});

Если вы хотите встроенную поддержку, вы должны создать проблему на странице GitHub Flyway .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...