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

doobie.free.resultset.scala Maven / Gradle / Ivy

The newest version!
package doobie.free

import cats.{ Monad, ~> }
import cats.free.{ Free => FF }
import scala.util.{ Either => \/ }
import fs2.util.{ Catchable, Suspendable }

import java.io.InputStream
import java.io.Reader
import java.lang.Class
import java.lang.Object
import java.lang.String
import java.math.BigDecimal
import java.net.URL
import java.sql.Blob
import java.sql.CallableStatement
import java.sql.Clob
import java.sql.Connection
import java.sql.DatabaseMetaData
import java.sql.Date
import java.sql.Driver
import java.sql.NClob
import java.sql.PreparedStatement
import java.sql.Ref
import java.sql.ResultSet
import java.sql.ResultSetMetaData
import java.sql.RowId
import java.sql.SQLData
import java.sql.SQLInput
import java.sql.SQLOutput
import java.sql.SQLType
import java.sql.SQLWarning
import java.sql.SQLXML
import java.sql.Statement
import java.sql.Time
import java.sql.Timestamp
import java.sql.{ Array => SqlArray }
import java.util.Calendar
import java.util.Map

import nclob.NClobIO
import blob.BlobIO
import clob.ClobIO
import databasemetadata.DatabaseMetaDataIO
import driver.DriverIO
import ref.RefIO
import sqldata.SQLDataIO
import sqlinput.SQLInputIO
import sqloutput.SQLOutputIO
import connection.ConnectionIO
import statement.StatementIO
import preparedstatement.PreparedStatementIO
import callablestatement.CallableStatementIO
import resultset.ResultSetIO

object resultset {

  // Algebra of operations for ResultSet. Each accepts a visitor as an alternatie to pattern-matching.
  sealed trait ResultSetOp[A] {
    def visit[F[_]](v: ResultSetOp.Visitor[F]): F[A]
  }

  // Free monad over ResultSetOp.
  type ResultSetIO[A] = FF[ResultSetOp, A]

  // Module of instances and constructors of ResultSetOp.
  object ResultSetOp {

    // Given a ResultSet we can embed a ResultSetIO program in any algebra that understands embedding.
    implicit val ResultSetOpEmbeddable: Embeddable[ResultSetOp, ResultSet] =
      new Embeddable[ResultSetOp, ResultSet] {
        def embed[A](j: ResultSet, fa: FF[ResultSetOp, A]) = Embedded.ResultSet(j, fa)
      }

    // Interface for a natural tansformation ResultSetOp ~> F encoded via the visitor pattern.
    // This approach is much more efficient than pattern-matching for large algebras.
    trait Visitor[F[_]] extends (ResultSetOp ~> F) {
      final def apply[A](fa: ResultSetOp[A]): F[A] = fa.visit(this)

      // Common
      def raw[A](f: ResultSet => A): F[A]
      def embed[A](e: Embedded[A]): F[A]
      def delay[A](a: () => A): F[A]
      def attempt[A](fa: ResultSetIO[A]): F[Throwable \/ A]

      // ResultSet
      def absolute(a: Int): F[Boolean]
      def afterLast: F[Unit]
      def beforeFirst: F[Unit]
      def cancelRowUpdates: F[Unit]
      def clearWarnings: F[Unit]
      def close: F[Unit]
      def deleteRow: F[Unit]
      def findColumn(a: String): F[Int]
      def first: F[Boolean]
      def getArray(a: Int): F[SqlArray]
      def getArray(a: String): F[SqlArray]
      def getAsciiStream(a: Int): F[InputStream]
      def getAsciiStream(a: String): F[InputStream]
      def getBigDecimal(a: Int): F[BigDecimal]
      def getBigDecimal(a: Int, b: Int): F[BigDecimal]
      def getBigDecimal(a: String): F[BigDecimal]
      def getBigDecimal(a: String, b: Int): F[BigDecimal]
      def getBinaryStream(a: Int): F[InputStream]
      def getBinaryStream(a: String): F[InputStream]
      def getBlob(a: Int): F[Blob]
      def getBlob(a: String): F[Blob]
      def getBoolean(a: Int): F[Boolean]
      def getBoolean(a: String): F[Boolean]
      def getByte(a: Int): F[Byte]
      def getByte(a: String): F[Byte]
      def getBytes(a: Int): F[Array[Byte]]
      def getBytes(a: String): F[Array[Byte]]
      def getCharacterStream(a: Int): F[Reader]
      def getCharacterStream(a: String): F[Reader]
      def getClob(a: Int): F[Clob]
      def getClob(a: String): F[Clob]
      def getConcurrency: F[Int]
      def getCursorName: F[String]
      def getDate(a: Int): F[Date]
      def getDate(a: Int, b: Calendar): F[Date]
      def getDate(a: String): F[Date]
      def getDate(a: String, b: Calendar): F[Date]
      def getDouble(a: Int): F[Double]
      def getDouble(a: String): F[Double]
      def getFetchDirection: F[Int]
      def getFetchSize: F[Int]
      def getFloat(a: Int): F[Float]
      def getFloat(a: String): F[Float]
      def getHoldability: F[Int]
      def getInt(a: Int): F[Int]
      def getInt(a: String): F[Int]
      def getLong(a: Int): F[Long]
      def getLong(a: String): F[Long]
      def getMetaData: F[ResultSetMetaData]
      def getNCharacterStream(a: Int): F[Reader]
      def getNCharacterStream(a: String): F[Reader]
      def getNClob(a: Int): F[NClob]
      def getNClob(a: String): F[NClob]
      def getNString(a: Int): F[String]
      def getNString(a: String): F[String]
      def getObject(a: Int): F[AnyRef]
      def getObject[T](a: Int, b: Class[T]): F[T]
      def getObject(a: Int, b: Map[String, Class[_]]): F[AnyRef]
      def getObject(a: String): F[AnyRef]
      def getObject[T](a: String, b: Class[T]): F[T]
      def getObject(a: String, b: Map[String, Class[_]]): F[AnyRef]
      def getRef(a: Int): F[Ref]
      def getRef(a: String): F[Ref]
      def getRow: F[Int]
      def getRowId(a: Int): F[RowId]
      def getRowId(a: String): F[RowId]
      def getSQLXML(a: Int): F[SQLXML]
      def getSQLXML(a: String): F[SQLXML]
      def getShort(a: Int): F[Short]
      def getShort(a: String): F[Short]
      def getStatement: F[Statement]
      def getString(a: Int): F[String]
      def getString(a: String): F[String]
      def getTime(a: Int): F[Time]
      def getTime(a: Int, b: Calendar): F[Time]
      def getTime(a: String): F[Time]
      def getTime(a: String, b: Calendar): F[Time]
      def getTimestamp(a: Int): F[Timestamp]
      def getTimestamp(a: Int, b: Calendar): F[Timestamp]
      def getTimestamp(a: String): F[Timestamp]
      def getTimestamp(a: String, b: Calendar): F[Timestamp]
      def getType: F[Int]
      def getURL(a: Int): F[URL]
      def getURL(a: String): F[URL]
      def getUnicodeStream(a: Int): F[InputStream]
      def getUnicodeStream(a: String): F[InputStream]
      def getWarnings: F[SQLWarning]
      def insertRow: F[Unit]
      def isAfterLast: F[Boolean]
      def isBeforeFirst: F[Boolean]
      def isClosed: F[Boolean]
      def isFirst: F[Boolean]
      def isLast: F[Boolean]
      def isWrapperFor(a: Class[_]): F[Boolean]
      def last: F[Boolean]
      def moveToCurrentRow: F[Unit]
      def moveToInsertRow: F[Unit]
      def next: F[Boolean]
      def previous: F[Boolean]
      def refreshRow: F[Unit]
      def relative(a: Int): F[Boolean]
      def rowDeleted: F[Boolean]
      def rowInserted: F[Boolean]
      def rowUpdated: F[Boolean]
      def setFetchDirection(a: Int): F[Unit]
      def setFetchSize(a: Int): F[Unit]
      def unwrap[T](a: Class[T]): F[T]
      def updateArray(a: Int, b: SqlArray): F[Unit]
      def updateArray(a: String, b: SqlArray): F[Unit]
      def updateAsciiStream(a: Int, b: InputStream): F[Unit]
      def updateAsciiStream(a: Int, b: InputStream, c: Int): F[Unit]
      def updateAsciiStream(a: Int, b: InputStream, c: Long): F[Unit]
      def updateAsciiStream(a: String, b: InputStream): F[Unit]
      def updateAsciiStream(a: String, b: InputStream, c: Int): F[Unit]
      def updateAsciiStream(a: String, b: InputStream, c: Long): F[Unit]
      def updateBigDecimal(a: Int, b: BigDecimal): F[Unit]
      def updateBigDecimal(a: String, b: BigDecimal): F[Unit]
      def updateBinaryStream(a: Int, b: InputStream): F[Unit]
      def updateBinaryStream(a: Int, b: InputStream, c: Int): F[Unit]
      def updateBinaryStream(a: Int, b: InputStream, c: Long): F[Unit]
      def updateBinaryStream(a: String, b: InputStream): F[Unit]
      def updateBinaryStream(a: String, b: InputStream, c: Int): F[Unit]
      def updateBinaryStream(a: String, b: InputStream, c: Long): F[Unit]
      def updateBlob(a: Int, b: Blob): F[Unit]
      def updateBlob(a: Int, b: InputStream): F[Unit]
      def updateBlob(a: Int, b: InputStream, c: Long): F[Unit]
      def updateBlob(a: String, b: Blob): F[Unit]
      def updateBlob(a: String, b: InputStream): F[Unit]
      def updateBlob(a: String, b: InputStream, c: Long): F[Unit]
      def updateBoolean(a: Int, b: Boolean): F[Unit]
      def updateBoolean(a: String, b: Boolean): F[Unit]
      def updateByte(a: Int, b: Byte): F[Unit]
      def updateByte(a: String, b: Byte): F[Unit]
      def updateBytes(a: Int, b: Array[Byte]): F[Unit]
      def updateBytes(a: String, b: Array[Byte]): F[Unit]
      def updateCharacterStream(a: Int, b: Reader): F[Unit]
      def updateCharacterStream(a: Int, b: Reader, c: Int): F[Unit]
      def updateCharacterStream(a: Int, b: Reader, c: Long): F[Unit]
      def updateCharacterStream(a: String, b: Reader): F[Unit]
      def updateCharacterStream(a: String, b: Reader, c: Int): F[Unit]
      def updateCharacterStream(a: String, b: Reader, c: Long): F[Unit]
      def updateClob(a: Int, b: Clob): F[Unit]
      def updateClob(a: Int, b: Reader): F[Unit]
      def updateClob(a: Int, b: Reader, c: Long): F[Unit]
      def updateClob(a: String, b: Clob): F[Unit]
      def updateClob(a: String, b: Reader): F[Unit]
      def updateClob(a: String, b: Reader, c: Long): F[Unit]
      def updateDate(a: Int, b: Date): F[Unit]
      def updateDate(a: String, b: Date): F[Unit]
      def updateDouble(a: Int, b: Double): F[Unit]
      def updateDouble(a: String, b: Double): F[Unit]
      def updateFloat(a: Int, b: Float): F[Unit]
      def updateFloat(a: String, b: Float): F[Unit]
      def updateInt(a: Int, b: Int): F[Unit]
      def updateInt(a: String, b: Int): F[Unit]
      def updateLong(a: Int, b: Long): F[Unit]
      def updateLong(a: String, b: Long): F[Unit]
      def updateNCharacterStream(a: Int, b: Reader): F[Unit]
      def updateNCharacterStream(a: Int, b: Reader, c: Long): F[Unit]
      def updateNCharacterStream(a: String, b: Reader): F[Unit]
      def updateNCharacterStream(a: String, b: Reader, c: Long): F[Unit]
      def updateNClob(a: Int, b: NClob): F[Unit]
      def updateNClob(a: Int, b: Reader): F[Unit]
      def updateNClob(a: Int, b: Reader, c: Long): F[Unit]
      def updateNClob(a: String, b: NClob): F[Unit]
      def updateNClob(a: String, b: Reader): F[Unit]
      def updateNClob(a: String, b: Reader, c: Long): F[Unit]
      def updateNString(a: Int, b: String): F[Unit]
      def updateNString(a: String, b: String): F[Unit]
      def updateNull(a: Int): F[Unit]
      def updateNull(a: String): F[Unit]
      def updateObject(a: Int, b: AnyRef): F[Unit]
      def updateObject(a: Int, b: AnyRef, c: Int): F[Unit]
      def updateObject(a: Int, b: AnyRef, c: SQLType): F[Unit]
      def updateObject(a: Int, b: AnyRef, c: SQLType, d: Int): F[Unit]
      def updateObject(a: String, b: AnyRef): F[Unit]
      def updateObject(a: String, b: AnyRef, c: Int): F[Unit]
      def updateObject(a: String, b: AnyRef, c: SQLType): F[Unit]
      def updateObject(a: String, b: AnyRef, c: SQLType, d: Int): F[Unit]
      def updateRef(a: Int, b: Ref): F[Unit]
      def updateRef(a: String, b: Ref): F[Unit]
      def updateRow: F[Unit]
      def updateRowId(a: Int, b: RowId): F[Unit]
      def updateRowId(a: String, b: RowId): F[Unit]
      def updateSQLXML(a: Int, b: SQLXML): F[Unit]
      def updateSQLXML(a: String, b: SQLXML): F[Unit]
      def updateShort(a: Int, b: Short): F[Unit]
      def updateShort(a: String, b: Short): F[Unit]
      def updateString(a: Int, b: String): F[Unit]
      def updateString(a: String, b: String): F[Unit]
      def updateTime(a: Int, b: Time): F[Unit]
      def updateTime(a: String, b: Time): F[Unit]
      def updateTimestamp(a: Int, b: Timestamp): F[Unit]
      def updateTimestamp(a: String, b: Timestamp): F[Unit]
      def wasNull: F[Boolean]

    }

    // Common operations for all algebras.
    case class Raw[A](f: ResultSet => A) extends ResultSetOp[A] {
      def visit[F[_]](v: Visitor[F]) = v.raw(f)
    }
    case class Embed[A](e: Embedded[A]) extends ResultSetOp[A] {
      def visit[F[_]](v: Visitor[F]) = v.embed(e)
    }
    case class  Delay[A](a: () => A) extends ResultSetOp[A] {
      def visit[F[_]](v: Visitor[F]) = v.delay(a)
    }
    case class  Attempt[A](fa: ResultSetIO[A]) extends ResultSetOp[Throwable \/ A] {
      def visit[F[_]](v: Visitor[F]) = v.attempt(fa)
    }

    // ResultSet-specific operations.
    case class  Absolute(a: Int) extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.absolute(a)
    }
    case object AfterLast extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.afterLast
    }
    case object BeforeFirst extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.beforeFirst
    }
    case object CancelRowUpdates extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.cancelRowUpdates
    }
    case object ClearWarnings extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.clearWarnings
    }
    case object Close extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.close
    }
    case object DeleteRow extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.deleteRow
    }
    case class  FindColumn(a: String) extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.findColumn(a)
    }
    case object First extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.first
    }
    case class  GetArray(a: Int) extends ResultSetOp[SqlArray] {
      def visit[F[_]](v: Visitor[F]) = v.getArray(a)
    }
    case class  GetArray1(a: String) extends ResultSetOp[SqlArray] {
      def visit[F[_]](v: Visitor[F]) = v.getArray(a)
    }
    case class  GetAsciiStream(a: Int) extends ResultSetOp[InputStream] {
      def visit[F[_]](v: Visitor[F]) = v.getAsciiStream(a)
    }
    case class  GetAsciiStream1(a: String) extends ResultSetOp[InputStream] {
      def visit[F[_]](v: Visitor[F]) = v.getAsciiStream(a)
    }
    case class  GetBigDecimal(a: Int) extends ResultSetOp[BigDecimal] {
      def visit[F[_]](v: Visitor[F]) = v.getBigDecimal(a)
    }
    case class  GetBigDecimal1(a: Int, b: Int) extends ResultSetOp[BigDecimal] {
      def visit[F[_]](v: Visitor[F]) = v.getBigDecimal(a, b)
    }
    case class  GetBigDecimal2(a: String) extends ResultSetOp[BigDecimal] {
      def visit[F[_]](v: Visitor[F]) = v.getBigDecimal(a)
    }
    case class  GetBigDecimal3(a: String, b: Int) extends ResultSetOp[BigDecimal] {
      def visit[F[_]](v: Visitor[F]) = v.getBigDecimal(a, b)
    }
    case class  GetBinaryStream(a: Int) extends ResultSetOp[InputStream] {
      def visit[F[_]](v: Visitor[F]) = v.getBinaryStream(a)
    }
    case class  GetBinaryStream1(a: String) extends ResultSetOp[InputStream] {
      def visit[F[_]](v: Visitor[F]) = v.getBinaryStream(a)
    }
    case class  GetBlob(a: Int) extends ResultSetOp[Blob] {
      def visit[F[_]](v: Visitor[F]) = v.getBlob(a)
    }
    case class  GetBlob1(a: String) extends ResultSetOp[Blob] {
      def visit[F[_]](v: Visitor[F]) = v.getBlob(a)
    }
    case class  GetBoolean(a: Int) extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.getBoolean(a)
    }
    case class  GetBoolean1(a: String) extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.getBoolean(a)
    }
    case class  GetByte(a: Int) extends ResultSetOp[Byte] {
      def visit[F[_]](v: Visitor[F]) = v.getByte(a)
    }
    case class  GetByte1(a: String) extends ResultSetOp[Byte] {
      def visit[F[_]](v: Visitor[F]) = v.getByte(a)
    }
    case class  GetBytes(a: Int) extends ResultSetOp[Array[Byte]] {
      def visit[F[_]](v: Visitor[F]) = v.getBytes(a)
    }
    case class  GetBytes1(a: String) extends ResultSetOp[Array[Byte]] {
      def visit[F[_]](v: Visitor[F]) = v.getBytes(a)
    }
    case class  GetCharacterStream(a: Int) extends ResultSetOp[Reader] {
      def visit[F[_]](v: Visitor[F]) = v.getCharacterStream(a)
    }
    case class  GetCharacterStream1(a: String) extends ResultSetOp[Reader] {
      def visit[F[_]](v: Visitor[F]) = v.getCharacterStream(a)
    }
    case class  GetClob(a: Int) extends ResultSetOp[Clob] {
      def visit[F[_]](v: Visitor[F]) = v.getClob(a)
    }
    case class  GetClob1(a: String) extends ResultSetOp[Clob] {
      def visit[F[_]](v: Visitor[F]) = v.getClob(a)
    }
    case object GetConcurrency extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getConcurrency
    }
    case object GetCursorName extends ResultSetOp[String] {
      def visit[F[_]](v: Visitor[F]) = v.getCursorName
    }
    case class  GetDate(a: Int) extends ResultSetOp[Date] {
      def visit[F[_]](v: Visitor[F]) = v.getDate(a)
    }
    case class  GetDate1(a: Int, b: Calendar) extends ResultSetOp[Date] {
      def visit[F[_]](v: Visitor[F]) = v.getDate(a, b)
    }
    case class  GetDate2(a: String) extends ResultSetOp[Date] {
      def visit[F[_]](v: Visitor[F]) = v.getDate(a)
    }
    case class  GetDate3(a: String, b: Calendar) extends ResultSetOp[Date] {
      def visit[F[_]](v: Visitor[F]) = v.getDate(a, b)
    }
    case class  GetDouble(a: Int) extends ResultSetOp[Double] {
      def visit[F[_]](v: Visitor[F]) = v.getDouble(a)
    }
    case class  GetDouble1(a: String) extends ResultSetOp[Double] {
      def visit[F[_]](v: Visitor[F]) = v.getDouble(a)
    }
    case object GetFetchDirection extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getFetchDirection
    }
    case object GetFetchSize extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getFetchSize
    }
    case class  GetFloat(a: Int) extends ResultSetOp[Float] {
      def visit[F[_]](v: Visitor[F]) = v.getFloat(a)
    }
    case class  GetFloat1(a: String) extends ResultSetOp[Float] {
      def visit[F[_]](v: Visitor[F]) = v.getFloat(a)
    }
    case object GetHoldability extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getHoldability
    }
    case class  GetInt(a: Int) extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getInt(a)
    }
    case class  GetInt1(a: String) extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getInt(a)
    }
    case class  GetLong(a: Int) extends ResultSetOp[Long] {
      def visit[F[_]](v: Visitor[F]) = v.getLong(a)
    }
    case class  GetLong1(a: String) extends ResultSetOp[Long] {
      def visit[F[_]](v: Visitor[F]) = v.getLong(a)
    }
    case object GetMetaData extends ResultSetOp[ResultSetMetaData] {
      def visit[F[_]](v: Visitor[F]) = v.getMetaData
    }
    case class  GetNCharacterStream(a: Int) extends ResultSetOp[Reader] {
      def visit[F[_]](v: Visitor[F]) = v.getNCharacterStream(a)
    }
    case class  GetNCharacterStream1(a: String) extends ResultSetOp[Reader] {
      def visit[F[_]](v: Visitor[F]) = v.getNCharacterStream(a)
    }
    case class  GetNClob(a: Int) extends ResultSetOp[NClob] {
      def visit[F[_]](v: Visitor[F]) = v.getNClob(a)
    }
    case class  GetNClob1(a: String) extends ResultSetOp[NClob] {
      def visit[F[_]](v: Visitor[F]) = v.getNClob(a)
    }
    case class  GetNString(a: Int) extends ResultSetOp[String] {
      def visit[F[_]](v: Visitor[F]) = v.getNString(a)
    }
    case class  GetNString1(a: String) extends ResultSetOp[String] {
      def visit[F[_]](v: Visitor[F]) = v.getNString(a)
    }
    case class  GetObject(a: Int) extends ResultSetOp[AnyRef] {
      def visit[F[_]](v: Visitor[F]) = v.getObject(a)
    }
    case class  GetObject1[T](a: Int, b: Class[T]) extends ResultSetOp[T] {
      def visit[F[_]](v: Visitor[F]) = v.getObject(a, b)
    }
    case class  GetObject2(a: Int, b: Map[String, Class[_]]) extends ResultSetOp[AnyRef] {
      def visit[F[_]](v: Visitor[F]) = v.getObject(a, b)
    }
    case class  GetObject3(a: String) extends ResultSetOp[AnyRef] {
      def visit[F[_]](v: Visitor[F]) = v.getObject(a)
    }
    case class  GetObject4[T](a: String, b: Class[T]) extends ResultSetOp[T] {
      def visit[F[_]](v: Visitor[F]) = v.getObject(a, b)
    }
    case class  GetObject5(a: String, b: Map[String, Class[_]]) extends ResultSetOp[AnyRef] {
      def visit[F[_]](v: Visitor[F]) = v.getObject(a, b)
    }
    case class  GetRef(a: Int) extends ResultSetOp[Ref] {
      def visit[F[_]](v: Visitor[F]) = v.getRef(a)
    }
    case class  GetRef1(a: String) extends ResultSetOp[Ref] {
      def visit[F[_]](v: Visitor[F]) = v.getRef(a)
    }
    case object GetRow extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getRow
    }
    case class  GetRowId(a: Int) extends ResultSetOp[RowId] {
      def visit[F[_]](v: Visitor[F]) = v.getRowId(a)
    }
    case class  GetRowId1(a: String) extends ResultSetOp[RowId] {
      def visit[F[_]](v: Visitor[F]) = v.getRowId(a)
    }
    case class  GetSQLXML(a: Int) extends ResultSetOp[SQLXML] {
      def visit[F[_]](v: Visitor[F]) = v.getSQLXML(a)
    }
    case class  GetSQLXML1(a: String) extends ResultSetOp[SQLXML] {
      def visit[F[_]](v: Visitor[F]) = v.getSQLXML(a)
    }
    case class  GetShort(a: Int) extends ResultSetOp[Short] {
      def visit[F[_]](v: Visitor[F]) = v.getShort(a)
    }
    case class  GetShort1(a: String) extends ResultSetOp[Short] {
      def visit[F[_]](v: Visitor[F]) = v.getShort(a)
    }
    case object GetStatement extends ResultSetOp[Statement] {
      def visit[F[_]](v: Visitor[F]) = v.getStatement
    }
    case class  GetString(a: Int) extends ResultSetOp[String] {
      def visit[F[_]](v: Visitor[F]) = v.getString(a)
    }
    case class  GetString1(a: String) extends ResultSetOp[String] {
      def visit[F[_]](v: Visitor[F]) = v.getString(a)
    }
    case class  GetTime(a: Int) extends ResultSetOp[Time] {
      def visit[F[_]](v: Visitor[F]) = v.getTime(a)
    }
    case class  GetTime1(a: Int, b: Calendar) extends ResultSetOp[Time] {
      def visit[F[_]](v: Visitor[F]) = v.getTime(a, b)
    }
    case class  GetTime2(a: String) extends ResultSetOp[Time] {
      def visit[F[_]](v: Visitor[F]) = v.getTime(a)
    }
    case class  GetTime3(a: String, b: Calendar) extends ResultSetOp[Time] {
      def visit[F[_]](v: Visitor[F]) = v.getTime(a, b)
    }
    case class  GetTimestamp(a: Int) extends ResultSetOp[Timestamp] {
      def visit[F[_]](v: Visitor[F]) = v.getTimestamp(a)
    }
    case class  GetTimestamp1(a: Int, b: Calendar) extends ResultSetOp[Timestamp] {
      def visit[F[_]](v: Visitor[F]) = v.getTimestamp(a, b)
    }
    case class  GetTimestamp2(a: String) extends ResultSetOp[Timestamp] {
      def visit[F[_]](v: Visitor[F]) = v.getTimestamp(a)
    }
    case class  GetTimestamp3(a: String, b: Calendar) extends ResultSetOp[Timestamp] {
      def visit[F[_]](v: Visitor[F]) = v.getTimestamp(a, b)
    }
    case object GetType extends ResultSetOp[Int] {
      def visit[F[_]](v: Visitor[F]) = v.getType
    }
    case class  GetURL(a: Int) extends ResultSetOp[URL] {
      def visit[F[_]](v: Visitor[F]) = v.getURL(a)
    }
    case class  GetURL1(a: String) extends ResultSetOp[URL] {
      def visit[F[_]](v: Visitor[F]) = v.getURL(a)
    }
    case class  GetUnicodeStream(a: Int) extends ResultSetOp[InputStream] {
      def visit[F[_]](v: Visitor[F]) = v.getUnicodeStream(a)
    }
    case class  GetUnicodeStream1(a: String) extends ResultSetOp[InputStream] {
      def visit[F[_]](v: Visitor[F]) = v.getUnicodeStream(a)
    }
    case object GetWarnings extends ResultSetOp[SQLWarning] {
      def visit[F[_]](v: Visitor[F]) = v.getWarnings
    }
    case object InsertRow extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.insertRow
    }
    case object IsAfterLast extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.isAfterLast
    }
    case object IsBeforeFirst extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.isBeforeFirst
    }
    case object IsClosed extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.isClosed
    }
    case object IsFirst extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.isFirst
    }
    case object IsLast extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.isLast
    }
    case class  IsWrapperFor(a: Class[_]) extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.isWrapperFor(a)
    }
    case object Last extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.last
    }
    case object MoveToCurrentRow extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.moveToCurrentRow
    }
    case object MoveToInsertRow extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.moveToInsertRow
    }
    case object Next extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.next
    }
    case object Previous extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.previous
    }
    case object RefreshRow extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.refreshRow
    }
    case class  Relative(a: Int) extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.relative(a)
    }
    case object RowDeleted extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.rowDeleted
    }
    case object RowInserted extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.rowInserted
    }
    case object RowUpdated extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.rowUpdated
    }
    case class  SetFetchDirection(a: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.setFetchDirection(a)
    }
    case class  SetFetchSize(a: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.setFetchSize(a)
    }
    case class  Unwrap[T](a: Class[T]) extends ResultSetOp[T] {
      def visit[F[_]](v: Visitor[F]) = v.unwrap(a)
    }
    case class  UpdateArray(a: Int, b: SqlArray) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateArray(a, b)
    }
    case class  UpdateArray1(a: String, b: SqlArray) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateArray(a, b)
    }
    case class  UpdateAsciiStream(a: Int, b: InputStream) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateAsciiStream(a, b)
    }
    case class  UpdateAsciiStream1(a: Int, b: InputStream, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateAsciiStream(a, b, c)
    }
    case class  UpdateAsciiStream2(a: Int, b: InputStream, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateAsciiStream(a, b, c)
    }
    case class  UpdateAsciiStream3(a: String, b: InputStream) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateAsciiStream(a, b)
    }
    case class  UpdateAsciiStream4(a: String, b: InputStream, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateAsciiStream(a, b, c)
    }
    case class  UpdateAsciiStream5(a: String, b: InputStream, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateAsciiStream(a, b, c)
    }
    case class  UpdateBigDecimal(a: Int, b: BigDecimal) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBigDecimal(a, b)
    }
    case class  UpdateBigDecimal1(a: String, b: BigDecimal) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBigDecimal(a, b)
    }
    case class  UpdateBinaryStream(a: Int, b: InputStream) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBinaryStream(a, b)
    }
    case class  UpdateBinaryStream1(a: Int, b: InputStream, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBinaryStream(a, b, c)
    }
    case class  UpdateBinaryStream2(a: Int, b: InputStream, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBinaryStream(a, b, c)
    }
    case class  UpdateBinaryStream3(a: String, b: InputStream) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBinaryStream(a, b)
    }
    case class  UpdateBinaryStream4(a: String, b: InputStream, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBinaryStream(a, b, c)
    }
    case class  UpdateBinaryStream5(a: String, b: InputStream, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBinaryStream(a, b, c)
    }
    case class  UpdateBlob(a: Int, b: Blob) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBlob(a, b)
    }
    case class  UpdateBlob1(a: Int, b: InputStream) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBlob(a, b)
    }
    case class  UpdateBlob2(a: Int, b: InputStream, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBlob(a, b, c)
    }
    case class  UpdateBlob3(a: String, b: Blob) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBlob(a, b)
    }
    case class  UpdateBlob4(a: String, b: InputStream) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBlob(a, b)
    }
    case class  UpdateBlob5(a: String, b: InputStream, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBlob(a, b, c)
    }
    case class  UpdateBoolean(a: Int, b: Boolean) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBoolean(a, b)
    }
    case class  UpdateBoolean1(a: String, b: Boolean) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBoolean(a, b)
    }
    case class  UpdateByte(a: Int, b: Byte) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateByte(a, b)
    }
    case class  UpdateByte1(a: String, b: Byte) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateByte(a, b)
    }
    case class  UpdateBytes(a: Int, b: Array[Byte]) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBytes(a, b)
    }
    case class  UpdateBytes1(a: String, b: Array[Byte]) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateBytes(a, b)
    }
    case class  UpdateCharacterStream(a: Int, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateCharacterStream(a, b)
    }
    case class  UpdateCharacterStream1(a: Int, b: Reader, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateCharacterStream(a, b, c)
    }
    case class  UpdateCharacterStream2(a: Int, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateCharacterStream(a, b, c)
    }
    case class  UpdateCharacterStream3(a: String, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateCharacterStream(a, b)
    }
    case class  UpdateCharacterStream4(a: String, b: Reader, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateCharacterStream(a, b, c)
    }
    case class  UpdateCharacterStream5(a: String, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateCharacterStream(a, b, c)
    }
    case class  UpdateClob(a: Int, b: Clob) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateClob(a, b)
    }
    case class  UpdateClob1(a: Int, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateClob(a, b)
    }
    case class  UpdateClob2(a: Int, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateClob(a, b, c)
    }
    case class  UpdateClob3(a: String, b: Clob) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateClob(a, b)
    }
    case class  UpdateClob4(a: String, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateClob(a, b)
    }
    case class  UpdateClob5(a: String, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateClob(a, b, c)
    }
    case class  UpdateDate(a: Int, b: Date) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateDate(a, b)
    }
    case class  UpdateDate1(a: String, b: Date) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateDate(a, b)
    }
    case class  UpdateDouble(a: Int, b: Double) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateDouble(a, b)
    }
    case class  UpdateDouble1(a: String, b: Double) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateDouble(a, b)
    }
    case class  UpdateFloat(a: Int, b: Float) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateFloat(a, b)
    }
    case class  UpdateFloat1(a: String, b: Float) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateFloat(a, b)
    }
    case class  UpdateInt(a: Int, b: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateInt(a, b)
    }
    case class  UpdateInt1(a: String, b: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateInt(a, b)
    }
    case class  UpdateLong(a: Int, b: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateLong(a, b)
    }
    case class  UpdateLong1(a: String, b: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateLong(a, b)
    }
    case class  UpdateNCharacterStream(a: Int, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNCharacterStream(a, b)
    }
    case class  UpdateNCharacterStream1(a: Int, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNCharacterStream(a, b, c)
    }
    case class  UpdateNCharacterStream2(a: String, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNCharacterStream(a, b)
    }
    case class  UpdateNCharacterStream3(a: String, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNCharacterStream(a, b, c)
    }
    case class  UpdateNClob(a: Int, b: NClob) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNClob(a, b)
    }
    case class  UpdateNClob1(a: Int, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNClob(a, b)
    }
    case class  UpdateNClob2(a: Int, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNClob(a, b, c)
    }
    case class  UpdateNClob3(a: String, b: NClob) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNClob(a, b)
    }
    case class  UpdateNClob4(a: String, b: Reader) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNClob(a, b)
    }
    case class  UpdateNClob5(a: String, b: Reader, c: Long) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNClob(a, b, c)
    }
    case class  UpdateNString(a: Int, b: String) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNString(a, b)
    }
    case class  UpdateNString1(a: String, b: String) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNString(a, b)
    }
    case class  UpdateNull(a: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNull(a)
    }
    case class  UpdateNull1(a: String) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateNull(a)
    }
    case class  UpdateObject(a: Int, b: AnyRef) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b)
    }
    case class  UpdateObject1(a: Int, b: AnyRef, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b, c)
    }
    case class  UpdateObject2(a: Int, b: AnyRef, c: SQLType) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b, c)
    }
    case class  UpdateObject3(a: Int, b: AnyRef, c: SQLType, d: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b, c, d)
    }
    case class  UpdateObject4(a: String, b: AnyRef) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b)
    }
    case class  UpdateObject5(a: String, b: AnyRef, c: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b, c)
    }
    case class  UpdateObject6(a: String, b: AnyRef, c: SQLType) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b, c)
    }
    case class  UpdateObject7(a: String, b: AnyRef, c: SQLType, d: Int) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateObject(a, b, c, d)
    }
    case class  UpdateRef(a: Int, b: Ref) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateRef(a, b)
    }
    case class  UpdateRef1(a: String, b: Ref) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateRef(a, b)
    }
    case object UpdateRow extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateRow
    }
    case class  UpdateRowId(a: Int, b: RowId) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateRowId(a, b)
    }
    case class  UpdateRowId1(a: String, b: RowId) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateRowId(a, b)
    }
    case class  UpdateSQLXML(a: Int, b: SQLXML) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateSQLXML(a, b)
    }
    case class  UpdateSQLXML1(a: String, b: SQLXML) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateSQLXML(a, b)
    }
    case class  UpdateShort(a: Int, b: Short) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateShort(a, b)
    }
    case class  UpdateShort1(a: String, b: Short) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateShort(a, b)
    }
    case class  UpdateString(a: Int, b: String) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateString(a, b)
    }
    case class  UpdateString1(a: String, b: String) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateString(a, b)
    }
    case class  UpdateTime(a: Int, b: Time) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateTime(a, b)
    }
    case class  UpdateTime1(a: String, b: Time) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateTime(a, b)
    }
    case class  UpdateTimestamp(a: Int, b: Timestamp) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateTimestamp(a, b)
    }
    case class  UpdateTimestamp1(a: String, b: Timestamp) extends ResultSetOp[Unit] {
      def visit[F[_]](v: Visitor[F]) = v.updateTimestamp(a, b)
    }
    case object WasNull extends ResultSetOp[Boolean] {
      def visit[F[_]](v: Visitor[F]) = v.wasNull
    }

  }
  import ResultSetOp._

  // Smart constructors for operations common to all algebras.
  val unit: ResultSetIO[Unit] = FF.pure[ResultSetOp, Unit](())
  def raw[A](f: ResultSet => A): ResultSetIO[A] = FF.liftF(Raw(f))
  def embed[F[_], J, A](j: J, fa: FF[F, A])(implicit ev: Embeddable[F, J]): FF[ResultSetOp, A] = FF.liftF(Embed(ev.embed(j, fa)))
  def lift[F[_], J, A](j: J, fa: FF[F, A])(implicit ev: Embeddable[F, J]): FF[ResultSetOp, A] = embed(j, fa)
  def delay[A](a: => A): ResultSetIO[A] = FF.liftF(Delay(() => a))
  def attempt[A](fa: ResultSetIO[A]): ResultSetIO[Throwable \/ A] = FF.liftF[ResultSetOp, Throwable \/ A](Attempt(fa))
  def fail[A](err: Throwable): ResultSetIO[A] = delay(throw err)

  // Smart constructors for ResultSet-specific operations.
  def absolute(a: Int): ResultSetIO[Boolean] = FF.liftF(Absolute(a))
  val afterLast: ResultSetIO[Unit] = FF.liftF(AfterLast)
  val beforeFirst: ResultSetIO[Unit] = FF.liftF(BeforeFirst)
  val cancelRowUpdates: ResultSetIO[Unit] = FF.liftF(CancelRowUpdates)
  val clearWarnings: ResultSetIO[Unit] = FF.liftF(ClearWarnings)
  val close: ResultSetIO[Unit] = FF.liftF(Close)
  val deleteRow: ResultSetIO[Unit] = FF.liftF(DeleteRow)
  def findColumn(a: String): ResultSetIO[Int] = FF.liftF(FindColumn(a))
  val first: ResultSetIO[Boolean] = FF.liftF(First)
  def getArray(a: Int): ResultSetIO[SqlArray] = FF.liftF(GetArray(a))
  def getArray(a: String): ResultSetIO[SqlArray] = FF.liftF(GetArray1(a))
  def getAsciiStream(a: Int): ResultSetIO[InputStream] = FF.liftF(GetAsciiStream(a))
  def getAsciiStream(a: String): ResultSetIO[InputStream] = FF.liftF(GetAsciiStream1(a))
  def getBigDecimal(a: Int): ResultSetIO[BigDecimal] = FF.liftF(GetBigDecimal(a))
  def getBigDecimal(a: Int, b: Int): ResultSetIO[BigDecimal] = FF.liftF(GetBigDecimal1(a, b))
  def getBigDecimal(a: String): ResultSetIO[BigDecimal] = FF.liftF(GetBigDecimal2(a))
  def getBigDecimal(a: String, b: Int): ResultSetIO[BigDecimal] = FF.liftF(GetBigDecimal3(a, b))
  def getBinaryStream(a: Int): ResultSetIO[InputStream] = FF.liftF(GetBinaryStream(a))
  def getBinaryStream(a: String): ResultSetIO[InputStream] = FF.liftF(GetBinaryStream1(a))
  def getBlob(a: Int): ResultSetIO[Blob] = FF.liftF(GetBlob(a))
  def getBlob(a: String): ResultSetIO[Blob] = FF.liftF(GetBlob1(a))
  def getBoolean(a: Int): ResultSetIO[Boolean] = FF.liftF(GetBoolean(a))
  def getBoolean(a: String): ResultSetIO[Boolean] = FF.liftF(GetBoolean1(a))
  def getByte(a: Int): ResultSetIO[Byte] = FF.liftF(GetByte(a))
  def getByte(a: String): ResultSetIO[Byte] = FF.liftF(GetByte1(a))
  def getBytes(a: Int): ResultSetIO[Array[Byte]] = FF.liftF(GetBytes(a))
  def getBytes(a: String): ResultSetIO[Array[Byte]] = FF.liftF(GetBytes1(a))
  def getCharacterStream(a: Int): ResultSetIO[Reader] = FF.liftF(GetCharacterStream(a))
  def getCharacterStream(a: String): ResultSetIO[Reader] = FF.liftF(GetCharacterStream1(a))
  def getClob(a: Int): ResultSetIO[Clob] = FF.liftF(GetClob(a))
  def getClob(a: String): ResultSetIO[Clob] = FF.liftF(GetClob1(a))
  val getConcurrency: ResultSetIO[Int] = FF.liftF(GetConcurrency)
  val getCursorName: ResultSetIO[String] = FF.liftF(GetCursorName)
  def getDate(a: Int): ResultSetIO[Date] = FF.liftF(GetDate(a))
  def getDate(a: Int, b: Calendar): ResultSetIO[Date] = FF.liftF(GetDate1(a, b))
  def getDate(a: String): ResultSetIO[Date] = FF.liftF(GetDate2(a))
  def getDate(a: String, b: Calendar): ResultSetIO[Date] = FF.liftF(GetDate3(a, b))
  def getDouble(a: Int): ResultSetIO[Double] = FF.liftF(GetDouble(a))
  def getDouble(a: String): ResultSetIO[Double] = FF.liftF(GetDouble1(a))
  val getFetchDirection: ResultSetIO[Int] = FF.liftF(GetFetchDirection)
  val getFetchSize: ResultSetIO[Int] = FF.liftF(GetFetchSize)
  def getFloat(a: Int): ResultSetIO[Float] = FF.liftF(GetFloat(a))
  def getFloat(a: String): ResultSetIO[Float] = FF.liftF(GetFloat1(a))
  val getHoldability: ResultSetIO[Int] = FF.liftF(GetHoldability)
  def getInt(a: Int): ResultSetIO[Int] = FF.liftF(GetInt(a))
  def getInt(a: String): ResultSetIO[Int] = FF.liftF(GetInt1(a))
  def getLong(a: Int): ResultSetIO[Long] = FF.liftF(GetLong(a))
  def getLong(a: String): ResultSetIO[Long] = FF.liftF(GetLong1(a))
  val getMetaData: ResultSetIO[ResultSetMetaData] = FF.liftF(GetMetaData)
  def getNCharacterStream(a: Int): ResultSetIO[Reader] = FF.liftF(GetNCharacterStream(a))
  def getNCharacterStream(a: String): ResultSetIO[Reader] = FF.liftF(GetNCharacterStream1(a))
  def getNClob(a: Int): ResultSetIO[NClob] = FF.liftF(GetNClob(a))
  def getNClob(a: String): ResultSetIO[NClob] = FF.liftF(GetNClob1(a))
  def getNString(a: Int): ResultSetIO[String] = FF.liftF(GetNString(a))
  def getNString(a: String): ResultSetIO[String] = FF.liftF(GetNString1(a))
  def getObject(a: Int): ResultSetIO[AnyRef] = FF.liftF(GetObject(a))
  def getObject[T](a: Int, b: Class[T]): ResultSetIO[T] = FF.liftF(GetObject1(a, b))
  def getObject(a: Int, b: Map[String, Class[_]]): ResultSetIO[AnyRef] = FF.liftF(GetObject2(a, b))
  def getObject(a: String): ResultSetIO[AnyRef] = FF.liftF(GetObject3(a))
  def getObject[T](a: String, b: Class[T]): ResultSetIO[T] = FF.liftF(GetObject4(a, b))
  def getObject(a: String, b: Map[String, Class[_]]): ResultSetIO[AnyRef] = FF.liftF(GetObject5(a, b))
  def getRef(a: Int): ResultSetIO[Ref] = FF.liftF(GetRef(a))
  def getRef(a: String): ResultSetIO[Ref] = FF.liftF(GetRef1(a))
  val getRow: ResultSetIO[Int] = FF.liftF(GetRow)
  def getRowId(a: Int): ResultSetIO[RowId] = FF.liftF(GetRowId(a))
  def getRowId(a: String): ResultSetIO[RowId] = FF.liftF(GetRowId1(a))
  def getSQLXML(a: Int): ResultSetIO[SQLXML] = FF.liftF(GetSQLXML(a))
  def getSQLXML(a: String): ResultSetIO[SQLXML] = FF.liftF(GetSQLXML1(a))
  def getShort(a: Int): ResultSetIO[Short] = FF.liftF(GetShort(a))
  def getShort(a: String): ResultSetIO[Short] = FF.liftF(GetShort1(a))
  val getStatement: ResultSetIO[Statement] = FF.liftF(GetStatement)
  def getString(a: Int): ResultSetIO[String] = FF.liftF(GetString(a))
  def getString(a: String): ResultSetIO[String] = FF.liftF(GetString1(a))
  def getTime(a: Int): ResultSetIO[Time] = FF.liftF(GetTime(a))
  def getTime(a: Int, b: Calendar): ResultSetIO[Time] = FF.liftF(GetTime1(a, b))
  def getTime(a: String): ResultSetIO[Time] = FF.liftF(GetTime2(a))
  def getTime(a: String, b: Calendar): ResultSetIO[Time] = FF.liftF(GetTime3(a, b))
  def getTimestamp(a: Int): ResultSetIO[Timestamp] = FF.liftF(GetTimestamp(a))
  def getTimestamp(a: Int, b: Calendar): ResultSetIO[Timestamp] = FF.liftF(GetTimestamp1(a, b))
  def getTimestamp(a: String): ResultSetIO[Timestamp] = FF.liftF(GetTimestamp2(a))
  def getTimestamp(a: String, b: Calendar): ResultSetIO[Timestamp] = FF.liftF(GetTimestamp3(a, b))
  val getType: ResultSetIO[Int] = FF.liftF(GetType)
  def getURL(a: Int): ResultSetIO[URL] = FF.liftF(GetURL(a))
  def getURL(a: String): ResultSetIO[URL] = FF.liftF(GetURL1(a))
  def getUnicodeStream(a: Int): ResultSetIO[InputStream] = FF.liftF(GetUnicodeStream(a))
  def getUnicodeStream(a: String): ResultSetIO[InputStream] = FF.liftF(GetUnicodeStream1(a))
  val getWarnings: ResultSetIO[SQLWarning] = FF.liftF(GetWarnings)
  val insertRow: ResultSetIO[Unit] = FF.liftF(InsertRow)
  val isAfterLast: ResultSetIO[Boolean] = FF.liftF(IsAfterLast)
  val isBeforeFirst: ResultSetIO[Boolean] = FF.liftF(IsBeforeFirst)
  val isClosed: ResultSetIO[Boolean] = FF.liftF(IsClosed)
  val isFirst: ResultSetIO[Boolean] = FF.liftF(IsFirst)
  val isLast: ResultSetIO[Boolean] = FF.liftF(IsLast)
  def isWrapperFor(a: Class[_]): ResultSetIO[Boolean] = FF.liftF(IsWrapperFor(a))
  val last: ResultSetIO[Boolean] = FF.liftF(Last)
  val moveToCurrentRow: ResultSetIO[Unit] = FF.liftF(MoveToCurrentRow)
  val moveToInsertRow: ResultSetIO[Unit] = FF.liftF(MoveToInsertRow)
  val next: ResultSetIO[Boolean] = FF.liftF(Next)
  val previous: ResultSetIO[Boolean] = FF.liftF(Previous)
  val refreshRow: ResultSetIO[Unit] = FF.liftF(RefreshRow)
  def relative(a: Int): ResultSetIO[Boolean] = FF.liftF(Relative(a))
  val rowDeleted: ResultSetIO[Boolean] = FF.liftF(RowDeleted)
  val rowInserted: ResultSetIO[Boolean] = FF.liftF(RowInserted)
  val rowUpdated: ResultSetIO[Boolean] = FF.liftF(RowUpdated)
  def setFetchDirection(a: Int): ResultSetIO[Unit] = FF.liftF(SetFetchDirection(a))
  def setFetchSize(a: Int): ResultSetIO[Unit] = FF.liftF(SetFetchSize(a))
  def unwrap[T](a: Class[T]): ResultSetIO[T] = FF.liftF(Unwrap(a))
  def updateArray(a: Int, b: SqlArray): ResultSetIO[Unit] = FF.liftF(UpdateArray(a, b))
  def updateArray(a: String, b: SqlArray): ResultSetIO[Unit] = FF.liftF(UpdateArray1(a, b))
  def updateAsciiStream(a: Int, b: InputStream): ResultSetIO[Unit] = FF.liftF(UpdateAsciiStream(a, b))
  def updateAsciiStream(a: Int, b: InputStream, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateAsciiStream1(a, b, c))
  def updateAsciiStream(a: Int, b: InputStream, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateAsciiStream2(a, b, c))
  def updateAsciiStream(a: String, b: InputStream): ResultSetIO[Unit] = FF.liftF(UpdateAsciiStream3(a, b))
  def updateAsciiStream(a: String, b: InputStream, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateAsciiStream4(a, b, c))
  def updateAsciiStream(a: String, b: InputStream, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateAsciiStream5(a, b, c))
  def updateBigDecimal(a: Int, b: BigDecimal): ResultSetIO[Unit] = FF.liftF(UpdateBigDecimal(a, b))
  def updateBigDecimal(a: String, b: BigDecimal): ResultSetIO[Unit] = FF.liftF(UpdateBigDecimal1(a, b))
  def updateBinaryStream(a: Int, b: InputStream): ResultSetIO[Unit] = FF.liftF(UpdateBinaryStream(a, b))
  def updateBinaryStream(a: Int, b: InputStream, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateBinaryStream1(a, b, c))
  def updateBinaryStream(a: Int, b: InputStream, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateBinaryStream2(a, b, c))
  def updateBinaryStream(a: String, b: InputStream): ResultSetIO[Unit] = FF.liftF(UpdateBinaryStream3(a, b))
  def updateBinaryStream(a: String, b: InputStream, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateBinaryStream4(a, b, c))
  def updateBinaryStream(a: String, b: InputStream, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateBinaryStream5(a, b, c))
  def updateBlob(a: Int, b: Blob): ResultSetIO[Unit] = FF.liftF(UpdateBlob(a, b))
  def updateBlob(a: Int, b: InputStream): ResultSetIO[Unit] = FF.liftF(UpdateBlob1(a, b))
  def updateBlob(a: Int, b: InputStream, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateBlob2(a, b, c))
  def updateBlob(a: String, b: Blob): ResultSetIO[Unit] = FF.liftF(UpdateBlob3(a, b))
  def updateBlob(a: String, b: InputStream): ResultSetIO[Unit] = FF.liftF(UpdateBlob4(a, b))
  def updateBlob(a: String, b: InputStream, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateBlob5(a, b, c))
  def updateBoolean(a: Int, b: Boolean): ResultSetIO[Unit] = FF.liftF(UpdateBoolean(a, b))
  def updateBoolean(a: String, b: Boolean): ResultSetIO[Unit] = FF.liftF(UpdateBoolean1(a, b))
  def updateByte(a: Int, b: Byte): ResultSetIO[Unit] = FF.liftF(UpdateByte(a, b))
  def updateByte(a: String, b: Byte): ResultSetIO[Unit] = FF.liftF(UpdateByte1(a, b))
  def updateBytes(a: Int, b: Array[Byte]): ResultSetIO[Unit] = FF.liftF(UpdateBytes(a, b))
  def updateBytes(a: String, b: Array[Byte]): ResultSetIO[Unit] = FF.liftF(UpdateBytes1(a, b))
  def updateCharacterStream(a: Int, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateCharacterStream(a, b))
  def updateCharacterStream(a: Int, b: Reader, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateCharacterStream1(a, b, c))
  def updateCharacterStream(a: Int, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateCharacterStream2(a, b, c))
  def updateCharacterStream(a: String, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateCharacterStream3(a, b))
  def updateCharacterStream(a: String, b: Reader, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateCharacterStream4(a, b, c))
  def updateCharacterStream(a: String, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateCharacterStream5(a, b, c))
  def updateClob(a: Int, b: Clob): ResultSetIO[Unit] = FF.liftF(UpdateClob(a, b))
  def updateClob(a: Int, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateClob1(a, b))
  def updateClob(a: Int, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateClob2(a, b, c))
  def updateClob(a: String, b: Clob): ResultSetIO[Unit] = FF.liftF(UpdateClob3(a, b))
  def updateClob(a: String, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateClob4(a, b))
  def updateClob(a: String, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateClob5(a, b, c))
  def updateDate(a: Int, b: Date): ResultSetIO[Unit] = FF.liftF(UpdateDate(a, b))
  def updateDate(a: String, b: Date): ResultSetIO[Unit] = FF.liftF(UpdateDate1(a, b))
  def updateDouble(a: Int, b: Double): ResultSetIO[Unit] = FF.liftF(UpdateDouble(a, b))
  def updateDouble(a: String, b: Double): ResultSetIO[Unit] = FF.liftF(UpdateDouble1(a, b))
  def updateFloat(a: Int, b: Float): ResultSetIO[Unit] = FF.liftF(UpdateFloat(a, b))
  def updateFloat(a: String, b: Float): ResultSetIO[Unit] = FF.liftF(UpdateFloat1(a, b))
  def updateInt(a: Int, b: Int): ResultSetIO[Unit] = FF.liftF(UpdateInt(a, b))
  def updateInt(a: String, b: Int): ResultSetIO[Unit] = FF.liftF(UpdateInt1(a, b))
  def updateLong(a: Int, b: Long): ResultSetIO[Unit] = FF.liftF(UpdateLong(a, b))
  def updateLong(a: String, b: Long): ResultSetIO[Unit] = FF.liftF(UpdateLong1(a, b))
  def updateNCharacterStream(a: Int, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateNCharacterStream(a, b))
  def updateNCharacterStream(a: Int, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateNCharacterStream1(a, b, c))
  def updateNCharacterStream(a: String, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateNCharacterStream2(a, b))
  def updateNCharacterStream(a: String, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateNCharacterStream3(a, b, c))
  def updateNClob(a: Int, b: NClob): ResultSetIO[Unit] = FF.liftF(UpdateNClob(a, b))
  def updateNClob(a: Int, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateNClob1(a, b))
  def updateNClob(a: Int, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateNClob2(a, b, c))
  def updateNClob(a: String, b: NClob): ResultSetIO[Unit] = FF.liftF(UpdateNClob3(a, b))
  def updateNClob(a: String, b: Reader): ResultSetIO[Unit] = FF.liftF(UpdateNClob4(a, b))
  def updateNClob(a: String, b: Reader, c: Long): ResultSetIO[Unit] = FF.liftF(UpdateNClob5(a, b, c))
  def updateNString(a: Int, b: String): ResultSetIO[Unit] = FF.liftF(UpdateNString(a, b))
  def updateNString(a: String, b: String): ResultSetIO[Unit] = FF.liftF(UpdateNString1(a, b))
  def updateNull(a: Int): ResultSetIO[Unit] = FF.liftF(UpdateNull(a))
  def updateNull(a: String): ResultSetIO[Unit] = FF.liftF(UpdateNull1(a))
  def updateObject(a: Int, b: AnyRef): ResultSetIO[Unit] = FF.liftF(UpdateObject(a, b))
  def updateObject(a: Int, b: AnyRef, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateObject1(a, b, c))
  def updateObject(a: Int, b: AnyRef, c: SQLType): ResultSetIO[Unit] = FF.liftF(UpdateObject2(a, b, c))
  def updateObject(a: Int, b: AnyRef, c: SQLType, d: Int): ResultSetIO[Unit] = FF.liftF(UpdateObject3(a, b, c, d))
  def updateObject(a: String, b: AnyRef): ResultSetIO[Unit] = FF.liftF(UpdateObject4(a, b))
  def updateObject(a: String, b: AnyRef, c: Int): ResultSetIO[Unit] = FF.liftF(UpdateObject5(a, b, c))
  def updateObject(a: String, b: AnyRef, c: SQLType): ResultSetIO[Unit] = FF.liftF(UpdateObject6(a, b, c))
  def updateObject(a: String, b: AnyRef, c: SQLType, d: Int): ResultSetIO[Unit] = FF.liftF(UpdateObject7(a, b, c, d))
  def updateRef(a: Int, b: Ref): ResultSetIO[Unit] = FF.liftF(UpdateRef(a, b))
  def updateRef(a: String, b: Ref): ResultSetIO[Unit] = FF.liftF(UpdateRef1(a, b))
  val updateRow: ResultSetIO[Unit] = FF.liftF(UpdateRow)
  def updateRowId(a: Int, b: RowId): ResultSetIO[Unit] = FF.liftF(UpdateRowId(a, b))
  def updateRowId(a: String, b: RowId): ResultSetIO[Unit] = FF.liftF(UpdateRowId1(a, b))
  def updateSQLXML(a: Int, b: SQLXML): ResultSetIO[Unit] = FF.liftF(UpdateSQLXML(a, b))
  def updateSQLXML(a: String, b: SQLXML): ResultSetIO[Unit] = FF.liftF(UpdateSQLXML1(a, b))
  def updateShort(a: Int, b: Short): ResultSetIO[Unit] = FF.liftF(UpdateShort(a, b))
  def updateShort(a: String, b: Short): ResultSetIO[Unit] = FF.liftF(UpdateShort1(a, b))
  def updateString(a: Int, b: String): ResultSetIO[Unit] = FF.liftF(UpdateString(a, b))
  def updateString(a: String, b: String): ResultSetIO[Unit] = FF.liftF(UpdateString1(a, b))
  def updateTime(a: Int, b: Time): ResultSetIO[Unit] = FF.liftF(UpdateTime(a, b))
  def updateTime(a: String, b: Time): ResultSetIO[Unit] = FF.liftF(UpdateTime1(a, b))
  def updateTimestamp(a: Int, b: Timestamp): ResultSetIO[Unit] = FF.liftF(UpdateTimestamp(a, b))
  def updateTimestamp(a: String, b: Timestamp): ResultSetIO[Unit] = FF.liftF(UpdateTimestamp1(a, b))
  val wasNull: ResultSetIO[Boolean] = FF.liftF(WasNull)

// ResultSetIO can capture side-effects, and can trap and raise exceptions.
  implicit val CatchableResultSetIO: Suspendable[ResultSetIO] with Catchable[ResultSetIO] =
    new Suspendable[ResultSetIO] with Catchable[ResultSetIO] {
      def pure[A](a: A): ResultSetIO[A] = resultset.delay(a)
      override def map[A, B](fa: ResultSetIO[A])(f: A => B): ResultSetIO[B] = fa.map(f)
      def flatMap[A, B](fa: ResultSetIO[A])(f: A => ResultSetIO[B]): ResultSetIO[B] = fa.flatMap(f)
      def suspend[A](fa: => ResultSetIO[A]): ResultSetIO[A] = FF.suspend(fa)
      override def delay[A](a: => A): ResultSetIO[A] = resultset.delay(a)
      def attempt[A](f: ResultSetIO[A]): ResultSetIO[Throwable \/ A] = resultset.attempt(f)
      def fail[A](err: Throwable): ResultSetIO[A] = resultset.fail(err)
    }

}





© 2015 - 2025 Weber Informatics LLC | Privacy Policy