Skip to content

Commit

Permalink
fix #5266: comma separated dbms-attribute for createProcedure-change …
Browse files Browse the repository at this point in the history
…triggers validation-check
  • Loading branch information
jclohmann authored and rberezen committed Dec 5, 2023
1 parent b38bf18 commit 6f2786b
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 8 deletions.
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));
}

@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")
);
}
}

0 comments on commit 6f2786b

Please sign in to comment.