Sé que esta es una publicación anterior, pero parece que no hay una solución obvia aún unos años después. Como solución a corto plazo, en Play 2.4.x-2.5.x (hasta ahora solo probado allí), puede modificar la forma en que se aplican las evoluciones durante las pruebas creando un lector de evoluciones personalizado:
package support
import play.api.db.evolutions.{ClassLoaderEvolutionsReader, Evolutions, ResourceEvolutionsReader}
import java.io.{ByteArrayInputStream, InputStream}
import java.nio.charset.StandardCharsets
import scala.io.Source
import scala.util.Try
class EvolutionTransformingReader(
classLoader: ClassLoader = classOf[ClassLoaderEvolutionsReader].getClassLoader,
prefix: String = "")
extends ResourceEvolutionsReader {
def loadResource(db: String, revision: Int): Option[InputStream] =
for {
stream <- Option(classLoader.getResourceAsStream(prefix + Evolutions.resourceName(db, revision)))
lines <- Try(Source.fromInputStream(stream).getLines).toOption
updated = lines map convertPostgresLinesToH2
} yield convertLinesToInputStream(updated)
private val ColumnRename = """(?i)\s*ALTER TABLE (\w+) RENAME COLUMN (\w+) TO (\w+);""".r
private def convertPostgresLinesToH2(line: String): String =
line match {
case ColumnRename(tableName, oldColumn, newColumn) =>
s"""ALTER TABLE $tableName ALTER COLUMN $oldColumn RENAME TO $newColumn;"""
case _ => line
}
private def convertLinesToInputStream(lines: Iterator[String]): InputStream =
new ByteArrayInputStream(lines.mkString("\n").getBytes(StandardCharsets.UTF_8))
}
luego páselo al lugar donde aplica evoluciones durante sus pruebas:
Evolutions.applyEvolutions(registry.database, new EvolutionTransformingReader())
tenga en cuenta que el lector aún se encuentra en un estado bastante tonto (se supone que las sentencias SQL son de una sola línea, lo que no está garantizado), pero esto debería ser suficiente para que cualquiera comience.