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

scalikejdbc.async.FutureImplicits.scala Maven / Gradle / Ivy

package scalikejdbc.async

import scalikejdbc._
import scala.concurrent._
import scalikejdbc.async.ShortenedNames._

/**
 * Provides power mode by implicit converions.
 *
 * {{{
 *   import scalikejdbc._, async._, FutureImplicits._
 *   val wc = Worker.column
 *   val future: Future[Unit] = AsyncDB.localTx { implicit tx =>
 *     for {
 *       companyId <- withSQL {
 *           insert.into(Company).values("Typesafe", DateTime.now)
 *         }.updateAndReturnGeneratedKey
 *       _ <- update(Worker).set(wc.companyId -> companyId).where.eq(wc.id, 123)
 *     } yield ()
 *   }
 * }}}
 */
object FutureImplicits {

  implicit def fromSQLToTraversableFuture[A](sql: SQL[A, HasExtractor])(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Traversable[A]] = sql.traversable.future

  implicit def fromSQLToListFuture[A](sql: SQL[A, HasExtractor])(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[List[A]] = sql.list.future

  implicit def fromSQLToSingleFuture[A](sql: SQL[A, HasExtractor])(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Option[A]] = sql.single.future

  implicit def fromSQLToListToListFuture[A](sql: SQLToList[A, HasExtractor])(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[List[A]] = sql.future

  implicit def fromConditionSQLBuilderToIntFuture(b: ConditionSQLBuilder[UpdateOperation])(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Int] = updateFuture(b)

  implicit def fromConditionSQLBuilderToUnitFuture(b: ConditionSQLBuilder[UpdateOperation])(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Unit] = updateFuture(b).map { _ => }

  implicit def fromInsertSQLBuilderToFuture[A](b: InsertSQLBuilder)(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Int] = updateFuture(b)

  implicit def fromUpdateSQLBuilderToFuture[A](b: UpdateSQLBuilder)(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Int] = updateFuture(b)

  implicit def fromDeleteSQLBuilderToFuture[A](b: DeleteSQLBuilder)(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Int] = updateFuture(b)

  implicit def fromSQLExecutionToExecuteFuture(e: SQLExecution)(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Boolean] = e.future()

  implicit def fromSQLUpdateWithGeneratedKeyToFuture[A](b: SQLUpdateWithGeneratedKey)(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Long] = b.future()

  implicit def fromSQLUpdateToFuture(e: SQLUpdate)(
    implicit session: AsyncDBSession, cxt: EC = EC.Implicits.global): Future[Int] = e.future()

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy