D      !"#$%&'()*+,-./0123456789:;<=>?@ABCportable experimental#Bryan O'Sullivan <bos@mailrank.com> $Wrap a list of values for use in an IN clause. Replaces a  single "?"1 character with a parenthesized list of rendered  values.  Example: = query c "select * from whatever where id in ?" (In [3,4,5]) A single-value " collection". AThis is useful if you need to supply a single parameter to a SQL 6 query, or extract a single column from a SQL result. Parameter example:  query c " select x from scores where x > ?" ( (42::Int))Result example: xs < - query_ c "select id from users"  forM_ xs $ \( id) -> {- ... -}>A query string. This type is intended to make it difficult to E construct a SQL query by concatenating string fragments, as that is A an extremely common way to accidentally introduce SQL injection & vulnerabilities into an application. This type is an instance of D, so the easiest way to $ construct a query is to enable the OverloadedStrings language = extension and then simply write the query in double quotes.  $ {-# LANGUAGE OverloadedStrings #-}   import Database.MySQL.Simple   q :: Query  q = "select ?" The underlying type is a E, and literal Haskell strings B that contain Unicode characters will be correctly transformed to  UTF-8. A placeholder for the SQL NULL value.    portable experimental#Bryan O'Sullivan <bos@mailrank.com>FG.A type that may be converted from a SQL type. (Convert a SQL value to a Haskell value.  Throws a  if conversion fails. =Exception thrown if conversion from a SQL value to a Haskell  value fails. 0The SQL value could not be parsed, or could not 0 be represented as a valid Haskell value, or an 4 unexpected low-level error occurred (e.g. mismatch - between metadata and actual data in a row). A SQL NULL" was encountered when the Haskell  type did not permit it. !.The SQL and Haskell types are not compatible. "#$HIJKLMNOPQRSTU  !"#$! "#$"#$"#$  ! "#$"#$"#$ !"#$portable experimental#Bryan O'Sullivan <bos@mailrank.com>%@A collection type that can be converted from a list of strings. Instances should use the  method of the  class : to perform conversion of each element of the collection. CThis example instance demonstrates how to convert a two-column row C into a Haskell pair. Each field in the metadata is paired up with 4 each value from the row, and the two are passed to .    instance ( a,  b) => % (a,b) where  & [fa,fb] [va,vb] = (a,b)  where !a =  fa va  !b =  fb vb  & fs vs = ' fs vs @Notice that this instance evaluates each element to WHNF before B constructing the pair. By doing this, we guarantee two important  properties: B Keep resource usage under control by preventing the construction % of potentially long-lived thunks.  Ensure that any  that might arise is thrown A immediately, rather than some place later in application code  that cannot handle it. BYou can also declare Haskell types of your own to be instances of  %.  6data User { firstName :: String, lastName :: String }   instance % User where  & [fa,fb] [va,vb] = User a b  where !a =  fa va  !b =  fb vb  & fs vs = ' fs vs &5Convert values from a row into a Haskell collection. This function will throw a  if conversion of the  collection fails. 'Throw a " exception, indicating a mismatch & between the number of columns in the V and row, and the . number in the collection to be converted to. W%&'%&'%&&'portable experimental#Bryan O'Sullivan <bos@mailrank.com>(>A type that may be used as a single parameter to a SQL query. )6Prepare a value for substitution into a query string. *<How to render an element when substituting it into a query. ++Concatenate a series of rendering actions. ,>Escape and enclose in quotes before substituting. Use for all < text-like types, and anything else that may contain unsafe  characters when rendered. -;Render without escaping or quoting. Use for non-text types  such as numbers, when you are certain that they will not A introduce formatting vulnerabilities via use of characters such  as spaces or "'". X.0Surround a string with single-quote characters: "'" This function does not perform any other escaping. ()*+,-.*-,+().())*-,++,-.portable experimental#Bryan O'Sullivan <bos@mailrank.com>/>A collection type that can be turned into a list of rendering  *s. Instances should use the ) method of the ( class : to perform conversion of each element of the collection. 0Render a collection of values. /0/0/00portable experimental#Bryan O'Sullivan <bos@mailrank.com>1Exception thrown if = is used to perform an INSERT-like  operation, or : is used to perform a SELECT-like operation. Y234Exception thrown if a # could not be formatted correctly. ! This may occur if the number of '?' characters in the query : string does not match the number of parameters provided. Z5678Format a query string. DThis function is exposed to help with debugging and logging. Do not * use it to prepare queries for execution. DString parameters are escaped according to the character set in use  on the . Throws 4, if the query string could not be formatted  correctly. 96Format a query string with a variable number of rows. DThis function is exposed to help with debugging and logging. Do not * use it to prepare queries for execution. >The query string must contain exactly one substitution group,  identified by the SQL keyword "VALUES" (case insensitive)  followed by an "("$ character, a series of one or more "?" ' characters separated by commas, and a ")" character. White - space in a substitution group is permitted. Throws 4, if the query string could not be formatted  correctly. [: Execute an INSERT, UPDATE!, or other SQL query that is not  expected to return results. %Returns the number of rows affected. Throws 40 if the query could not be formatted correctly. ; A version of :+ that does not perform query substitution. <Execute a multi-row INSERT, UPDATE!, or other SQL query that is not  expected to return results. %Returns the number of rows affected. Throws 40 if the query could not be formatted correctly. \= Perform a SELECT/ or other SQL query that is expected to return > results. All results are retrieved and converted before this  function returns. CWhen processing large results, this function will consume a lot of % client-side memory. Consider using ? instead. Exceptions that may be thrown:  45: the query string could not be formatted correctly.  15: the result contains no columns (i.e. you should be  using : instead of =).  : result conversion failed. > A version of =+ that does not perform query substitution. ? Perform a SELECT/ or other SQL query that is expected to return B results. Results are streamed incrementally from the server, and  consumed via a left fold. 9The result consumer must be carefully written to execute E quickly. If the consumer is slow, server resources will be tied up, C and other clients may not be able to update the tables from which ! the results are being streamed. @When dealing with small results, it may be simpler (and perhaps  faster) to use = instead.  This fold is not0 strict. The stream consumer is responsible for < forcing the evaluation of its result to avoid space leaks. Exceptions that may be thrown:  45: the query string could not be formatted correctly.  15: the result contains no columns (i.e. you should be  using : instead of =).  : result conversion failed. Query template. Query parameters. #Initial state for result consumer. Result consumer. @ A version of ?+ that does not perform query substitution. Query. #Initial state for result consumer. Result consumer. A A version of ?( that does not transform a state value. Query template. Query parameters. Result consumer. B A version of A+ that does not perform query substitution. Query template. Result consumer. ]^_C,Execute an action inside a SQL transaction. -This function initiates a transaction with a "begin  transaction"3 statement, then executes the supplied action. If = the action succeeds, the transaction will be completed with   before this function returns. If the action throws any kind of exception (not just a E MySQL-related exception), the transaction will be rolled back using  ', then the exception will be rethrown. `/ "#$123456789:;<=>?@ABC5 4567123"#$"#$"#$=>?@AB:;<C9812323456756789:;<=>?@ABCa      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNNOPQRSTUVWXYZ[\]^_`58abcdefgmysql-simple-0.2.1.2Database.MySQL.SimpleDatabase.MySQL.Simple.TypesDatabase.MySQL.Simple.Result"Database.MySQL.Simple.QueryResultsDatabase.MySQL.Simple.Param!Database.MySQL.Simple.QueryParams mysql-0.1.1.1Database.MySQL.BaserollbackcommitinsertID autocommitcloseconnectdefaultConnectInfo connectSSL connectPathconnectOptionsconnectDatabaseconnectPassword connectUser connectPort connectHost ConnectInfo ConnectionInOnlyfromOnlyQuery fromQueryNullResultconvert ResultErrorConversionFailedUnexpectedNull Incompatible errSQLTypeerrHaskellType errMessage QueryResultsconvertResults convertErrorParamrenderActionManyEscapePlaininQuotes QueryParams renderParams QueryError qeMessageqeQuery FormatError fmtMessagefmtQuery fmtParams formatQuery formatManyexecuteexecute_ executeManyqueryquery_foldfold_forEachforEach_withTransactionbase Data.StringIsStringbytestring-0.9.1.10Data.ByteString.Internal ByteStringCompatisText mkCompatsmkCompatcompatokTextok8ok16ok32ok64okWord doConvert incompatibleconversionFailedattoDatabase.MySQL.Base.TypesFieldellipsis renderNull buildQuery finishExecute finishQuery finishFold withResultfmtError