Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix #5266: comma separated dbms-attribute for createProcedure-change triggers validation-check #5267

Merged
merged 8 commits into from
Dec 20, 2023
Original file line number Diff line number Diff line change
Expand Up @@ -80,18 +80,14 @@ public static Set<String> toDbmsSet(String dbmsList) {
}

/**
* This method will validate whether a dbms is valid and match with supported database, if it doesn't then
* This method will validate whether a dbms (optional: comma separated list) is valid and match with supported database, if it doesn't then
* will add a validation error for it.
* @param definition
* @param vErrors
*/
public static void validateDefinitions(String definition, ValidationErrors vErrors) {
if(!definition.contentEquals("none") && !definition.contentEquals("all") && !definition.startsWith("!")) {
Database database = DatabaseFactory.getInstance().getDatabase(definition.toLowerCase());
if (database == null) {
vErrors.addError(String.format("%s is not a supported DB", definition));
}
}
Set<String> dbmsSet = toDbmsSet(definition);
validateDefinitions(dbmsSet, vErrors);
}

/**
Expand All @@ -100,6 +96,15 @@ public static void validateDefinitions(String definition, ValidationErrors vErro
* @param vErrors
*/
public static void validateDefinitions(Collection<String> definitions, ValidationErrors vErrors) {
definitions.stream().forEach( definition -> validateDefinitions(definition, vErrors));
definitions.stream().forEach( definition -> validateDefinition(definition, vErrors));
}

private static void validateDefinition(String definition, ValidationErrors vErrors) {
if(!definition.contentEquals("none") && !definition.contentEquals("all") && !definition.startsWith("!")) {
Database database = DatabaseFactory.getInstance().getDatabase(definition.toLowerCase());
if (database == null) {
vErrors.addError(String.format("%s is not a supported DB", definition));
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,14 @@
import liquibase.database.core.MSSQLDatabase;
import liquibase.database.core.MySQLDatabase;
import liquibase.database.core.OracleDatabase;
import liquibase.exception.ValidationErrors;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;

import java.util.stream.Stream;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
Expand Down Expand Up @@ -43,4 +50,25 @@ public void databaseMatchesDbmsDefinition() {
assertFalse(DatabaseList.definitionMatches("!h2,mysql", new H2Database(), false));
assertTrue(DatabaseList.definitionMatches("!h2,mysql", new MySQLDatabase(), false));
}

MalloD12 marked this conversation as resolved.
Show resolved Hide resolved
@ParameterizedTest
@MethodSource("validateDefinitionsParameters")
public void validateDefinitions(String definition, boolean expectedResult, String message) {
ValidationErrors vErrors = new ValidationErrors();
DatabaseList.validateDefinitions(definition, vErrors);
boolean valid = !vErrors.hasErrors();
Assertions.assertEquals(expectedResult, valid, message);
}

public static Stream<Arguments> validateDefinitionsParameters() {
return Stream.of(
Arguments.of("all", true, "'all' should be valid"),
Arguments.of("none", true, "'none' should be valid"),
Arguments.of("mysqlll", false, "'mysqlll' should not be valid"),
Arguments.of("mysql", true, "'mysql' should be valid"),
Arguments.of("mariadb", true, "'mariadb' should be valid"),
Arguments.of("mysql,mariadb", true, "'mysql,mariadb' should be valid"),
Arguments.of("mysql, mariadb", true, "'mysql, mariadb' should be valid")
);
}
}