'3F      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEportable experimental%Bryan O'Sullivan <bos@serpentine.com>None:Wrap a mostly-binary string to be escaped in hexadecimal. $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 F, 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 G, and literal Haskell strings B that contain Unicode characters will be correctly transformed to  UTF-8. A placeholder for the SQL NULL value. HIJKL   HIJKLportable experimental%Bryan O'Sullivan <bos@serpentine.com> Safe-Infered.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. " !"#$%&MNOPQRSTUVWXYZ[\]^_`abcde  !"#$%& #"!$%&$%&$%& #"!$%&$%&$%&MNOPQRSTUVWXYZ[\]^_`abcdeportable experimental%Bryan O'Sullivan <bos@serpentine.com> Safe-Infered'@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 2 @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  '.  =data User = 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 2 (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 f and row, and the . number in the collection to be converted to. '()'Descriptors of fields to be converted. %Contents of the row to be converted. 0Number of columns expected for conversion. For 5 instance, if converting to a 3-tuple, the number to  provide here would be 3. ghijklmnop'()'() '()ghijklmnopportable experimental%Bryan O'Sullivan <bos@serpentine.com> Safe-Infered*>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 "'". 00Surround a string with single-quote characters: "'" This function does not perform any other escaping. $*+,-./0qrstuvwxyz{|}~*+,-./0,/.-*+0 *+,/.-0qrstuvwxyz{|}~portable experimental%Bryan O'Sullivan <bos@serpentine.com> Safe-Infered1>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. 2Render a collection of values. 121212 12portable experimental%Bryan O'Sullivan <bos@serpentine.com> Safe-Infered3Exception thrown if ? is used to perform an INSERT-like  operation, or < is used to perform a SELECT-like operation. 6Exception 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. :Format 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 6, if the query string could not be formatted  correctly. ;6Format 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 6, 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 60 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 60 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 A instead. Exceptions that may be thrown:  65: the query string could not be formatted correctly.  35: 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. A 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:  65: the query string could not be formatted correctly.  35: the result contains no columns (i.e. you should be  using < instead of ?).   : result conversion failed. B A version of A+ that does not perform query substitution. C A version of A( that does not transform a state value. D A version of C+ that does not perform query substitution. E,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. 3456789:;<=>?@AQuery template. Query parameters. #Initial state for result consumer. Result consumer. BQuery. #Initial state for result consumer. Result consumer. CQuery template. Query parameters. Result consumer. DQuery template. Result consumer. E1  $%&3456789:;<=>?@ABCDE7 6789345 $%&$%&$%&?@ABCD<=>E;:3456789:;<=>?@ABCDE       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~mysql-simple-0.2.2.4Database.MySQL.SimpleDatabase.MySQL.Simple.TypesDatabase.MySQL.Simple.Result"Database.MySQL.Simple.QueryResultsDatabase.MySQL.Simple.Param!Database.MySQL.Simple.QueryParams mysql-0.1.1.4Database.MySQL.BaserollbackcommitinsertID autocommitcloseconnectdefaultConnectInfo connectSSL connectPathconnectOptionsconnectDatabaseconnectPassword connectUser connectPort connectHost ConnectInfo ConnectionBinaryInOnlyfromOnlyQuery fromQueryNullResultconvert ResultErrorConversionFailedUnexpectedNull Incompatible errSQLTypeerrHaskellType errMessage QueryResultsconvertResults convertErrorParamrenderActionManyEscapePlaininQuotes QueryParams renderParams QueryError qeMessageqeQuery FormatError fmtMessagefmtQuery fmtParams formatQuery formatManyexecuteexecute_ executeManyqueryquery_foldfold_forEachforEach_withTransactionbase Data.StringIsStringbytestring-0.9.2.1Data.ByteString.Internal ByteString $fMonoidQuery$fIsStringQuery $fReadQuery $fShowQuery$fEqNull$fResultTimeOfDay $fResultDay$fResultUTCTime $fResult[] $fResultText $fResultText0$fResultByteString$fResultByteString0 $fResultRatio$fResultDouble $fResultFloat$fResultWord64 $fResultWord$fResultWord32$fResultWord16 $fResultWord8$fResultInteger $fResultInt64 $fResultInt $fResultInt32 $fResultInt16 $fResultInt8 $fResultBool $fResultMaybe$fExceptionResultErrorDatabase.MySQL.Base.TypesField$fQueryResults(,,,,,,,,,)$fQueryResults(,,,,,,,,)$fQueryResults(,,,,,,,)$fQueryResults(,,,,,,)$fQueryResults(,,,,,)$fQueryResults(,,,,)$fQueryResults(,,,)$fQueryResults(,,)$fQueryResults(,)$fQueryResultsOnly$fParamTimeOfDay $fParamDay$fParamUTCTime $fParamText $fParam[] $fParamText0$fParamByteString$fParamByteString0 $fParamDouble $fParamFloat $fParamWord64 $fParamWord $fParamWord32 $fParamWord16 $fParamWord8$fParamInteger $fParamInt64 $fParamInt $fParamInt32 $fParamInt16 $fParamInt8 $fParamBool $fParamNull $fParamBinary$fParamBinary0 $fParamIn $fParamMaybe $fParamAction $fShowAction$fQueryParams[]$fQueryParams(,,,,,,,,,)$fQueryParams(,,,,,,,,)$fQueryParams(,,,,,,,)$fQueryParams(,,,,,,)$fQueryParams(,,,,,)$fQueryParams(,,,,)$fQueryParams(,,,)$fQueryParams(,,)$fQueryParams(,)$fQueryParamsOnly$fQueryParams()$fExceptionQueryError$fExceptionFormatError