package fr.postgresjson.connexion import com.fasterxml.jackson.core.type.TypeReference import com.github.jasync.sql.db.QueryResult import fr.postgresjson.entity.EntityI interface Executable { /* Update */ /** * Update [EntityI] with one entity as argument */ fun update( sql: String, typeReference: TypeReference, value: R, block: SelectOneCallback = {} ): R? = selectOne(sql, typeReference, listOf(value), block) /* Select One */ /** * Select One [EntityI] with [List] of parameters */ fun selectOne( sql: String, typeReference: TypeReference, values: List, block: SelectOneCallback = {} ): R? /** * Select One [EntityI] with [Map] of parameters */ fun selectOne( sql: String, typeReference: TypeReference, values: Map, block: SelectOneCallback = {} ): R? /** * Select One [EntityI] with multiple [Pair] of parameters */ fun selectOne( sql: String, typeReference: TypeReference, vararg values: Pair, block: SelectOneCallback = {} ): R? = selectOne(sql, typeReference, values.toMap(), block) /* Select Multiples */ /** * Select Multiple [EntityI] with [List] of parameters */ fun select( sql: String, typeReference: TypeReference>, values: List = emptyList(), block: SelectCallback = {} ): List /** * Select Multiple [EntityI] with [Map] of parameters */ fun select( sql: String, typeReference: TypeReference>, values: Map, block: SelectCallback = {} ): List /** * Select Multiple [EntityI] with multiple [Pair] of parameters */ fun select( sql: String, typeReference: TypeReference>, vararg values: Pair, block: SelectCallback = {} ): List = select(sql, typeReference, values.toMap(), block) /* Select Paginated */ /** * Select Paginated [EntityI] with [Map] of parameters */ fun select( sql: String, page: Int, limit: Int, typeReference: TypeReference>, values: Map, block: SelectPaginatedCallback = {} ): Paginated /** * Select Paginated [EntityI] with multiple [Pair] of parameters */ fun select( sql: String, page: Int, limit: Int, typeReference: TypeReference>, vararg values: Pair, block: SelectPaginatedCallback = {} ): Paginated = select(sql, page, limit, typeReference, values.toMap(), block) fun exec(sql: String, value: R): QueryResult = exec(sql, listOf(value)) fun exec(sql: String, values: List = emptyList()): QueryResult fun exec(sql: String, values: Map): QueryResult fun exec(sql: String, vararg values: Pair): QueryResult = exec(sql, values.toMap()) fun perform(sql: String, value: R) { perform(sql, listOf(value)) } fun perform(sql: String, values: List) { exec(sql, values) } fun perform(sql: String, values: Map) { exec(sql, values) } fun perform(sql: String, vararg values: Pair) = perform(sql, values.toMap()) fun sendQuery(sql: String, value: R): Int = sendQuery(sql, listOf(value)) fun sendQuery(sql: String, values: List = emptyList()): Int fun sendQuery(sql: String, values: Map): Int fun sendQuery(sql: String, vararg values: Pair): Int = sendQuery(sql, values.toMap()) }