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 (#5267)

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

* Null check added.

* migrate DatabaseListTest to groovy

---------

Co-authored-by: Daniel Mallorga <dmallorga@liquibase.com>
Co-authored-by: rberezen <ruslan.berezenskyi@gmail.com>
  • Loading branch information
3 people committed Dec 20, 2023
1 parent 182ffe5 commit 7f31f3e
Show file tree
Hide file tree
Showing 3 changed files with 81 additions and 53 deletions.
Expand Up @@ -80,17 +80,15 @@ 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);
if(dbmsSet != null) {
validateDefinitions(dbmsSet, vErrors);
}
}

Expand All @@ -100,6 +98,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));
}
}
}
}
@@ -0,0 +1,67 @@
package liquibase.database

import liquibase.database.core.H2Database
import liquibase.database.core.MSSQLDatabase
import liquibase.database.core.MySQLDatabase
import liquibase.database.core.OracleDatabase
import liquibase.exception.ValidationErrors
import spock.lang.Specification
import spock.lang.Unroll

class DatabaseListTest extends Specification {

@Unroll
def "check if database matches dbms definition (definition: #definition, database: #database, returnValueIfEmpty: #returnValueIfEmpty)"() {
when:
def result = DatabaseList.definitionMatches(definition, database, returnValueIfEmpty)
then:
result == expectedResult
where:
definition | database | returnValueIfEmpty | expectedResult
"all" | new MySQLDatabase() | false | true
"all, oracle" | new MySQLDatabase() | false | true
"none" | new MySQLDatabase() | false | false
"none, oracle" | new MySQLDatabase() | false | false
"" | new OracleDatabase() | true | true
"" | new OracleDatabase() | false | false
(String) null | new OracleDatabase() | true | true
(String) null | new OracleDatabase() | false | false
" " | new OracleDatabase() | true | true
" " | new OracleDatabase() | false | false
"oracle" | new OracleDatabase() | false | true
"oracle,mysql,mssql" | new OracleDatabase() | false | true
"oracle,mysql,mssql" | new MySQLDatabase() | false | true
"oracle,mysql,mssql" | new MSSQLDatabase() | false | true
"oracle,mysql,mssql" | new H2Database() | false | false
"!h2" | new MySQLDatabase() | false | true
"!h2" | new MySQLDatabase() | true | true
"!h2" | new H2Database() | false | false
"!h2" | new H2Database() | true | false
"!h2,mysql" | new H2Database() | false | false
"!h2,mysql" | new MySQLDatabase() | false | true
}
@Unroll
def "validate definition parameters dbms: #dbms"() {
when:
def vErrors = new ValidationErrors()
DatabaseList.validateDefinitions(dbms, vErrors)
boolean valid = !vErrors.hasErrors()
then:
valid == expectedResult
where:
dbms | expectedResult
"all" | true
"none" | true
"mysqlll" | false
"mysql" | true
"mariadb" | true
"mysql,mariadb" | true
"mysql, mariadb" | true
}
}

This file was deleted.

0 comments on commit 7f31f3e

Please sign in to comment.