Create a CursoredStatement with the given parameterized sql query.
Create a CursoredStatement with the given parameterized sql query. The returned cursored statement can be reused and applied with varying parameters.
The cursored statements are built on a prepare -> execute -> fetch flow that requires state tracking. It is important to either fully consume the resulting stream, or explicitly call CursorResult.close().
Returns the result of pinging the server.
Returns a new PreparedStatement instance based on the given sql query.
Returns a new PreparedStatement instance based on the given sql query. The returned prepared statement can be reused and applied with varying parameters.
Mysql prepared statements are stateful, that is, they allocate resources on the mysql server. The allocations are managed by a finagle-mysql connection. Closing the client implicitly closes all outstanding PreparedStatements.
Returns the result of executing the sql
query on the server.
Sends the given sql
to the server and maps each resulting row to
f
, a function from Row => T.
Sends the given sql
to the server and maps each resulting row to
f
, a function from Row => T. If no ResultSet is returned, the function
returns an empty Seq.
import com.twitter.finagle.mysql.Client import com.twitter.util.Future val client: Client = ??? val names: Future[Seq[String]] = client.select("SELECT name FROM employee") { row => row.stringOrNull("name") }
Reserve a session for exclusive use.
Reserve a session for exclusive use. This can be useful when operations that require connection state are to be performed, for example: transactions, locks, or cursors.
A session's life cycle is managed through the completion of the provided Future. If a session is no longer usable it can be explicitly discarded.
import com.twitter.finagle.mysql.{Client, Transactions} import com.twitter.util.{Future, Throw} case class ReallyBadException() extends Exception val client: Client with Transactions = ??? client.session { session => val result = for { _ <- session.query("LOCK") r <- session.transaction { tx => tx.query("...") } _ <- session.query("UNLOCK") } yield r result.rescue { case e: ReallyBadException => session.discard().flatMap(_ => Future.exception(e) ) } }
Session
Executes the given DML (e.g.
Executes the given DML (e.g. INSERT/UPDATE/DELETE) or DDL
(e.g. CREATE TABLE, DROP TABLE, COMMIT, START TRANSACTION, etc)
given by sql
.
import com.twitter.finagle.mysql.{Client, OK} import com.twitter.util.Future val client: Client = ??? val result: Future[OK] = client.modify("INSERT INTO employee (name) VALUES ('Alice')")
Executes the given SELECT query given by sql
.
Executes the given SELECT query given by sql
.
import com.twitter.finagle.mysql.{Client, ResultSet} import com.twitter.util.Future val client: Client = ??? val resultSet: Future[ResultSet] = client.read("SELECT name FROM employee")
A MySQL client that is not
Service
-based like com.twitter.finagle.Mysql.Client is, making it easier to use for most cases.Creation: