package fr.postgresjson.connexion import com.fasterxml.jackson.core.type.TypeReference import com.github.jasync.sql.db.QueryResult import fr.postgresjson.entity.EntityI class Query(override val name: String, private val sql: String, override val connection: Connection) : EmbedExecutable { override fun toString(): String { return sql } /* Select One */ /** * Select One [EntityI] with [List] of parameters */ override fun selectOne( typeReference: TypeReference, values: List, block: SelectOneCallback ): R? = connection.selectOne(sql, typeReference, values, block) /** * Select One [EntityI] with named parameters */ override fun selectOne( typeReference: TypeReference, values: Map, block: SelectOneCallback ): R? = connection.selectOne(sql, typeReference, values, block) /* Select Multiples */ /** * Select multiple [EntityI] with [List] of parameters */ override fun select( typeReference: TypeReference>, values: List, block: SelectCallback ): List = connection.select(sql, typeReference, values, block) /** * Select multiple [EntityI] with [Map] of parameters */ override fun select( typeReference: TypeReference>, values: Map, block: SelectCallback ): List = connection.select(sql, typeReference, values, block) /* Select Paginated */ /** * Select Multiple [EntityI] with pagination */ override fun select( page: Int, limit: Int, typeReference: TypeReference>, values: Map, block: (QueryResult, Paginated) -> Unit ): Paginated = connection.select(sql, page, limit, typeReference, values, block) /* Execute function without treatments */ override fun exec(values: List): QueryResult = connection.exec(sql, values) override fun exec(values: Map): QueryResult = connection.exec(sql, values) /** * Warning: this method not use prepared statement */ fun sendQuery(values: List): QueryResult = connection.sendQuery(sql, values) /** * Warning: this method not use prepared statement */ fun sendQuery(values: Map): QueryResult = connection.sendQuery(sql, values) /** * Warning: this method not use prepared statement */ fun sendQuery(vararg values: Pair): QueryResult = sendQuery(values.toMap()) }