use sendQuery if no return is expected
This commit is contained in:
@@ -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?> {
|
||||
return values.map {
|
||||
if (it is EntityI<*>) {
|
||||
|
||||
@@ -49,4 +49,6 @@ interface EmbedExecutable {
|
||||
|
||||
fun exec(values: List<Any?> = emptyList()): ResultSet
|
||||
fun exec(values: Map<String, Any?>): ResultSet
|
||||
fun sendQuery(values: List<Any?> = emptyList()): Int
|
||||
fun sendQuery(values: Map<String, Any?>): Int
|
||||
}
|
||||
@@ -51,4 +51,5 @@ interface Executable {
|
||||
fun exec(sql: String, values: List<Any?> = emptyList()): ResultSet
|
||||
fun exec(sql: String, values: Map<String, Any?>): ResultSet
|
||||
fun sendQuery(sql: String, values: List<Any?> = emptyList()): Int
|
||||
fun sendQuery(sql: String, values: Map<String, Any?>): Int
|
||||
}
|
||||
@@ -169,12 +169,22 @@ class Function(val definition: Function, override val connection: Connection): E
|
||||
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 {
|
||||
val placeholders = values
|
||||
.filterIndexed { index, any ->
|
||||
definition.parameters[index].default === null || any !== null
|
||||
.filterIndexed { index, value ->
|
||||
definition.parameters[index].default === null || value != null
|
||||
}
|
||||
.mapIndexed { index, any ->
|
||||
.mapIndexed { index, _ ->
|
||||
"?::" + definition.parameters[index].type
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
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)
|
||||
}
|
||||
}
|
||||
@@ -17,7 +17,7 @@ data class Function(
|
||||
|
||||
init {
|
||||
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)
|
||||
|
||||
this::class.java.classLoader.getResource("sql/migration/deleteFunction.sql")!!.readText().let {
|
||||
connection.exec(it, listOf(down))
|
||||
connection.sendQuery(it, listOf(down))
|
||||
}
|
||||
return Status.OK
|
||||
}
|
||||
|
||||
@@ -79,14 +79,15 @@ class MigrationTest(): TestAbstract() {
|
||||
@Test
|
||||
fun `run migrations force down`() {
|
||||
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 {
|
||||
size `should be equal to` 1
|
||||
size `should be equal to` 6
|
||||
}
|
||||
}
|
||||
Migrations(resources, getConnextion()).apply {
|
||||
Migrations(listOf(resources, resourcesFunctions), getConnextion()).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`() {
|
||||
val resources = File(this::class.java.getResource("/sql/function").toURI())
|
||||
Migrations(resources, getConnextion()).apply {
|
||||
run().size `should be equal to` 4
|
||||
run().size `should be equal to` 5
|
||||
}
|
||||
|
||||
val objTest: RequesterTest.ObjTest? = Requester(getConnextion())
|
||||
|
||||
@@ -4,8 +4,8 @@ import fr.postgresjson.connexion.Paginated
|
||||
import fr.postgresjson.connexion.Requester
|
||||
import fr.postgresjson.entity.IdEntity
|
||||
import org.junit.Assert
|
||||
import org.junit.jupiter.api.Assertions
|
||||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Assertions.assertNotNull
|
||||
import org.junit.jupiter.api.Test
|
||||
import java.io.File
|
||||
|
||||
@@ -44,7 +44,7 @@ class RequesterTest: TestAbstract() {
|
||||
.getQuery("Test/selectOne")
|
||||
.exec()
|
||||
|
||||
Assertions.assertNotNull(result.getString(1))
|
||||
assertNotNull(result.getString(1))
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -55,7 +55,29 @@ class RequesterTest: TestAbstract() {
|
||||
.getFunction("test_function")
|
||||
.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
|
||||
|
||||
@@ -73,3 +73,12 @@ BEGIN
|
||||
resource = json_build_object('id', 1, 'name', 'changedName');
|
||||
END;
|
||||
$$;
|
||||
|
||||
CREATE OR REPLACE FUNCTION function_void (name text default 'plop') returns void
|
||||
LANGUAGE plpgsql
|
||||
AS
|
||||
$$
|
||||
BEGIN
|
||||
PERFORM 1;
|
||||
END;
|
||||
$$
|
||||
8
src/test/resources/sql/function/Test/function_void.sql
Normal file
8
src/test/resources/sql/function/Test/function_void.sql
Normal file
@@ -0,0 +1,8 @@
|
||||
CREATE OR REPLACE FUNCTION function_void (name text default 'plop') returns void
|
||||
LANGUAGE plpgsql
|
||||
AS
|
||||
$$
|
||||
BEGIN
|
||||
PERFORM 1;
|
||||
END;
|
||||
$$;
|
||||
1
src/test/resources/sql/query/Test/exec.sql
Normal file
1
src/test/resources/sql/query/Test/exec.sql
Normal file
@@ -0,0 +1 @@
|
||||
delete FROM test where 2038538 = 2;
|
||||
Reference in New Issue
Block a user