diff --git a/src/main/kotlin/fr/postgresjson/connexion/Connection.kt b/src/main/kotlin/fr/postgresjson/connexion/Connection.kt
index 1bd52d6..4113686 100644
--- a/src/main/kotlin/fr/postgresjson/connexion/Connection.kt
+++ b/src/main/kotlin/fr/postgresjson/connexion/Connection.kt
@@ -38,7 +38,12 @@ class Connection(
fun inTransaction(f: (Connection) -> CompletableFuture) = connect().inTransaction(f)
- override fun > select(sql: String, typeReference: TypeReference, values: List, block: (QueryResult, R?) -> Unit): R? {
+ override fun > select(
+ sql: String,
+ typeReference: TypeReference,
+ values: List,
+ block: (QueryResult, R?) -> Unit
+ ): R? {
val result = exec(sql, compileArgs(values))
val json = result.rows[0].getString(0)
return if (json === null) {
@@ -50,19 +55,37 @@ class Connection(
}
}
- inline fun > selectOne(sql: String, values: List = emptyList(), noinline block: SelectOneCallback = {}): R? =
+ inline fun > selectOne(
+ sql: String,
+ values: List = emptyList(),
+ noinline block: SelectOneCallback = {}
+ ): R? =
select(sql, object: TypeReference() {}, values, block)
- override fun > select(sql: String, typeReference: TypeReference, values: Map, block: (QueryResult, R?) -> Unit): R? {
+ override fun > select(
+ sql: String,
+ typeReference: TypeReference,
+ values: Map,
+ block: (QueryResult, R?) -> Unit
+ ): R? {
return replaceArgs(sql, values) {
select(this.sql, typeReference, this.parameters, block)
}
}
- inline fun > selectOne(sql: String, values: Map, noinline block: SelectOneCallback = {}): R? =
+ inline fun > selectOne(
+ sql: String,
+ values: Map,
+ noinline block: SelectOneCallback = {}
+ ): R? =
select(sql, object: TypeReference() {}, values, block)
- override fun > select(sql: String, typeReference: TypeReference>, values: List, block: (QueryResult, List) -> Unit): List {
+ override fun > select(
+ sql: String,
+ typeReference: TypeReference>,
+ values: List,
+ block: (QueryResult, List) -> Unit
+ ): List {
val result = exec(sql, compileArgs(values))
val json = result.rows[0].getString(0)
return if (json === null) {
@@ -74,7 +97,11 @@ class Connection(
}
}
- inline fun > select(sql: String, values: List = emptyList(), noinline block: SelectCallback = {}): List =
+ inline fun > select(
+ sql: String,
+ values: List = emptyList(),
+ noinline block: SelectCallback = {}
+ ): List =
select(sql, object: TypeReference>() {}, values, block)
override fun > select(
@@ -132,7 +159,11 @@ class Connection(
}
}
- inline fun > select(sql: String, values: Map, noinline block: SelectCallback = {}): List =
+ inline fun > select(
+ sql: String,
+ values: Map,
+ noinline block: SelectCallback = {}
+ ): List =
select(sql, object: TypeReference>() {}, values, block)
override fun exec(sql: String, values: List): QueryResult {
@@ -184,7 +215,7 @@ class Connection(
data class ParametersQuery(val sql: String, val parameters: List)
private fun stopwatchQuery(sql: String, values: List = emptyList(), callback: () -> T): T {
- val sqlForLog = "\n"+sql.prependIndent()
+ val sqlForLog = "\n${sql.prependIndent()}"
try {
val start = System.currentTimeMillis()
val result = callback()
diff --git a/src/main/kotlin/fr/postgresjson/connexion/EmbedExecutable.kt b/src/main/kotlin/fr/postgresjson/connexion/EmbedExecutable.kt
index 773c72e..7818fdf 100644
--- a/src/main/kotlin/fr/postgresjson/connexion/EmbedExecutable.kt
+++ b/src/main/kotlin/fr/postgresjson/connexion/EmbedExecutable.kt
@@ -8,13 +8,43 @@ interface EmbedExecutable {
val connection: Connection
override fun toString(): String
- fun > select(typeReference: TypeReference, values: List = emptyList(), block: SelectOneCallback = {}): R?
- fun > select(typeReference: TypeReference, values: Map, block: SelectOneCallback = {}): R?
+ /* Select One */
+ /**
+ * Select One entity with list of parameters
+ */
+ fun > select(
+ typeReference: TypeReference,
+ values: List = emptyList(),
+ block: SelectOneCallback = {}
+ ): R?
- fun > select(typeReference: TypeReference>, values: List = emptyList(), block: SelectCallback = {}): List
- fun > select(typeReference: TypeReference>, values: Map, block: SelectCallback = {}): List
+ fun > select(
+ typeReference: TypeReference,
+ values: Map,
+ block: SelectOneCallback = {}
+ ): R?
- fun > select(page: Int, limit: Int, typeReference: TypeReference>, values: Map, block: SelectPaginatedCallback = {}): Paginated
+ /* Select Miltiples */
+ fun > select(
+ typeReference: TypeReference>,
+ values: List = emptyList(),
+ block: SelectCallback = {}
+ ): List
+
+ fun > select(
+ typeReference: TypeReference>,
+ values: Map,
+ block: SelectCallback = {}
+ ): List
+
+ /* Select Paginated */
+ fun > select(
+ page: Int,
+ limit: Int,
+ typeReference: TypeReference>,
+ values: Map,
+ block: SelectPaginatedCallback = {}
+ ): Paginated
fun exec(values: List = emptyList()): QueryResult
fun exec(values: Map): QueryResult
diff --git a/src/main/kotlin/fr/postgresjson/connexion/Executable.kt b/src/main/kotlin/fr/postgresjson/connexion/Executable.kt
index 7cb599b..08daedd 100644
--- a/src/main/kotlin/fr/postgresjson/connexion/Executable.kt
+++ b/src/main/kotlin/fr/postgresjson/connexion/Executable.kt
@@ -5,11 +5,49 @@ import com.github.jasync.sql.db.QueryResult
import fr.postgresjson.entity.EntityI
interface Executable {
- fun > select(sql: String, typeReference: TypeReference, values: List = emptyList(), block: SelectOneCallback = {}): R?
- fun > select(sql: String, typeReference: TypeReference, values: Map, block: SelectOneCallback = {}): R?
- fun > select(sql: String, typeReference: TypeReference>, values: List = emptyList(), block: SelectCallback = {}): List
- fun > select(sql: String, typeReference: TypeReference>, values: Map, block: SelectCallback = {}): List
- fun > select(sql: String, page: Int, limit: Int, typeReference: TypeReference>, values: Map, block: SelectPaginatedCallback = {}): Paginated
+ /* Select One */
+
+ fun > select(
+ sql: String,
+ typeReference: TypeReference,
+ values: List = emptyList(),
+ block: SelectOneCallback = {}
+ ): R?
+
+ fun > select(
+ sql: String,
+ typeReference: TypeReference,
+ values: Map,
+ block: SelectOneCallback = {}
+ ): R?
+
+ /* Select Miltiples */
+
+ fun > select(
+ sql: String,
+ typeReference: TypeReference>,
+ values: List = emptyList(),
+ block: SelectCallback = {}
+ ): List
+
+ fun > select(
+ sql: String,
+ typeReference: TypeReference>,
+ values: Map,
+ block: SelectCallback = {}
+ ): List
+
+ /* Select Paginated */
+
+ fun > select(
+ sql: String,
+ page: Int,
+ limit: Int,
+ typeReference: TypeReference>,
+ values: Map,
+ block: SelectPaginatedCallback = {}
+ ): Paginated
+
fun exec(sql: String, values: List = emptyList()): QueryResult
fun exec(sql: String, values: Map): QueryResult
fun sendQuery(sql: String): QueryResult
diff --git a/src/main/kotlin/fr/postgresjson/connexion/Function.kt b/src/main/kotlin/fr/postgresjson/connexion/Function.kt
index ac2c095..69877e9 100644
--- a/src/main/kotlin/fr/postgresjson/connexion/Function.kt
+++ b/src/main/kotlin/fr/postgresjson/connexion/Function.kt
@@ -10,59 +10,102 @@ class Function(val definition: Function, override val connection: Connection): E
return definition.name
}
+ /* Select One */
+
/**
* Select One entity with list of parameters
*/
- override fun > select(typeReference: TypeReference, values: List, block: (QueryResult, R?) -> Unit): R? {
+ override fun > select(
+ typeReference: TypeReference,
+ values: List,
+ block: (QueryResult, R?) -> Unit
+ ): R? {
val args = compileArgs(values)
val sql = "SELECT * FROM ${definition.name} ($args)"
return connection.select(sql, typeReference, values, block)
}
- inline fun > selectOne(values: List = emptyList(), noinline block: SelectOneCallback = {}): R? =
+ inline fun > selectOne(
+ values: List = emptyList(),
+ noinline block: SelectOneCallback = {}
+ ): R? =
select(object: TypeReference() {}, values, block)
/**
* Select One entity with named parameters
*/
- override fun > select(typeReference: TypeReference, values: Map, block: (QueryResult, R?) -> Unit): R? {
+ override fun > select(
+ typeReference: TypeReference,
+ values: Map,
+ block: (QueryResult, R?) -> Unit
+ ): R? {
val args = compileArgs(values)
val sql = "SELECT * FROM ${definition.name} ($args)"
return connection.select(sql, typeReference, values, block)
}
- inline fun > selectOne(values: Map, noinline block: SelectOneCallback = {}): R? =
+ inline fun > selectOne(
+ values: Map,
+ noinline block: SelectOneCallback = {}
+ ): R? =
select(object: TypeReference() {}, values, block)
+ /* Select Multiples */
+
/**
* Select list of entities with list of parameters
*/
- override fun > select(typeReference: TypeReference>, values: List, block: (QueryResult, List) -> Unit): List {
+ override fun > select(
+ typeReference: TypeReference>,
+ values: List,
+ block: (QueryResult, List) -> Unit
+ ): List {
val args = compileArgs(values)
val sql = "SELECT * FROM ${definition.name} ($args)"
return connection.select(sql, typeReference, values, block)
}
- inline fun > select(values: List = emptyList(), noinline block: SelectCallback = {}): List =
+ inline fun > select(
+ values: List = emptyList(),
+ noinline block: SelectCallback = {}
+ ): List =
select(object: TypeReference>() {}, values, block)
/**
* Select list of entities with named parameters
*/
- override fun > select(typeReference: TypeReference>, values: Map, block: (QueryResult, List) -> Unit): List {
+ override fun > select(
+ typeReference: TypeReference>,
+ values: Map,
+ block: (QueryResult, List) -> Unit
+ ): List {
val args = compileArgs(values)
val sql = "SELECT * FROM ${definition.name} ($args)"
return connection.select(sql, typeReference, values, block)
}
- inline fun > select(values: Map, noinline block: SelectCallback = {}): List =
+ inline fun > select(
+ values: Map,
+ noinline block: SelectCallback = {}
+ ): List =
select(object: TypeReference>() {}, values, block)
- override fun > select(page: Int, limit: Int, typeReference: TypeReference>, values: Map, block: (QueryResult, Paginated) -> Unit): Paginated {
+ /* Select Paginated */
+
+ /**
+ * Select Multiple with pagination
+ */
+ override fun > select(
+ page: Int,
+ limit: Int,
+ typeReference: TypeReference>,
+ values: Map,
+ block: (QueryResult, Paginated) -> Unit
+ ): Paginated {
val offset = (page - 1) * limit
val newValues = values
.plus("offset" to offset)
@@ -73,9 +116,17 @@ class Function(val definition: Function, override val connection: Connection): E
return connection.select(sql, page, limit, typeReference, values, block)
}
- inline fun > select(page: Int, limit: Int, values: Map = emptyMap(), noinline block: SelectPaginatedCallback = {}): Paginated =
+
+ inline fun > select(
+ page: Int,
+ limit: Int,
+ values: Map = emptyMap(),
+ noinline block: SelectPaginatedCallback = {}
+ ): Paginated =
select(page, limit, object: TypeReference>() {}, values, block)
+ /* Execute function without traitements */
+
override fun exec(values: List): QueryResult {
val args = compileArgs(values)
val sql = "SELECT * FROM ${definition.name} ($args)"
diff --git a/src/main/kotlin/fr/postgresjson/connexion/Query.kt b/src/main/kotlin/fr/postgresjson/connexion/Query.kt
index 5a35ad4..692c802 100644
--- a/src/main/kotlin/fr/postgresjson/connexion/Query.kt
+++ b/src/main/kotlin/fr/postgresjson/connexion/Query.kt
@@ -10,40 +10,88 @@ class Query(private val sql: String, override val connection: Connection): Embed
return sql
}
- override fun > select(typeReference: TypeReference, values: List, block: (QueryResult, R?) -> Unit): R? {
+ /* Select One */
+
+ override fun > select(
+ typeReference: TypeReference,
+ values: List,
+ block: (QueryResult, R?) -> Unit
+ ): R? {
return connection.select(this.toString(), typeReference, values, block)
}
- inline fun > selectOne(values: List = emptyList(), noinline block: SelectOneCallback = {}): R? =
+ inline fun > selectOne(
+ values: List = emptyList(),
+ noinline block: SelectOneCallback = {}
+ ): R? =
select(object: TypeReference() {}, values, block)
- override fun > select(typeReference: TypeReference