use sendQuery if no return is expected

This commit is contained in:
2019-08-04 19:36:13 +02:00
parent aeabe3f8c1
commit 81aebd815d
11 changed files with 82 additions and 14 deletions

View File

@@ -206,6 +206,12 @@ class Connection(
} }
} }
override fun sendQuery(sql: String, values: Map<String, Any?>): Int {
return replaceArgs(sql, values) {
sendQuery(this.sql, this.parameters)
}
}
private fun compileArgs(values: List<Any?>): List<Any?> { private fun compileArgs(values: List<Any?>): List<Any?> {
return values.map { return values.map {
if (it is EntityI<*>) { if (it is EntityI<*>) {

View File

@@ -49,4 +49,6 @@ interface EmbedExecutable {
fun exec(values: List<Any?> = emptyList()): ResultSet fun exec(values: List<Any?> = emptyList()): ResultSet
fun exec(values: Map<String, Any?>): ResultSet fun exec(values: Map<String, Any?>): ResultSet
fun sendQuery(values: List<Any?> = emptyList()): Int
fun sendQuery(values: Map<String, Any?>): Int
} }

View File

@@ -51,4 +51,5 @@ interface Executable {
fun exec(sql: String, values: List<Any?> = emptyList()): ResultSet fun exec(sql: String, values: List<Any?> = emptyList()): ResultSet
fun exec(sql: String, values: Map<String, Any?>): ResultSet fun exec(sql: String, values: Map<String, Any?>): ResultSet
fun sendQuery(sql: String, values: List<Any?> = emptyList()): Int fun sendQuery(sql: String, values: List<Any?> = emptyList()): Int
fun sendQuery(sql: String, values: Map<String, Any?>): Int
} }

View File

@@ -169,12 +169,22 @@ class Function(val definition: Function, override val connection: Connection): E
return connection.exec(sql, values) return connection.exec(sql, values)
} }
override fun sendQuery(values: List<Any?>): Int {
exec(values)
return 0
}
override fun sendQuery(values: Map<String, Any?>): Int {
exec(values)
return 0
}
private fun compileArgs(values: List<Any?>): String { private fun compileArgs(values: List<Any?>): String {
val placeholders = values val placeholders = values
.filterIndexed { index, any -> .filterIndexed { index, value ->
definition.parameters[index].default === null || any !== null definition.parameters[index].default === null || value != null
} }
.mapIndexed { index, any -> .mapIndexed { index, _ ->
"?::" + definition.parameters[index].type "?::" + definition.parameters[index].type
} }

View File

@@ -99,4 +99,12 @@ class Query(override val name: String, private val sql: String, override val con
override fun exec(values: Map<String, Any?>): ResultSet { override fun exec(values: Map<String, Any?>): ResultSet {
return connection.exec(sql, values) return connection.exec(sql, values)
} }
override fun sendQuery(values: List<Any?>): Int {
return connection.sendQuery(sql, values)
}
override fun sendQuery(values: Map<String, Any?>): Int {
return connection.sendQuery(sql, values)
}
} }

View File

@@ -17,7 +17,7 @@ data class Function(
init { init {
if (up.name != down.name) { if (up.name != down.name) {
throw Exception("UP and DOWN migration must have the same name [${up.name} !== ${down.name}]") throw Exception("UP and DOWN migration must have the same name [${up.name} != ${down.name}]")
} }
} }
@@ -49,7 +49,7 @@ data class Function(
connection.sendQuery(down.script) connection.sendQuery(down.script)
this::class.java.classLoader.getResource("sql/migration/deleteFunction.sql")!!.readText().let { this::class.java.classLoader.getResource("sql/migration/deleteFunction.sql")!!.readText().let {
connection.exec(it, listOf(down)) connection.sendQuery(it, listOf(down))
} }
return Status.OK return Status.OK
} }

View File

@@ -79,14 +79,15 @@ class MigrationTest(): TestAbstract() {
@Test @Test
fun `run migrations force down`() { fun `run migrations force down`() {
val resources = File(this::class.java.getResource("/sql/real_migrations").toURI()) val resources = File(this::class.java.getResource("/sql/real_migrations").toURI())
Migrations(resources, getConnextion()).apply { val resourcesFunctions = File(this::class.java.getResource("/sql/function").toURI())
Migrations(listOf(resources, resourcesFunctions), getConnextion()).apply {
up().apply { up().apply {
size `should be equal to` 1 size `should be equal to` 6
} }
} }
Migrations(resources, getConnextion()).apply { Migrations(listOf(resources, resourcesFunctions), getConnextion()).apply {
forceAllDown().apply { forceAllDown().apply {
size `should be equal to` 1 size `should be equal to` 6
} }
} }
} }
@@ -95,7 +96,7 @@ class MigrationTest(): TestAbstract() {
fun `run functions migrations`() { fun `run functions migrations`() {
val resources = File(this::class.java.getResource("/sql/function").toURI()) val resources = File(this::class.java.getResource("/sql/function").toURI())
Migrations(resources, getConnextion()).apply { Migrations(resources, getConnextion()).apply {
run().size `should be equal to` 4 run().size `should be equal to` 5
} }
val objTest: RequesterTest.ObjTest? = Requester(getConnextion()) val objTest: RequesterTest.ObjTest? = Requester(getConnextion())

View File

@@ -4,8 +4,8 @@ import fr.postgresjson.connexion.Paginated
import fr.postgresjson.connexion.Requester import fr.postgresjson.connexion.Requester
import fr.postgresjson.entity.IdEntity import fr.postgresjson.entity.IdEntity
import org.junit.Assert import org.junit.Assert
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Assertions.assertNotNull
import org.junit.jupiter.api.Test import org.junit.jupiter.api.Test
import java.io.File import java.io.File
@@ -44,7 +44,7 @@ class RequesterTest: TestAbstract() {
.getQuery("Test/selectOne") .getQuery("Test/selectOne")
.exec() .exec()
Assertions.assertNotNull(result.getString(1)) assertNotNull(result.getString(1))
} }
@Test @Test
@@ -55,7 +55,29 @@ class RequesterTest: TestAbstract() {
.getFunction("test_function") .getFunction("test_function")
.exec(listOf("test", "plip")) .exec(listOf("test", "plip"))
Assertions.assertNotNull(result.getString(1)) assertNotNull(result.getString(1))
}
@Test
fun `call sendQuery on query`() {
val resources = File(this::class.java.getResource("/sql/query").toURI())
val result = Requester(getConnextion())
.addQuery(resources)
.getQuery("Test/exec")
.sendQuery()
assertEquals(0, result)
}
@Test
fun `call sendQuery on function`() {
val resources = File(this::class.java.getResource("/sql/function").toURI())
val result = Requester(getConnextion())
.addFunction(resources)
.getFunction("function_void")
.sendQuery(listOf("test"))
assertEquals(0, result)
} }
@Test @Test

View File

@@ -73,3 +73,12 @@ BEGIN
resource = json_build_object('id', 1, 'name', 'changedName'); resource = json_build_object('id', 1, 'name', 'changedName');
END; END;
$$; $$;
CREATE OR REPLACE FUNCTION function_void (name text default 'plop') returns void
LANGUAGE plpgsql
AS
$$
BEGIN
PERFORM 1;
END;
$$

View File

@@ -0,0 +1,8 @@
CREATE OR REPLACE FUNCTION function_void (name text default 'plop') returns void
LANGUAGE plpgsql
AS
$$
BEGIN
PERFORM 1;
END;
$$;

View File

@@ -0,0 +1 @@
delete FROM test where 2038538 = 2;