diff --git a/src/main/kotlin/fr/postgresjson/connexion/Requester.kt b/src/main/kotlin/fr/postgresjson/connexion/Requester.kt index 7629575..72d04ba 100644 --- a/src/main/kotlin/fr/postgresjson/connexion/Requester.kt +++ b/src/main/kotlin/fr/postgresjson/connexion/Requester.kt @@ -87,21 +87,11 @@ class Requester( } private fun initRequester(req: Requester): Requester { - if (queriesDirectory === null) { - val resource = this::class.java.getResource("/sql/query") - if (resource !== null) { - req.addQuery(File(resource.toURI())) - } - } else { + if (queriesDirectory !== null) { req.addQuery(queriesDirectory) } - if (functionsDirectory === null) { - val resource = this::class.java.getResource("/sql/function") - if (resource !== null) { - req.addFunction(File(resource.toURI())) - } - } else { + if (functionsDirectory !== null) { req.addFunction(functionsDirectory) } diff --git a/src/main/kotlin/fr/postgresjson/migration/Function.kt b/src/main/kotlin/fr/postgresjson/migration/Function.kt index a5689c1..5efd2ec 100644 --- a/src/main/kotlin/fr/postgresjson/migration/Function.kt +++ b/src/main/kotlin/fr/postgresjson/migration/Function.kt @@ -3,7 +3,6 @@ package fr.postgresjson.migration import fr.postgresjson.connexion.Connection import fr.postgresjson.migration.Migration.Action import fr.postgresjson.migration.Migration.Status -import java.io.File import java.util.* import fr.postgresjson.definition.Function as DefinitionFunction @@ -35,10 +34,10 @@ data class Function( ) override fun up(): Status { - connection.exec(up.script) + connection.sendQuery(up.script) - File(this::class.java.getResource("/sql/migration/insertFunction.sql").toURI()).let { - connection.selectOne(it.readText(), listOf(up))?.let { function -> + this::class.java.classLoader.getResource("sql/migration/insertFunction.sql")!!.readText().let { + connection.selectOne(it, listOf(up))?.let { function -> executedAt = function.executedAt doExecute = Action.OK } @@ -47,10 +46,10 @@ data class Function( } override fun down(): Status { - connection.exec(down.script) + connection.sendQuery(down.script) - File(this::class.java.getResource("/sql/migration/deleteFunction.sql").toURI()).let { - connection.exec(it.readText(), listOf(down)) + this::class.java.classLoader.getResource("sql/migration/deleteFunction.sql")!!.readText().let { + connection.exec(it, listOf(down)) } return Status.OK } diff --git a/src/main/kotlin/fr/postgresjson/migration/Migrations.kt b/src/main/kotlin/fr/postgresjson/migration/Migrations.kt index 96923ef..230dfb9 100644 --- a/src/main/kotlin/fr/postgresjson/migration/Migrations.kt +++ b/src/main/kotlin/fr/postgresjson/migration/Migrations.kt @@ -1,7 +1,9 @@ package fr.postgresjson.migration +import com.fasterxml.jackson.core.type.TypeReference import com.github.jasync.sql.db.util.size import fr.postgresjson.connexion.Connection +import fr.postgresjson.definition.Function.FunctionNotFound import fr.postgresjson.entity.Entity import fr.postgresjson.migration.Migration.Action import fr.postgresjson.migration.Migration.Status @@ -58,15 +60,15 @@ data class Migrations private constructor( * Get all migration from DB */ private fun getMigrationFromDB() { - File(this::class.java.getResource("/sql/migration/findAllFunction.sql").toURI()).let { - connection.select(it.readText()) + this::class.java.classLoader.getResource("sql/migration/findAllFunction.sql")!!.readText().let { + connection.select(it, object: TypeReference>() {}) .map { function -> functions[function.filename] = Function(function.up, function.down, connection, function.executedAt) } } - File(this::class.java.getResource("/sql/migration/findAllHistory.sql").toURI()).let { - connection.select(it.readText()) + this::class.java.classLoader.getResource("sql/migration/findAllHistory.sql")!!.readText().let { + connection.select(it, object: TypeReference>() {}) .map { query -> queries[query.filename] = Query(query.filename, query.up, query.down, connection, query.executedAt) } @@ -78,27 +80,27 @@ data class Migrations private constructor( */ private fun getMigrationFromDirectory(directory: File) { directory.walk().filter { - it.isDirectory - }.forEach { subDirectory -> - subDirectory.walk().filter { - it.isFile - }.forEach { file -> - if (file.name.endsWith(".up.sql")) { - file.path.substring(0, file.path.size - 7).let { - try { - val down = File("$it.down.sql").readText() - val up = file.readText() - val name = file.name.substring(0, file.name.size - 7) - addQuery(name, up, down) - } catch (e: FileNotFoundException) { - throw DownMigrationNotDefined("$it.down.sql", e) - } + it.isFile + }.forEach { file -> + if (file.name.endsWith(".up.sql")) { + file.path.substring(0, file.path.size - 7).let { + try { + val down = File("$it.down.sql").readText() + val up = file.readText() + val name = file.name.substring(0, file.name.size - 7) + addQuery(name, up, down) + } catch (e: FileNotFoundException) { + throw DownMigrationNotDefined("$it.down.sql", e) } - } else if (file.name.endsWith(".down.sql")) { - // Nothing - } else { - val fileContent = file.readText() + } + } else if (file.name.endsWith(".down.sql")) { + // Nothing + } else { + val fileContent = file.readText() + try { addFunction(fileContent) + } catch(e: FunctionNotFound) { + // Nothing } } } @@ -153,19 +155,19 @@ data class Migrations private constructor( private fun initDB() { if (!initialized) { - File(this::class.java.getResource("/sql/migration/createHistoryShema.sql").toURI()).let { - connection.sendQuery(it.readText()) + this::class.java.classLoader.getResource("sql/migration/createHistoryShema.sql")!!.readText().let { + connection.sendQuery(it) } - File(this::class.java.getResource("/sql/migration/createFunctionShema.sql").toURI()).let { - connection.sendQuery(it.readText()) + this::class.java.classLoader.getResource("sql/migration/createFunctionShema.sql")!!.readText().let { + connection.sendQuery(it) } initialized = true } } private fun lock() { - File(this::class.java.getResource("/sql/migration/lockMigrationTables.sql").toURI()).let { - connection.sendQuery(it.readText()) + this::class.java.classLoader.getResource("sql/migration/lockMigrationTables.sql")!!.readText().let { + connection.sendQuery(it) } } diff --git a/src/main/kotlin/fr/postgresjson/migration/Query.kt b/src/main/kotlin/fr/postgresjson/migration/Query.kt index bc3ec68..673d994 100644 --- a/src/main/kotlin/fr/postgresjson/migration/Query.kt +++ b/src/main/kotlin/fr/postgresjson/migration/Query.kt @@ -3,7 +3,6 @@ package fr.postgresjson.migration import fr.postgresjson.connexion.Connection import fr.postgresjson.entity.Entity import fr.postgresjson.migration.Migration.Action -import java.io.File import java.util.* data class Query( @@ -16,10 +15,10 @@ data class Query( override var doExecute: Action? = null override fun up(): Migration.Status { - connection.exec(up) + connection.sendQuery(up) - File(this::class.java.getResource("/sql/migration/insertHistory.sql").toURI()).let { - connection.selectOne(it.readText(), listOf(name, up, down))?.let { query -> + this::class.java.classLoader.getResource("sql/migration/insertHistory.sql")!!.readText().let { + connection.selectOne(it, listOf(name, up, down))?.let { query -> executedAt = query.executedAt doExecute = Action.OK } @@ -29,10 +28,10 @@ data class Query( } override fun down(): Migration.Status { - connection.exec(down) + connection.sendQuery(down) - File(this::class.java.getResource("/sql/migration/deleteHistory.sql").toURI()).let { - connection.exec(it.readText(), listOf(name)) + this::class.java.classLoader.getResource("sql/migration/deleteHistory.sql")!!.readText().let { + connection.exec(it, listOf(name)) } return Migration.Status.OK diff --git a/src/test/kotlin/fr/postgresjson/MigrationTest.kt b/src/test/kotlin/fr/postgresjson/MigrationTest.kt index 860b5da..7420f8e 100644 --- a/src/test/kotlin/fr/postgresjson/MigrationTest.kt +++ b/src/test/kotlin/fr/postgresjson/MigrationTest.kt @@ -32,18 +32,6 @@ class MigrationTest(): TestAbstract() { } shouldThrow Migrations.DownMigrationNotDefined::class } - @Test - fun `run forced down query`() { - val resources = File(this::class.java.getResource("/sql/migrations").toURI()) - val m = Migrations(resources, getConnextion()) - repeat(3) { - m.down(true).apply { - this `should contain` Pair("1", Migration.Status.OK) - size `should be equal to` 1 - } - } - } - @Test fun `run dry migrations`() { val resources = File(this::class.java.getResource("/sql/real_migrations").toURI()) @@ -77,6 +65,11 @@ class MigrationTest(): TestAbstract() { @Test fun `run migrations force down`() { val resources = File(this::class.java.getResource("/sql/real_migrations").toURI()) + Migrations(resources, getConnextion()).apply { + up().apply { + size `should be equal to` 1 + } + } Migrations(resources, getConnextion()).apply { forceAllDown().apply { size `should be equal to` 1