
liquibase.harness.util.TestUtils.groovy Maven / Gradle / Ivy
package liquibase.harness.util
import liquibase.CatalogAndSchema
import liquibase.Liquibase
import liquibase.change.Change
import liquibase.changelog.ChangeSet
import liquibase.database.Database
import liquibase.harness.config.DatabaseUnderTest
import liquibase.harness.config.TestConfig
import liquibase.sql.Sql
import liquibase.sqlgenerator.SqlGeneratorFactory
import java.util.logging.Logger
class TestUtils {
static Liquibase createLiquibase(String pathToFile, Database database) {
database.resetInternalState()
return new Liquibase(pathToFile, TestConfig.instance.resourceAccessor, database)
}
static String toSqlFromLiquibaseChangeSets(Liquibase liquibase) {
Database db = liquibase.database
List changeSets = liquibase.databaseChangeLog.changeSets
List stringList = new ArrayList<>()
changeSets.each { stringList.addAll(toSql(it, db)) }
return stringList.join(System.lineSeparator())
}
private static List toSql(ChangeSet changeSet, Database db) {
return toSql(changeSet.changes, db)
}
private static List toSql(List extends Change> changes, Database db) {
List stringList = new ArrayList<>()
changes.each { stringList.addAll(toSql(it, db)) }
return stringList
}
private static List toSql(Change change, Database db) {
Sql[] sqls = SqlGeneratorFactory.newInstance().generateSql(change, db)
return sqls*.toSql()
}
static ArrayList getCatalogAndSchema(Database database, String dbSchema) {
List schemaList = parseValuesToList(dbSchema, ",")
List finalList = new ArrayList<>()
schemaList?.each { sch ->
String[] catSchema = sch.split("\\.")
String catalog, schema
if (catSchema.length == 2) {
catalog = catSchema[0]?.trim()
schema = catSchema[1]?.trim()
} else if (catSchema.length == 1) {
catalog = null
schema = catSchema[0]?.trim()
} else {
return finalList
}
finalList.add(new CatalogAndSchema(catalog, schema).customize(database))
}
return finalList
}
static List parseValuesToList(String str, String regex = null) {
List returnList = new ArrayList<>()
if (str) {
if (regex == null) {
returnList.add(str)
return returnList
}
return str?.split(regex)*.trim()
}
return returnList
}
static SortedMap resolveInputFilePaths(DatabaseUnderTest database, String basePath, String inputFormat) {
inputFormat = inputFormat ?: ""
def returnPaths = new TreeMap()
for (String filePath : TestConfig.instance.resourceAccessor.list(null, basePath, true, true, false)) {
def validFile = false
//is it a common changelog?
if (filePath =~ basePath+"/[\\w.]*\\."+inputFormat+"\$") {
validFile = true
} else if (filePath =~ basePath+"/${database.name}/[\\w.]*\\.${inputFormat}\$") {
//is it a database-specific changelog?
validFile = true
} else if (filePath =~ basePath+"/${database.name}/${database.version}/[\\w.]*\\.${inputFormat}\$") {
//is it a database-major-version specific changelog?
validFile = true
}
if (validFile) {
def fileName = filePath.replaceFirst(".*/", "").replaceFirst("\\.[^.]+\$", "")
if (!returnPaths.containsKey(fileName) || returnPaths.get(fileName).length() < filePath.length()) {
returnPaths.put(fileName, filePath)
}
}
}
Logger.getLogger(this.class.name).info("Found " + returnPaths.size() + " changeLogs for " + database.name +
"/" + database.version + " in "+basePath)
return returnPaths
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy