-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | low-level binding to libpq -- -- This is a binding to libpq: the C application programmer's interface -- to PostgreSQL. libpq is a set of library functions that allow client -- programs to pass queries to the PostgreSQL backend server and to -- receive the results of these queries. @package postgresql-libpq @version 0.8.2 -- | This is a binding to libpq: the C application programmer's interface -- to PostgreSQL. libpq is a set of library functions that allow client -- programs to pass queries to the PostgreSQL backend server and to -- receive the results of these queries. -- -- This is intended to be a very low-level interface to libpq. It -- provides memory management and a somewhat more consistent interface to -- error conditions. Application code should typically use a higher-level -- PostgreSQL binding. -- -- This interface is not safe, because libpq unfortunately conflates -- explicit disconnects with memory management. A use-after-free memory -- fault will result if a connection is used in any way after -- finish is called. This will likely cause a segfault, or return -- an error if memory has not yet been reused. Other more bizarre -- behaviors are possible, though unlikely by chance. Higher-level -- bindings need to be aware of this issue and need to ensure that -- application code cannot cause the functions in this module to be -- called on an finished connection. -- -- One possibility is to represent a connection in a higher-level -- interface as MVar (Maybe Connection), using Nothing -- to represent an explicitly disconnected state. This was done in an -- earlier incarnation of this library, however this was removed because -- a higher level binding is likely to use a similar construct to deal -- with other issues. Thus incorporating that in this module results in -- extra layers of indirection for relatively little functionality. module Database.PostgreSQL.LibPQ -- | Connection encapsulates a connection to the backend. data Connection -- | Makes a new connection to the database server. -- -- This function opens a new database connection using the parameters -- taken from the string conninfo. Its nonblocking analogues are -- connectStart and connectPoll. -- -- The passed string can be empty to use all default parameters, or it -- can contain one or more parameter settings separated by whitespace. -- Each parameter setting is in the form keyword = value. Spaces around -- the equal sign are optional. To write an empty value or a value -- containing spaces, surround it with single quotes, e.g., keyword = 'a -- value'. Single quotes and backslashes within the value must be escaped -- with a backslash, i.e., ' and \. connectdb :: ByteString -> IO Connection -- | Make a connection to the database server in a nonblocking manner. connectStart :: ByteString -> IO Connection -- | If connectStart succeeds, the next stage is to poll libpq so -- that it can proceed with the connection sequence. Use socket to -- obtain the Fd of the socket underlying the database connection. -- Loop thus: If connectPoll last returned PollingReading, -- wait until the socket is ready to read (as indicated by select(), -- poll(), or similar system function). Then call connectPoll -- again. Conversely, if connectPoll last returned -- PollingWriting, wait until the socket is ready to write, then -- call connectPoll again. If you have yet to call -- connectPoll, i.e., just after the call to connectStart, -- behave as if it last returned PollingWriting. Continue this -- loop until connectPoll returns PollingFailed, indicating -- the connection procedure has failed, or PollingOk, indicating -- the connection has been successfully made. connectPoll :: Connection -> IO PollingStatus -- | Allocate a Null Connection, which all libpq functions should safely -- fail on. newNullConnection :: IO Connection -- | Test if a connection is the Null Connection. isNullConnection :: Connection -> Bool -- | Resets the communication channel to the server. -- -- This function will close the connection to the server and attempt to -- reestablish a new connection to the same server, using all the same -- parameters previously used. This might be useful for error recovery if -- a working connection is lost. reset :: Connection -> IO () -- | Reset the communication channel to the server, in a nonblocking -- manner. resetStart :: Connection -> IO Bool -- | To initiate a connection reset, call resetStart. If it returns -- False, the reset has failed. If it returns True, poll -- the reset using resetPoll in exactly the same way as you would -- create the connection using connectPoll. resetPoll :: Connection -> IO PollingStatus data PollingStatus PollingFailed :: PollingStatus PollingReading :: PollingStatus PollingWriting :: PollingStatus PollingOk :: PollingStatus -- | Closes the connection to the server. -- -- Note that the Connection must not be used again after -- finish has been called. finish :: Connection -> IO () -- | Returns the database name of the connection. db :: Connection -> IO (Maybe ByteString) -- | Returns the user name of the connection. user :: Connection -> IO (Maybe ByteString) -- | Returns the password of the connection. pass :: Connection -> IO (Maybe ByteString) -- | Returns the server host name of the connection. host :: Connection -> IO (Maybe ByteString) -- | Returns the port of the connection. port :: Connection -> IO (Maybe ByteString) -- | Returns the command-line options passed in the connection request. options :: Connection -> IO (Maybe ByteString) data ConnStatus -- | The Connection is ready. ConnectionOk :: ConnStatus -- | The connection procedure has failed. ConnectionBad :: ConnStatus -- | Waiting for connection to be made. ConnectionStarted :: ConnStatus -- | Connection OK; waiting to send. ConnectionMade :: ConnStatus -- | Waiting for a response from the server. ConnectionAwaitingResponse :: ConnStatus -- | Received authentication; waiting for backend start-up to finish. ConnectionAuthOk :: ConnStatus -- | Negotiating environment-driven parameter settings. ConnectionSetEnv :: ConnStatus -- | Negotiating SSL encryption. ConnectionSSLStartup :: ConnStatus -- | Returns the status of the connection. -- -- The status can be one of a number of values. However, only two of -- these are seen outside of an asynchronous connection procedure: -- ConnectionOk and ConnectionBad. A good connection to the -- database has the status ConnectionOk. A failed connection -- attempt is signaled by status ConnectionBad. Ordinarily, an OK -- status will remain so until finish, but a communications -- failure might result in the status changing to ConnectionBad -- prematurely. In that case the application could try to recover by -- calling reset. -- -- See the entry for connectStart and connectPoll with -- regards to other status codes that might be seen. status :: Connection -> IO ConnStatus data TransactionStatus -- | currently idle TransIdle :: TransactionStatus -- | a command is in progress TransActive :: TransactionStatus -- | idle, in a valid transaction block TransInTrans :: TransactionStatus -- | idle, in a failed transaction block TransInError :: TransactionStatus -- | the connection is bad TransUnknown :: TransactionStatus -- | Returns the current in-transaction status of the server. -- -- TransActive is reported only when a query has been sent to the -- server and not yet completed. transactionStatus :: Connection -> IO TransactionStatus -- | Looks up a current parameter setting of the server. -- -- Certain parameter values are reported by the server automatically at -- connection startup or whenever their values change. -- parameterStatus can be used to interrogate these settings. It -- returns the current value of a parameter if known, or Nothing -- if the parameter is not known. parameterStatus :: Connection -> ByteString -> IO (Maybe ByteString) -- | Interrogates the frontend/backend protocol being used. -- -- Applications might wish to use this to determine whether certain -- features are supported. Currently, the possible values are 2 (2.0 -- protocol), 3 (3.0 protocol), or zero (connection bad). This will not -- change after connection startup is complete, but it could -- theoretically change during a connection reset. The 3.0 protocol will -- normally be used when communicating with PostgreSQL 7.4 or later -- servers; pre-7.4 servers support only protocol 2.0. (Protocol 1.0 is -- obsolete and not supported by libpq.) protocolVersion :: Connection -> IO Int -- | Returns an integer representing the backend version. -- -- Applications might use this to determine the version of the database -- server they are connected to. The number is formed by converting the -- major, minor, and revision numbers into two-decimal-digit numbers and -- appending them together. For example, version 8.1.5 will be returned -- as 80105, and version 8.2 will be returned as 80200 (leading zeroes -- are not shown). Zero is returned if the connection is bad. serverVersion :: Connection -> IO Int -- | Returns the error message most recently generated by an operation on -- the connection. -- -- Nearly all libpq functions will set a message for errorMessage -- if they fail. Note that by libpq convention, a nonempty -- errorMessage result can be multiple lines, and will include a -- trailing newline. The result string should not be expected to remain -- the same across operations on the Connection. errorMessage :: Connection -> IO (Maybe ByteString) -- | Obtains the file descriptor number of the connection socket to the -- server. (This will not change during normal operation, but could -- change during connection setup or reset.) socket :: Connection -> IO (Maybe Fd) -- | Returns the process CPid of the backend server process handling -- this connection. -- -- The backend PID is useful for debugging purposes and for comparison to -- NOTIFY messages (which include the PID of the notifying backend -- process). Note that the PID belongs to a process executing on the -- database server host, not the local host! backendPID :: Connection -> IO CPid -- | Returns True if the connection authentication method required a -- password, but none was available. Returns False if not. -- -- This function can be applied after a failed connection attempt to -- decide whether to prompt the user for a password. connectionNeedsPassword :: Connection -> IO Bool -- | Returns True if the connection authentication method used a -- password. Returns False if not. -- -- This function can be applied after either a failed or successful -- connection attempt to detect whether the server demanded a password. connectionUsedPassword :: Connection -> IO Bool -- | Result encapsulates the result of a query (or more precisely, -- of a single SQL command --- a query string given to sendQuery -- can contain multiple commands and thus return multiple instances of -- Result. data Result -- | Submits a command to the server and waits for the result. -- -- Returns a Result or possibly Nothing. A Result -- will generally be returned except in out-of-memory conditions or -- serious errors such as inability to send the command to the server. If -- a Nothing is returned, it should be treated like a -- FatalError result. Use errorMessage to get more -- information about such errors. -- -- It is allowed to include multiple SQL commands (separated by -- semicolons) in the command string. Multiple queries sent in a single -- exec call are processed in a single transaction, unless there -- are explicit BEGIN/COMMIT commands included in the query string to -- divide it into multiple transactions. Note however that the returned -- Result structure describes only the result of the last command -- executed from the string. Should one of the commands fail, processing -- of the string stops with it and the returned Result describes -- the error condition. exec :: Connection -> ByteString -> IO (Maybe Result) data Format Text :: Format Binary :: Format newtype Oid Oid :: CUInt -> Oid invalidOid :: Oid -- | Submits a command to the server and waits for the result, with the -- ability to pass parameters separately from the SQL command text. -- -- execParams is like exec, but offers additional -- functionality: parameter values can be specified separately from the -- command string proper, and query results can be requested in either -- text or binary format. execParams is supported only in protocol -- 3.0 and later connections; it will fail when using protocol 2.0. -- -- The primary advantage of execParams over exec is that -- parameter values can be separated from the command string, thus -- avoiding the need for tedious and error-prone quoting and escaping. -- -- Unlike exec, execParams allows at most one SQL command -- in the given string. (There can be semicolons in it, but not more than -- one nonempty command.) This is a limitation of the underlying -- protocol, but has some usefulness as an extra defense against -- SQL-injection attacks. -- -- Tip: Specifying parameter types via OIDs is tedious, particularly if -- you prefer not to hard-wire particular OID values into your program. -- However, you can avoid doing so even in cases where the server by -- itself cannot determine the type of the parameter, or chooses a -- different type than you want. In the SQL command text, attach an -- explicit cast to the parameter symbol to show what data type you will -- send. For example: SELECT * FROM mytable WHERE x = $1::bigint; This -- forces parameter $1 to be treated as bigint, whereas by default it -- would be assigned the same type as x. Forcing the parameter type -- decision, either this way or by specifying a numeric type OID, is -- strongly recommended when sending parameter values in binary format, -- because binary format has less redundancy than text format and so -- there is less chance that the server will detect a type mismatch -- mistake for you. execParams :: Connection -> ByteString -> [Maybe (Oid, ByteString, Format)] -> Format -> IO (Maybe Result) -- | Submits a request to create a prepared statement with the given -- parameters, and waits for completion. -- -- prepare creates a prepared statement for later execution with -- execPrepared. This feature allows commands that will be used -- repeatedly to be parsed and planned just once, rather than each time -- they are executed. prepare is supported only in protocol 3.0 -- and later connections; it will fail when using protocol 2.0. -- -- The function creates a prepared statement named stmtName from the -- query string, which must contain a single SQL command. stmtName can be -- "" to create an unnamed statement, in which case any pre-existing -- unnamed statement is automatically replaced; otherwise it is an error -- if the statement name is already defined in the current session. If -- any parameters are used, they are referred to in the query as $1, $2, -- etc. paramTypes specifies, by Oid, the data types to be -- assigned to the parameter symbols. If paramTypes is Nothing, or -- any particular element in the array is zero, the server assigns a data -- type to the parameter symbol in the same way it would do for an -- untyped literal string. Also, the query can use parameter symbols with -- numbers higher than the length of paramTypes; data types will be -- inferred for these symbols as well. (See describePrepared for a -- means to find out what data types were inferred.) -- -- As with exec, the result is normally a Result whose -- contents indicate server-side success or failure. A Nothing -- result indicates out-of-memory or inability to send the command at -- all. Use errorMessage to get more information about such -- errors. -- -- Prepared statements for use with execPrepared can also be -- created by executing SQL PREPARE statements. (But prepare is -- more flexible since it does not require parameter types to be -- pre-specified.) Also, although there is no libpq function for deleting -- a prepared statement, the SQL DEALLOCATE statement can be used for -- that purpose. prepare :: Connection -> ByteString -> ByteString -> Maybe [Oid] -> IO (Maybe Result) -- | Sends a request to execute a prepared statement with given parameters, -- and waits for the result. -- -- execPrepared is like execParams, but the command to be -- executed is specified by naming a previously-prepared statement, -- instead of giving a query string. This feature allows commands that -- will be used repeatedly to be parsed and planned just once, rather -- than each time they are executed. The statement must have been -- prepared previously in the current session. execPrepared is -- supported only in protocol 3.0 and later connections; it will fail -- when using protocol 2.0. -- -- The parameters are identical to execParams, except that the -- name of a prepared statement is given instead of a query string, and -- the paramTypes parameter is not present (it is not needed since the -- prepared statement's parameter types were determined when it was -- created). execPrepared :: Connection -> ByteString -> [Maybe (ByteString, Format)] -> Format -> IO (Maybe Result) -- | Submits a request to obtain information about the specified prepared -- statement, and waits for completion. -- -- describePrepared allows an application to obtain information -- about a previously prepared statement. describePrepared is -- supported only in protocol 3.0 and later connections; it will fail -- when using protocol 2.0. -- -- stmtName can be empty to reference the unnamed statement, otherwise it -- must be the name of an existing prepared statement. On success, a -- Result with status CommandOk is returned. The functions -- nparams and paramtype can be applied to this -- Result to obtain information about the parameters of the -- prepared statement, and the functions nfields, fname, -- ftype, etc provide information about the result columns (if -- any) of the statement. describePrepared :: Connection -> ByteString -> IO (Maybe Result) -- | Submits a request to obtain information about the specified portal, -- and waits for completion. -- -- describePortal allows an application to obtain information -- about a previously created portal. (libpq does not provide any direct -- access to portals, but you can use this function to inspect the -- properties of a cursor created with a DECLARE CURSOR SQL command.) -- describePortal is supported only in protocol 3.0 and later -- connections; it will fail when using protocol 2.0. -- -- portalName can be empty to reference the unnamed portal, otherwise it -- must be the name of an existing portal. On success, a Result -- with status CommandOk is returned. The functions -- nfields, fname, ftype, etc can be applied to the -- Result to obtain information about the result columns (if any) -- of the portal. describePortal :: Connection -> ByteString -> IO (Maybe Result) data ExecStatus -- | The string sent to the server was empty. EmptyQuery :: ExecStatus -- | Successful completion of a command returning no data. CommandOk :: ExecStatus -- | Successful completion of a command returning data (such as a SELECT or -- SHOW). TuplesOk :: ExecStatus -- | Copy Out (from server) data transfer started. CopyOut :: ExecStatus -- | Copy In (to server) data transfer started. CopyIn :: ExecStatus -- | The server's response was not understood. BadResponse :: ExecStatus -- | A nonfatal error (a notice or warning) occurred. NonfatalError :: ExecStatus -- | A fatal error occurred. FatalError :: ExecStatus -- | Returns the result status of the command. resultStatus :: Result -> IO ExecStatus -- | Converts the ExecStatus returned by resultStatus into a -- string describing the status code. The caller should not free the -- result. resStatus :: ExecStatus -> IO ByteString -- | Returns the error message most recently generated by an operation on -- the connection. resultErrorMessage :: Result -> IO (Maybe ByteString) data FieldCode -- | The severity; the field contents are ERROR, FATAL, or PANIC (in an -- error message), or WARNING, NOTICE, DEBUG, INFO, or LOG (in a notice -- message), or a localized translation of one of these. Always present. DiagSeverity :: FieldCode -- | The SQLSTATE code for the error. The SQLSTATE code identifies the type -- of error that has occurred; it can be used by front-end applications -- to perform specific operations (such as error handling) in response to -- a particular database error. For a list of the possible SQLSTATE -- codes, see Appendix A. This field is not localizable, and is always -- present. DiagSqlstate :: FieldCode -- | The primary human-readable error message (typically one line). Always -- present. DiagMessagePrimary :: FieldCode -- | Detail: an optional secondary error message carrying more detail about -- the problem. Might run to multiple lines. DiagMessageDetail :: FieldCode -- | Hint: an optional suggestion what to do about the problem. This is -- intended to differ from detail in that it offers advice (potentially -- inappropriate) rather than hard facts. Might run to multiple lines. DiagMessageHint :: FieldCode -- | A string containing a decimal integer indicating an error cursor -- position as an index into the original statement string. The first -- character has index 1, and positions are measured in characters not -- bytes. DiagStatementPosition :: FieldCode -- | This is defined the same as the DiagStatementPosition field, -- but it is used when the cursor position refers to an internally -- generated command rather than the one submitted by the client. The -- DiagInternalQuery field will always appear when this field -- appears. DiagInternalPosition :: FieldCode -- | The text of a failed internally-generated command. This could be, for -- example, a SQL query issued by a PL/pgSQL function. DiagInternalQuery :: FieldCode -- | An indication of the context in which the error occurred. Presently -- this includes a call stack traceback of active procedural language -- functions and internally-generated queries. The trace is one entry per -- line, most recent first. DiagContext :: FieldCode -- | The file name of the source-code location where the error was -- reported. DiagSourceFile :: FieldCode -- | The line number of the source-code location where the error was -- reported. DiagSourceLine :: FieldCode -- | The name of the source-code function reporting the error. DiagSourceFunction :: FieldCode -- | Returns an individual field of an error report. -- -- fieldcode is an error field identifier; see the symbols listed below. -- Nothing is returned if the PGresult is not an error or warning -- result, or does not include the specified field. Field values will -- normally not include a trailing newline. -- -- The client is responsible for formatting displayed information to meet -- its needs; in particular it should break long lines as needed. Newline -- characters appearing in the error message fields should be treated as -- paragraph breaks, not line breaks. -- -- Errors generated internally by libpq will have severity and primary -- message, but typically no other fields. Errors returned by a -- pre-3.0-protocol server will include severity and primary message, and -- sometimes a detail message, but no other fields. -- -- Note that error fields are only available from Result objects, -- not Connection objects; there is no errorField function. resultErrorField :: Result -> FieldCode -> IO (Maybe ByteString) -- | Frees the memory associated with a result. Note that using this -- function correctly is especially tricky; you need to ensure that no -- references to the result. This means no references to a value returned -- by getvalue, no references hiding inside an unevaluated thunk, -- etc. Improper use of this function is likely to cause a segfault. -- Also, the use of this function is not strictly necessary; the memory -- will get freed by the garbage collector when there are no more -- references to the result. unsafeFreeResult :: Result -> IO () -- | Returns the number of rows (tuples) in the query result. Because it -- returns an integer result, large result sets might overflow the return -- value on 32-bit operating systems. ntuples :: Result -> IO Row -- | Returns the number of columns (fields) in each row of the query -- result. nfields :: Result -> IO Column newtype Row Row :: CInt -> Row newtype Column Col :: CInt -> Column toRow :: Integral a => a -> Row toColumn :: Integral a => a -> Column -- | Returns the column name associated with the given Column -- number. Column numbers start at 0. fname :: Result -> Column -> IO (Maybe ByteString) -- | Returns the column number associated with the given column name. fnumber :: Result -> ByteString -> IO (Maybe Column) -- | Returns the OID of the table from which the given column was fetched. -- Column numbers start at 0. ftable :: Result -> Column -> IO Oid -- | Returns the column number (within its table) of the column making up -- the specified query result column. Query-result column numbers start -- at 0, but table columns have nonzero numbers. ftablecol :: Result -> Column -> IO Column -- | Returns the Format of the given column. Column numbers start at -- 0. fformat :: Result -> Column -> IO Format -- | Returns the data type associated with the given column number. The -- Oid returned is the internal OID number of the type. Column -- numbers start at 0. -- -- You can query the system table pg_type to obtain the names and -- properties of the various data types. The OIDs of the built-in data -- types are defined in the file srcincludecatalog/pg_type.h in -- the source tree. ftype :: Result -> Column -> IO Oid -- | Returns the type modifier of the column associated with the given -- column number. Column numbers start at 0. -- -- The interpretation of modifier values is type-specific; they typically -- indicate precision or size limits. The value -1 is used to indicate -- no information available. Most data types do not use modifiers, -- in which case the value is always -1. fmod :: Result -> Column -> IO Int -- | Returns the size in bytes of the column associated with the given -- column number. Column numbers start at 0. -- -- fsize returns the space allocated for this column in a database -- row, in other words the size of the server's internal representation -- of the data type. (Accordingly, it is not really very useful to -- clients.) A negative value indicates the data type is variable-length. fsize :: Result -> Column -> IO Int -- | Returns a single field value of one row of a PGresult. Row and column -- numbers start at 0. -- -- For convenience, this binding uses getisnull and -- getlength to help construct the result. -- -- Note: The ByteString returned holds a reference to the -- Result. As long as ByteString is live, the Result will not be garbage -- collected. getvalue' returns a copy of the data. getvalue :: Result -> Row -> Column -> IO (Maybe ByteString) -- | Returns a copy of a single field value of one row of a PGresult. Row -- and column numbers start at 0. -- -- For convenience, this binding uses getisnull and -- getlength to help construct the result. getvalue' :: Result -> Row -> Column -> IO (Maybe ByteString) -- | Tests a field for a null value. Row and column numbers start at 0. getisnull :: Result -> Row -> Column -> IO Bool -- | Returns the actual length of a field value in bytes. Row and column -- numbers start at 0. -- -- This is the actual data length for the particular data value, that is, -- the size of the object pointed to by getvalue. For text data -- format this is the same as strlen(). For binary format this is -- essential information. Note that one should not rely on fsize -- to obtain the actual data length. getlength :: Result -> Row -> Column -> IO Int -- | Returns the number of parameters of a prepared statement. -- -- This function is only useful when inspecting the result of -- PQdescribePrepared. For other types of queries it will return zero. nparams :: Result -> IO Int -- | Returns the data type of the indicated statement parameter. Parameter -- numbers start at 0. -- -- This function is only useful when inspecting the result of -- describePrepared. For other types of queries it will return -- zero. paramtype :: Result -> Int -> IO Oid -- | Returns the command status tag from the SQL command that generated the -- PGresult. -- -- Commonly this is just the name of the command, but it might include -- additional data such as the number of rows processed. cmdStatus :: Result -> IO (Maybe ByteString) -- | Returns the number of rows affected by the SQL command. -- -- This function returns a string containing the number of rows affected -- by the SQL statement that generated the Result. This function -- can only be used following the execution of a SELECT, CREATE TABLE AS, -- INSERT, UPDATE, DELETE, MOVE, FETCH, or COPY statement, or an EXECUTE -- of a prepared query that contains an INSERT, UPDATE, or DELETE -- statement. If the command that generated the Result was -- anything else, cmdTuples returns an empty string. cmdTuples :: Result -> IO (Maybe ByteString) -- | Returns the Oid of the inserted row, if the SQL command was an -- INSERT that inserted exactly one row into a table that has OIDs, or a -- EXECUTE of a prepared query containing a suitable INSERT statement. -- Otherwise, this function returns Nothing. This function will -- also return Nothing if the table affected by the INSERT -- statement does not contain OIDs. oidValue :: Result -> IO (Maybe Oid) -- | Escapes a string for use within an SQL command. This is useful when -- inserting data values as literal constants in SQL commands. Certain -- characters (such as quotes and backslashes) must be escaped to prevent -- them from being interpreted specially by the SQL parser. escapeStringConn :: Connection -> ByteString -> IO (Maybe ByteString) -- | Escapes binary data for use within an SQL command with the type bytea. -- As with escapeStringConn, this is only used when inserting data -- directly into an SQL command string. escapeByteaConn :: Connection -> ByteString -> IO (Maybe ByteString) -- | Converts a ByteString representation of binary data into -- binary data - the reverse of PQescapeByteaConn. This is -- needed when retrieving bytea data in text format, but not when -- retrieving it in binary format. -- -- The parameter points to a string such as might be returned by -- getvalue when applied to a bytea column. unescapeBytea -- converts this string representation into its binary representation. It -- returns a ByteString, or Nothing on error. -- -- This conversion is not exactly the inverse of escapeByteaConn, -- because the string is not expected to be escaped when received -- from getvalue. In particular this means there is no need for -- string quoting considerations, and so no need for a Connection -- parameter. unescapeBytea :: ByteString -> IO (Maybe ByteString) data CopyInResult -- | The data was sent. CopyInOk :: CopyInResult -- | An error occurred (use errorMessage to retrieve details). CopyInError :: CopyInResult -- | The data was not sent because the attempt would block (this case is -- only possible if the connection is in nonblocking mode) Wait for -- write-ready (e.g. by using threadWaitWrite on the -- socket) and try again. CopyInWouldBlock :: CopyInResult -- | Send raw COPY data to the server during the CopyIn -- state. putCopyData :: Connection -> ByteString -> IO CopyInResult -- | Send end-of-data indication to the server during the CopyIn -- state. -- --