fix: functions migrations
This commit is contained in:
@@ -37,7 +37,7 @@ data class Function(
|
|||||||
connection.sendQuery(up.script)
|
connection.sendQuery(up.script)
|
||||||
|
|
||||||
this::class.java.classLoader.getResource("sql/migration/insertFunction.sql")!!.readText().let {
|
this::class.java.classLoader.getResource("sql/migration/insertFunction.sql")!!.readText().let {
|
||||||
connection.selectOne<MigrationEntity>(it, listOf(up))?.let { function ->
|
connection.selectOne<MigrationEntity>(it, listOf(up.name, up.getDefinition(), up.script, down.script))?.let { function ->
|
||||||
executedAt = function.executedAt
|
executedAt = function.executedAt
|
||||||
doExecute = Action.OK
|
doExecute = Action.OK
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,10 +37,12 @@ data class Migrations private constructor(
|
|||||||
private val queries: MutableMap<String, Query> = mutableMapOf(),
|
private val queries: MutableMap<String, Query> = mutableMapOf(),
|
||||||
private val functions: MutableMap<String, Function> = mutableMapOf()
|
private val functions: MutableMap<String, Function> = mutableMapOf()
|
||||||
) {
|
) {
|
||||||
constructor(directory: File, connection: Connection): this(connection) {
|
constructor(directory: File, connection: Connection): this(listOf(directory), connection)
|
||||||
|
|
||||||
|
constructor(directories: List<File>, connection: Connection): this(connection) {
|
||||||
initDB()
|
initDB()
|
||||||
getMigrationFromDB()
|
getMigrationFromDB()
|
||||||
getMigrationFromDirectory(directory)
|
getMigrationFromDirectory(directories)
|
||||||
queries.forEach { (_, query) ->
|
queries.forEach { (_, query) ->
|
||||||
if (query.doExecute === null) {
|
if (query.doExecute === null) {
|
||||||
query.doExecute = Action.DOWN
|
query.doExecute = Action.DOWN
|
||||||
@@ -75,6 +77,15 @@ data class Migrations private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get all migration from multiples Directories
|
||||||
|
*/
|
||||||
|
private fun getMigrationFromDirectory(directory: List<File>) {
|
||||||
|
directory.forEach {
|
||||||
|
getMigrationFromDirectory(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get all migration from Directory
|
* Get all migration from Directory
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -9,5 +9,3 @@ CREATE TABLE IF NOT EXISTS migration.functions
|
|||||||
down text NOT NULL,
|
down text NOT NULL,
|
||||||
version int NOT NULL
|
version int NOT NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
CREATE SEQUENCE IF NOT EXISTS migration.version_seq;
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
SELECT nextval('migration.version_seq');
|
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
INSERT INTO migration.functions as f (filename, definition, executed_at, up, down, version)
|
INSERT INTO migration.functions as f (filename, definition, executed_at, up, down, version)
|
||||||
VALUES (?, ?, now(), ?, ?, ?)
|
VALUES (?, ?, now(), ?, ?, (
|
||||||
|
select coalesce(max(version), 0)+1
|
||||||
|
from migration.functions f2
|
||||||
|
where filename = f2.filename
|
||||||
|
))
|
||||||
RETURNING to_json(f);
|
RETURNING to_json(f);
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
INSERT INTO migration.history as h (filename, executed_at, up, down, version)
|
INSERT INTO migration.history as h (filename, executed_at, up, down, version)
|
||||||
VALUES (?, now(), ?, ?, nextval('migration.version_seq'))
|
VALUES (?, now(), ?, ?, (
|
||||||
|
select coalesce(max(version), 0)+1
|
||||||
|
from migration.history f2
|
||||||
|
where filename = f2.filename
|
||||||
|
))
|
||||||
RETURNING to_json(h);
|
RETURNING to_json(h);
|
||||||
|
|||||||
@@ -1,11 +1,13 @@
|
|||||||
package fr.postgresjson
|
package fr.postgresjson
|
||||||
|
|
||||||
|
import fr.postgresjson.connexion.Requester
|
||||||
import fr.postgresjson.migration.Migration
|
import fr.postgresjson.migration.Migration
|
||||||
import fr.postgresjson.migration.Migrations
|
import fr.postgresjson.migration.Migrations
|
||||||
import org.amshove.kluent.`should be equal to`
|
import org.amshove.kluent.`should be equal to`
|
||||||
import org.amshove.kluent.`should contain`
|
import org.amshove.kluent.`should contain`
|
||||||
import org.amshove.kluent.invoking
|
import org.amshove.kluent.invoking
|
||||||
import org.amshove.kluent.shouldThrow
|
import org.amshove.kluent.shouldThrow
|
||||||
|
import org.junit.jupiter.api.Assertions
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
import org.junit.jupiter.api.TestInstance
|
import org.junit.jupiter.api.TestInstance
|
||||||
import java.io.File
|
import java.io.File
|
||||||
@@ -32,6 +34,18 @@ class MigrationTest(): TestAbstract() {
|
|||||||
} shouldThrow Migrations.DownMigrationNotDefined::class
|
} 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
|
@Test
|
||||||
fun `run dry migrations`() {
|
fun `run dry migrations`() {
|
||||||
val resources = File(this::class.java.getResource("/sql/real_migrations").toURI())
|
val resources = File(this::class.java.getResource("/sql/real_migrations").toURI())
|
||||||
@@ -76,4 +90,20 @@ class MigrationTest(): TestAbstract() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `run functions migrations`() {
|
||||||
|
val resources = File(this::class.java.getResource("/sql/function").toURI())
|
||||||
|
Migrations(resources, getConnextion()).apply {
|
||||||
|
run().size `should be equal to` 4
|
||||||
|
}
|
||||||
|
|
||||||
|
val objTest: RequesterTest.ObjTest? = Requester(getConnextion())
|
||||||
|
.addFunction(resources)
|
||||||
|
.getFunction("test_function")
|
||||||
|
.selectOne(listOf("test", "plip"))
|
||||||
|
|
||||||
|
Assertions.assertEquals(objTest!!.id, 3)
|
||||||
|
Assertions.assertEquals(objTest.name, "test")
|
||||||
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user