All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.lenses.jdbc4.statements.LStatement.kt Maven / Gradle / Ivy

There is a newer version: 3.0.2
Show newest version
package io.lenses.jdbc4.statements

import arrow.core.getOrHandle
import io.lenses.jdbc4.client.LensesClient
import io.lenses.jdbc4.resultset.emptyResultSet
import kotlinx.coroutines.runBlocking
import java.sql.Connection
import java.sql.ResultSet
import java.sql.SQLException

open class LStatement(private val conn: Connection,
                      private val client: LensesClient) : DefaultStatement,
    AutoCloseable,
    IWrapperStatement,
    ReadOnlyStatement,
    OfflineStatement {

  // the last resultset retrieved by this statement
  private var rs: ResultSet = emptyResultSet

  /**
   * Executes the given SQL statement, which returns a single
   * [ResultSet] object.
   *
   * @param sql an SQL statement to be sent to the database, typically a
   *        static SQL SELECT statement
   * @return a [ResultSet] object that contains the data produced
   *         by the given query; never null
   */
  override fun executeQuery(sql: String): ResultSet = runBlocking {
    rs = client.execute(sql)
        .getOrHandle { throw SQLException("Could not execute query: $it", it.cause) }
    rs
  }

  override fun executeUpdate(sql: String): Int = runBlocking {
    executeQuery(sql)
    0
  }

  /**
   *  @return true if the first result is a [ResultSet]
   *         object; false if it is an update count or there are
   *         no results
   */
  override fun execute(sql: String): Boolean {
    executeQuery(sql)
    return true
  }

  override fun getConnection(): Connection = conn
  override fun getResultSet(): ResultSet = rs

  override fun getQueryTimeout(): Int = 0 // client.connectionRequestTimeout()
  override fun setQueryTimeout(seconds: Int) = throw UnsupportedOperationException()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy