_M8-      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,None68B8The Database.SQLite3 and Database.SQLite3.Directa modules use higher-level representations of some types than those used in the FFI signatures (Database.SQLite3.Bindings/). This typeclass helps with the conversions. 'http://www.sqlite.org/c3ref/c_blob.html (http://www.sqlite.org/c3ref/c_abort.html @Index of an argument to a custom function. Indices start from 0. 3Number of arguments of a user defined SQL function.  )http://www.sqlite.org/c3ref/c_static.htmlPtr CDestructor = sqlite3_destructor_type"Number of columns in a result set.@Index of a column in a result set. Column indices start from 0.OIndex of a parameter in a parameterized query. Parameter indices start from 1.When a query is Zd, SQLite allocates an array indexed from 1 to the highest parameter index. For example: X>Right stmt <- prepare conn "SELECT ?1, ?5, ?3, ?" >bindParameterCount stmt ParamIndex 61This will allocate an array indexed from 1 to 6 (?{ takes the highest preceding index plus one). The array is initialized with null values. When you bind a parameter with 2, it assigns a new value to one of these indices.See  -http://www.sqlite.org/lang_expr.html#varparamS for the syntax of parameter placeholders, and how parameter indices are assigned. (https://www.sqlite.org/c3ref/backup.htmlCBackup = sqlite3_backup &https://www.sqlite.org/c3ref/blob.htmlCBlob =  sqlite3_blob (http://www.sqlite.org/c3ref/context.htmlCContext = sqlite3_context &http://www.sqlite.org/c3ref/value.htmlCValue =  sqlite3_value %http://www.sqlite.org/c3ref/stmt.html CStatement =  sqlite3_stmt (http://www.sqlite.org/c3ref/sqlite3.html CDatabase = sqlite3&sqlite3_step() has finished executing'sqlite3_step() has another row ready('File opened that is not a database file)*2nd parameter to sqlite3_bind out of range*Auxiliary database format error+Authorization denied,&Uses OS features not supported on host-Library used incorrectly.Data type mismatch/!Abort due to constraint violation0!String or BLOB exceeds size limit1The database schema changed2Database is empty3Database lock protocol error4 Unable to open the database file5)Insertion failed because database is full6Unknown opcode in sqlite3_file_control()7$The database disk image is malformed8$Some kind of disk I/O error occurred9Operation terminated by sqlite3_interrupt():$Attempt to write a readonly database;A malloc() failed<!A table in the database is locked=The database file is locked>#Callback routine requested an abort?Access permission denied@Internal logic error in SQLiteASQL error or missing databaseBSuccessful resultC6Tells SQLite3 to make its own private copy of the dataEDTells SQLite3 that the defined custom SQL function is deterministic.FNote that this is a partial function. If the error code is invalid, or perhaps introduced in a newer version of SQLite but this library has not been updated to support it, the result is undefined.To be clear, if F fails, it is undefined behavior#, not an exception you can handle.Therefore, do not use direct-sqlite with a different version of SQLite than the one bundled (currently, 3.7.13). If you do, ensure that F and H are still exhaustive.H+Note that this is a partial function. See F for more information.-EThis just shows the underlying integer, without the data constructor..EThis just shows the underlying integer, without the data constructor./EThis just shows the underlying integer, without the data constructor.0EThis just shows the underlying integer, without the data constructor.1BLimit min/max bounds to fit into SQLite's native parameter ranges.2EThis just shows the underlying integer, without the data constructor.3BLimit min/max bounds to fit into SQLite's native parameter ranges.4EThis just shows the underlying integer, without the data constructor.Y  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI56789:-;./01234J  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJFG%BA@?>=<;:9876543210/.-,+*)('&HI$#"!   CD E,  $#"! %BA@?>=<;:9876543210/.-,+*)('&CDEFGHI56789:-;./01234None&V ,https://www.sqlite.org/c3ref/blob_write.htmlW +https://www.sqlite.org/c3ref/blob_read.htmlX ,https://www.sqlite.org/c3ref/blob_bytes.htmlY -https://www.sqlite.org/c3ref/blob_reopen.htmlZ ,https://www.sqlite.org/c3ref/blob_close.html[ +https://www.sqlite.org/c3ref/blob_open.html] *https://www.sqlite.org/c3ref/wal_hook.html^ 2http://sqlite.org/c3ref/enable_load_extension.html_ !http://sqlite.org/c3ref/free.htmla 1http://www.sqlite.org/c3ref/create_collation.htmlp 2http://www.sqlite.org/c3ref/aggregate_context.htmlq 2http://www.sqlite.org/c3ref/context_db_handle.htmlr *http://www.sqlite.org/c3ref/user_data.htmlv ,http://sqlite.org/c3ref/create_function.htmlw .http://www.sqlite.org/c3ref/total_changes.htmlx (http://www.sqlite.org/c3ref/changes.htmly 2http://www.sqlite.org/c3ref/last_insert_rowid.html ,http://www.sqlite.org/c3ref/column_name.html -http://www.sqlite.org/c3ref/column_count.html 5http://www.sqlite.org/c3ref/bind_parameter_index.html 4http://www.sqlite.org/c3ref/bind_parameter_name.html 5http://www.sqlite.org/c3ref/bind_parameter_count.htmlThis returns the index of the largest (rightmost) parameter, which is not necessarily the number of parameters. If numbered parameters like ?5* are used, there may be gaps in the list. $http://www.sqlite.org/c3ref/sql.html /http://www.sqlite.org/c3ref/clear_bindings.html?A look at the source reveals that this function always returns  SQLITE_OK. )http://www.sqlite.org/c3ref/finalize.htmlWarning: If the most recent = call failed, this will return the corresponding error code. &http://www.sqlite.org/c3ref/reset.htmlWarning: If the most recent = call failed, this will return the corresponding error code. %http://www.sqlite.org/c3ref/step.html *http://www.sqlite.org/c3ref/db_handle.html (http://www.sqlite.org/c3ref/prepare.html6If the query contains no SQL statements, this returns  SQLITE_OK and sets the <  to null.DA couple important things to know about callbacks from Haskell code:5If the callback throws an exception, apparently, the  whole program is terminated.Remember to call =A when you are done with the wrapper, to avoid leaking memory. 5https://www.sqlite.org/c3ref/enable_shared_cache.html /http://www.sqlite.org/c3ref/get_autocommit.html (http://www.sqlite.org/c3ref/profile.html *http://www.sqlite.org/c3ref/interrupt.html (http://www.sqlite.org/c3ref/errcode.html (http://www.sqlite.org/c3ref/errcode.html &http://www.sqlite.org/c3ref/close.html %http://www.sqlite.org/c3ref/open.htmlThis sets the 'Ptr CDatabase' even on failure.SJKLMNORUTF-8 rendering of the SQL statement text as the statement first begins executingPNNumber of columns, which is the number of elements in the following arrays.*Array of column values, as returned by |3. Null values are represented as null pointers.Array of column names*If the callback returns non-zero, then  returns  SQLITE_ABORT (>).QRSTUDestination database handleDestination database nameSource database handleSource database nameVWXYZ[ Database name Table name Column name Row ROWIDFlags'OUT: Blob handle, will be NULL on error\]^_`aName of the collation Text encoding User databcdefghijklmnopqrstuvName of the functionNumber of arguments1Preferred text encoding (also used to pass flags) User datawxyz{|}~Warning: If this pointer is NULL<, this will bind a null value, rather than an empty text.[Length, in bytes. If this is negative, the value is treated as a NUL-terminated string.$Index of the SQL parameter to be setValue to bind to the parameter.Warning: If this pointer is NULL<, this will bind a null value, rather than an empty blob.-Length, in bytes. This must not be negative.SQL statement, UTF-8 encodedMaximum length of the SQL statement, in bytes. If this is negative, then the SQL statement is treated as a NUL-terminated string..OUT: Statement handle. This must not be null.&OUT: Pointer to unused portion of zSqlSQL statement, UTF-8 encoded.Optional callback function called for each rowContext passed to the callbackOUT: Error message string.Optional callback function called for each rowContext passed to the callback;Returns context pointer from previously registered trace  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~SOP~}{z|yxwvNMLutsrqponmlkjihgfedcbaK`_^]J\[ZYXWVUTSRQSJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~None+M.&A handle for an online backup process.6The type of blob handles used for incremental blob I/O'The arguments of a custom SQL function.7The context in which a custom SQL function is executed.A >5 containing UTF8-encoded text with no NUL characters.#All pages were successfully copied.(There are still more pages to be copied.?Like unsafeUseAsCStringLenF, but if the string is empty, never pass the callback a null pointer. %http://www.sqlite.org/c3ref/open.html &http://www.sqlite.org/c3ref/close.html *http://www.sqlite.org/c3ref/interrupt.html#Cause any pending operation on the  handle to stop at its earliest opportunity. This simply sets a flag and returns immediately. It does not wait for the pending operation to finish.You'll need to compile with  -threaded# for this to do any good. Without  -threaded), FFI calls block the whole RTS, meaning & would never run at the same time as . (http://www.sqlite.org/c3ref/errcode.html (http://www.sqlite.org/c3ref/errcode.htmlLike ., but invoke the callback for each result row.=If the callback throws an exception, it will be rethrown by . (http://www.sqlite.org/c3ref/profile.htmlNEnable/disable tracing of SQL execution. Tracing can be disabled by setting @ as the logger callback.pWarning: If the logger callback throws an exception, your whole program will crash. Enable only for debugging! /http://www.sqlite.org/c3ref/get_autocommit.htmlReturn A- if the connection is in autocommit mode, or B if a transaction started with BEGIN is still active.NBe warned that some errors roll back the transaction automatically, and that ROLLBACK7 will throw an error if no transaction is active. Use  to avoid such an error:  autocommit <-  conn  (not autocommit) $   conn "ROLLBACK"  5https://www.sqlite.org/c3ref/enable_shared_cache.html:Enable or disable shared cache for all future connections. (http://www.sqlite.org/c3ref/prepare.html7If the query contains no SQL statements, this returns C @. *http://www.sqlite.org/c3ref/db_handle.html %http://www.sqlite.org/c3ref/step.html &http://www.sqlite.org/c3ref/reset.htmlWarning:If the most recent ; call failed, this will return the corresponding error.BThis does not reset the bindings on a prepared statement. Use  to do that. )http://www.sqlite.org/c3ref/finalize.htmlWarning: If the most recent 8 call failed, this will return the corresponding error. $http://www.sqlite.org/c3ref/sql.htmlEReturn a copy of the original SQL text used to compile the statement. /http://www.sqlite.org/c3ref/clear_bindings.html5Set all parameters in the prepared statement to null. 5http://www.sqlite.org/c3ref/bind_parameter_count.htmlThis returns the index of the largest (rightmost) parameter. Note that this is not necessarily the number of parameters. If numbered parameters like ?5) are used, there may be gaps in the list.See  for more information. 4http://www.sqlite.org/c3ref/bind_parameter_name.html 5http://www.sqlite.org/c3ref/bind_parameter_index.html -http://www.sqlite.org/c3ref/column_count.html ,http://www.sqlite.org/c3ref/column_name.html 2http://www.sqlite.org/c3ref/last_insert_rowid.html (http://www.sqlite.org/c3ref/changes.htmlVReturn the number of rows that were changed, inserted, or deleted by the most recent INSERT, DELETE, or UPDATE statement. .http://www.sqlite.org/c3ref/total_changes.html1Return the total number of row changes caused by INSERT, DELETE, or UPDATE statements since the  was opened. ,http://sqlite.org/c3ref/create_function.htmlOCreate a custom SQL function or redefine the behavior of an existing function.Like . except that it creates an aggregate function.-Delete an SQL function (scalar or aggregate). 3https://www.sqlite.org/c3ref/context_db_handle.html 1http://www.sqlite.org/c3ref/create_collation.htmlDelete a collation. 6http://www.sqlite.org/c3ref/enable_load_extension.html$Enable or disable extension loading. +https://www.sqlite.org/c3ref/blob_open.html Open a blob for incremental I/O. ,https://www.sqlite.org/c3ref/blob_close.html -https://www.sqlite.org/c3ref/blob_reopen.html ,https://www.sqlite.org/c3ref/blob_bytes.html +https://www.sqlite.org/c3ref/blob_read.html ,https://www.sqlite.org/c3ref/blob_write.htmlD fromString = Utf8 . E . FmGHsNumber of columns, which is the number of items in the following lists. This will be the same for every row.>List of column names. This will be the same for every row.&List of column values, as returned by .IJKL?MNOPQRName of the function.Number of arguments. @< means that the function accepts any number of arguments.Is the function deterministic?Implementation of the function.Name of the function.Number of arguments.Initial aggregate state./Process one row and update the aggregate state.vCalled after all rows have been processed. Can be used to construct the returned value from the aggregate state.STUVWName of the collation.Comparison function.0The symbolic name of the database (e.g. "main").The table name.The column name.The ROWID of the row.Open the blob for read-write.Number of bytes to read.Offset within the blob.Offset within the blob.Destination database handleDestination database nameSource database handleSource database nameXDY  !"#$%&'()*+,-./0123456789:;<=>?@AB$#"! %BA@?>=<;:9876543210/.-,+*)('& aGHIJKL?MNOPQRSTUVWXDYNone+!/Exception thrown when SQLite3 reports an error.Hdirect-sqlite may throw other types of exceptions if you misuse the API.Error code returned by API callText describing the error3Indicates what action produced this error, e.g. exec "SELECT * FROM foo"ZLike  decodeUtf8;, but substitute a custom error message if decoding fails. %http://www.sqlite.org/c3ref/open.html &http://www.sqlite.org/c3ref/close.htmlMake it possible to interrupt the given database operation with an asynchronous exception. This only works if the program is compiled with base >= 4.3 and  -threaded.OIt works by running the callback in a forked thread. If interrupted, it uses  to try to stop the operation.<Execute zero or more SQL statements delimited by semicolons.Like , but print result rows to  .gThis is mainly for convenience when experimenting in GHCi. The output format may change in the future.Like ., but invoke the callback for each result row. (http://www.sqlite.org/c3ref/prepare.htmlUnlike , G only executes the first statement, and ignores subsequent statements.5If the query string contains no SQL statements, this [s. (http://www.sqlite.org/c3ref/prepare.htmlPIt can help to avoid redundant Utf8 to Text conversion if you already have Utf85If the query string contains no SQL statements, this [s.  %http://www.sqlite.org/c3ref/step.html  &http://www.sqlite.org/c3ref/reset.htmlNote that in the C API,  sqlite3_reset+ returns an error code if the most recent  sqlite3_step@ indicated an error. We do not replicate that behavior here.   never throws an exception.  )http://www.sqlite.org/c3ref/finalize.htmlLike  ,   never throws an exception.  4http://www.sqlite.org/c3ref/bind_parameter_name.html#Return the N-th SQL parameter name.@Named parameters are returned as-is. E.g. ":v" is returned as  Just ":v"2. Unnamed parameters, however, are converted to Nothing.1Note that the parameter index starts at 1, not 0.  ,http://www.sqlite.org/c3ref/column_name.htmlRReturn the name of a result column. If the column index is out of range, return @."If the index is not between 1 and  inclusive, this fails with )\. Otherwise, it succeeds, even if the query skips this index by using numbered parameters.Example: $> stmt <- prepare conn "SELECT ?1, ?3, ?5" > bindSQLData stmt 1 (SQLInteger 1) > bindSQLData stmt 2 (SQLInteger 2) > bindSQLData stmt 6 (SQLInteger 6) *** Exception: SQLite3 returned ErrorRange while attempting to perform bind int64. > step stmt >> columns stmt [SQLInteger 1,SQLNull,SQLNull]GConvenience function for binding values to all parameters. This will [0 if the list has the wrong number of parameters.LConvenience function for binding named values to all parameters. This will [O if the list has the wrong number of parameters or if an unknown name is used.Example: jstmt <- prepare conn "SELECT :foo + :bar" bindNamed stmt [(":foo", SQLInteger 1), (":bar", SQLInteger 2)] This will throw a \T if the datum contains invalid UTF-8. If this behavior is undesirable, you can use  from Database.SQLite3.Direct', which does not perform conversion to ].This avoids extra API calls using the list of column types. If passed types do not correspond to the actual types, the values will be converted according to the rules at  ,http://www.sqlite.org/c3ref/column_blob.htmlS. If the list contains more items that number of columns, the result is undefined. ,http://sqlite.org/c3ref/create_function.htmlCreate a custom SQL function or redefine the behavior of an existing function. If the function is deterministic, i.e. if it always returns the same result given the same input, you can set the boolean flag to let sqlite" perform additional optimizations.Like . except that it creates an aggregate function.-Delete an SQL function (scalar or aggregate)." 1http://www.sqlite.org/c3ref/create_collation.html#Delete a collation.$ +https://www.sqlite.org/c3ref/blob_open.html Open a blob for incremental I/O.% ,https://www.sqlite.org/c3ref/blob_close.html& -https://www.sqlite.org/c3ref/blob_reopen.html' +https://www.sqlite.org/c3ref/blob_read.html) ,https://www.sqlite.org/c3ref/blob_write.htmlGsNumber of columns, which is the number of items in the following lists. This will be the same for every row.>List of column names. This will be the same for every row.&List of column values, as returned by .^_`aZbcdefgh     iName of the function.Number of arguments. @< means that the function accepts any number of arguments.Is the function deterministic?Implementation of the function.Name of the function.Number of arguments.Initial aggregate state./Process one row and update the aggregate state.vCalled after all rows have been processed. Can be used to construct the returned value from the aggregate state. !"Name of the collation.Comparison function.#$0The symbolic name of the database (e.g. "main").The table name.The column name.The ROWID of the row.Open the blob for read-write.%&'Number of bytes to read.Offset within the blob.()Offset within the blob.*Destination database handleDestination database nameSource database handleSource database name+,jk  !"#$%&'()*+,-./0123456789:;<=>?@AB      !"#$%&'()*+,      !"#$%&'()*+,$#"! %BA@?>=<;:9876543210/.-,+*)('& ;^a`_Zbcdefgh     i !"#$%&'()*+,jkl   !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        !"#$%&$'())*+,-./0123456789:;<=$>?$@ABCDEFGHIJKLMNOPdirect-sqlite-2.3.16Database.SQLite3.Bindings.TypesDatabase.SQLite3.BindingsDatabase.SQLite3.DirectDatabase.SQLite3prepare bindSQLData Control.Monadwhenexec System.IOstdoutFFITypetoFFIfromFFI CColumnTypeCError CArgCountArgIndexArgCount CDestructor CNumBytes CColumnCount CColumnIndex CParamIndex ColumnCount ColumnIndex ParamIndexCBackupCBlobCContextCValue CStatement CDatabase ColumnType NullColumn BlobColumn TextColumn FloatColumn IntegerColumnError ErrorDoneErrorRowErrorNotADatabase ErrorRange ErrorFormatErrorAuthorizationErrorNoLargeFileSupport ErrorMisuse ErrorMismatchErrorConstraint ErrorTooBig ErrorSchema ErrorEmpty ErrorProtocolErrorCan'tOpen ErrorFull ErrorNotFound ErrorCorruptErrorIOErrorInterrupt ErrorReadOnly ErrorNoMemory ErrorLocked ErrorBusy ErrorAbortErrorPermission ErrorInternal ErrorErrorErrorOKc_SQLITE_TRANSIENT c_SQLITE_UTF8c_SQLITE_DETERMINISTIC decodeError encodeErrordecodeColumnTypeencodeColumnTypeCWalHookCCompare CFuncDestroy CFuncFinalCFuncCTraceCallback CExecCallbackc_sqlite3_backup_pagecountc_sqlite3_backup_remainingc_sqlite3_backup_stepc_sqlite3_backup_finishc_sqlite3_backup_initc_sqlite3_blob_writec_sqlite3_blob_readc_sqlite3_blob_bytesc_sqlite3_blob_reopenc_sqlite3_blob_closec_sqlite3_blob_open mkCWalHookc_sqlite3_wal_hookc_sqlite3_enable_load_extensionc_sqlite3_free mkCComparec_sqlite3_create_collation_v2c_sqlite3_result_errorc_sqlite3_result_valuec_sqlite3_result_doublec_sqlite3_result_int64c_sqlite3_result_textc_sqlite3_result_zeroblobc_sqlite3_result_blobc_sqlite3_result_nullc_sqlite3_value_doublec_sqlite3_value_int64c_sqlite3_value_textc_sqlite3_value_blobc_sqlite3_value_bytesc_sqlite3_value_typec_sqlite3_aggregate_contextc_sqlite3_context_db_handlec_sqlite3_user_datamkCFuncDestroy mkCFuncFinalmkCFuncc_sqlite3_create_function_v2c_sqlite3_total_changesc_sqlite3_changesc_sqlite3_last_insert_rowidc_sqlite3_column_doublec_sqlite3_column_int64c_sqlite3_column_textc_sqlite3_column_blobc_sqlite3_column_bytesc_sqlite3_column_typec_sqlite3_bind_nullc_sqlite3_bind_int64c_sqlite3_bind_doublec_sqlite3_bind_textc_sqlite3_bind_zeroblobc_sqlite3_bind_blobc_sqlite3_column_namec_sqlite3_column_countc_sqlite3_bind_parameter_indexc_sqlite3_bind_parameter_namec_sqlite3_bind_parameter_count c_sqlite3_sqlc_sqlite3_clear_bindingsc_sqlite3_finalizec_sqlite3_resetc_sqlite3_stepc_sqlite3_db_handlec_sqlite3_prepare_v2mkCTraceCallbackmkCExecCallbackc_sqlite3_execc_sqlite3_enable_shared_cachec_sqlite3_get_autocommitc_sqlite3_tracec_sqlite3_interruptc_sqlite3_errmsgc_sqlite3_errcodec_sqlite3_closec_sqlite3_open ExecCallbackBackupBlobFuncArgs FuncContextUtf8BackupStepResult BackupDoneBackupOK StepResultDoneRow StatementDatabaseopenclose interrupterrcodeerrmsgexecWithCallbacksetTrace getAutoCommitsetSharedCacheEnabledgetStatementDatabasestepresetfinalize statementSql clearBindingsbindParameterCountbindParameterNamebindParameterIndex columnCount columnName bindInt64 bindDoublebindTextbindBlob bindZeroBlobbindNull columnType columnInt64 columnDouble columnText columnBloblastInsertRowIdchanges totalChangescreateFunctioncreateAggregatedeleteFunction funcArgCount funcArgType funcArgInt64 funcArgDouble funcArgText funcArgBlobfuncResultInt64funcResultDoublefuncResultTextfuncResultBlobfuncResultZeroBlobfuncResultNullgetFuncContextDatabasecreateCollationdeleteCollationsetLoadExtensionEnabledblobOpen blobClose blobReopen blobBytesblobRead blobReadBuf blobWrite backupInit backupFinish backupStepbackupRemainingbackupPagecountSQLErrorsqlErrorsqlErrorDetailssqlErrorContextSQLDataSQLNullSQLBlobSQLTextSQLFloat SQLInteger interruptibly execPrint prepareUtf8bindIntbind bindNamedcolumncolumns typedColumnsfuncResultSQLData$fShowCArgCount$fShowArgCount$fShowCColumnIndex$fShowCParamIndex$fBoundedColumnIndex$fShowColumnIndex$fBoundedParamIndex$fShowParamIndex$fFFITypeArgCountCArgCount$fFFITypeColumnTypeCColumnType$fFFITypeErrorCError $fFFITypeColumnIndexCColumnIndex$fFFITypeParamIndexCParamIndex$fBoundedCArgCount$fBoundedArgCountbaseGHC.PtrPtr Foreign.PtrfreeHaskellFunPtrbytestring-0.10.4.0Data.ByteString.Internal ByteStringunsafeUseAsCStringLenNoNull Data.MaybeNothingghc-prim GHC.TypesTrueFalse Data.EitherRight$fIsStringUtf8 text-1.2.1.3Data.Text.Encoding encodeUtf8 Data.Textpack CFuncPtrsResultpackUtf8packCStringLen packUtf8ArraywrapNullablePtrtoResult toResultM toStepResulttoBackupStepResultdestroyCFuncPtrscatchAsResultError maybeArgCountextractFuncArgdestroyCComparedestroyCComparePtr $fMonoidUtf8 $fShowUtf8fromUtf8GHC.BasefailData.Text.Encoding.Error DecodeErrorData.Text.InternalText DetailSource DetailMessageDetailStatementDetailDatabase fromUtf8'toUtf8renderDetailSource throwSQLError checkError checkErrorMsg appendShow typedColumn$fExceptionSQLError$fShowSQLError