-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Haskell binding to the ODBC API, aimed at SQL Server driver
--
-- Haskell binding to the ODBC API. This has been tested against the
-- Microsoft SQL Server ODBC drivers. Its test suite runs on OS X,
-- Windows and Linux.
@package odbc
@version 0.0.4
-- | ODBC database API.
--
-- WARNING: This API is meant as a base for more high-level APIs, such as
-- the one provided in Database.ODBC.SQLServer. The commands here
-- are all vulerable to SQL injection attacks. See
-- https://en.wikipedia.org/wiki/SQL_injection for more
-- information.
--
-- Don't use this module if you don't know what you're doing.
module Database.ODBC.Internal
-- | Connect using the given connection string.
connect :: MonadIO m => Text -> m Connection
-- | Close the connection. Further use of the Connection will throw
-- an exception. Double closes also throw an exception to avoid
-- architectural mistakes.
close :: MonadIO m => Connection -> m ()
-- | Connection to a database. Use of this connection is thread-safe. When
-- garbage collected, the connection will be closed if not done already.
data Connection
-- | Execute a statement on the database.
exec :: MonadIO m => Connection -> Text -> m ()
-- | Query and return a list of rows.
query :: MonadIO m => Connection -> Text -> m [[Maybe Value]]
-- | A value used for input/output with the database.
data Value
-- | A Unicode text value.
TextValue :: !Text -> Value
-- | A vector of bytes. It might be binary, or a string, but we don't know
-- the encoding. Use decodeUtf8 if the string is UTF-8 encoded, or
-- decodeUtf16LE if it is UTF-16 encoded. For other encodings, see
-- the Haskell text-icu package. For raw binary, see BinaryValue.
ByteStringValue :: !ByteString -> Value
-- | Only a vector of bytes. Intended for binary data, not for ASCII text.
BinaryValue :: !Binary -> Value
-- | A simple boolean.
BoolValue :: !Bool -> Value
-- | Floating point values that fit in a Double.
DoubleValue :: !Double -> Value
-- | Floating point values that fit in a Float.
FloatValue :: !Float -> Value
-- | Integer values that fit in an Int.
IntValue :: !Int -> Value
-- | Values that fit in one byte.
ByteValue :: !Word8 -> Value
-- | Date (year, month, day) values.
DayValue :: !Day -> Value
-- | Time of day (hh, mm, ss + fractional) values.
TimeOfDayValue :: !TimeOfDay -> Value
-- | Local date and time.
LocalTimeValue :: !LocalTime -> Value
-- | A simple newtype wrapper around the ByteString type to use when
-- you want to mean the binary type of SQL, and render to binary
-- literals e.g. 0xFFEF01.
--
-- The ByteString type is already mapped to the non-Unicode
-- text type.
newtype Binary
Binary :: ByteString -> Binary
[unBinary] :: Binary -> ByteString
-- | Stream results like a fold with the option to stop at any time.
stream :: (MonadIO m, MonadUnliftIO m) => Connection -> Text -> (state -> [Maybe Value] -> m (Step state)) -> state -> m state
-- | A step in the streaming process for the stream function.
data Step a
-- | Stop with this value.
Stop :: !a -> Step a
-- | Continue with this value.
Continue :: !a -> Step a
-- | A database exception. Any of the functions in this library may throw
-- this exception type.
data ODBCException
-- | An ODBC operation failed with the given return code.
UnsuccessfulReturnCode :: !String -> !Int16 -> !String -> ODBCException
-- | Allocating an ODBC resource failed.
AllocationReturnedNull :: !String -> ODBCException
-- | An unsupported/unknown data type was returned from the ODBC driver.
UnknownDataType :: !String -> !Int16 -> ODBCException
-- | You tried to use the database connection after it was closed.
DatabaseIsClosed :: !String -> ODBCException
-- | You attempted to close the database twice.
DatabaseAlreadyClosed :: ODBCException
-- | No total length information for column.
NoTotalInformation :: !Int -> ODBCException
-- | There was a general error retrieving data. String will contain the
-- reason why.
DataRetrievalError :: !String -> ODBCException
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLWCHAR
instance GHC.Classes.Eq Database.ODBC.Internal.SQLWCHAR
instance GHC.Show.Show Database.ODBC.Internal.SQLWCHAR
instance GHC.Real.Real Database.ODBC.Internal.SQLUINTEGER
instance GHC.Classes.Ord Database.ODBC.Internal.SQLUINTEGER
instance GHC.Enum.Enum Database.ODBC.Internal.SQLUINTEGER
instance GHC.Real.Integral Database.ODBC.Internal.SQLUINTEGER
instance GHC.Num.Num Database.ODBC.Internal.SQLUINTEGER
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLUINTEGER
instance GHC.Classes.Eq Database.ODBC.Internal.SQLUINTEGER
instance GHC.Show.Show Database.ODBC.Internal.SQLUINTEGER
instance GHC.Num.Num Database.ODBC.Internal.SQLINTEGER
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLINTEGER
instance GHC.Classes.Eq Database.ODBC.Internal.SQLINTEGER
instance GHC.Show.Show Database.ODBC.Internal.SQLINTEGER
instance GHC.Show.Show Database.ODBC.Internal.Column
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLULEN
instance GHC.Classes.Eq Database.ODBC.Internal.SQLULEN
instance GHC.Show.Show Database.ODBC.Internal.SQLULEN
instance GHC.Num.Num Database.ODBC.Internal.SQLLEN
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLLEN
instance GHC.Classes.Eq Database.ODBC.Internal.SQLLEN
instance GHC.Show.Show Database.ODBC.Internal.SQLLEN
instance GHC.Real.Real Database.ODBC.Internal.SQLSMALLINT
instance GHC.Classes.Ord Database.ODBC.Internal.SQLSMALLINT
instance GHC.Enum.Enum Database.ODBC.Internal.SQLSMALLINT
instance GHC.Real.Integral Database.ODBC.Internal.SQLSMALLINT
instance GHC.Num.Num Database.ODBC.Internal.SQLSMALLINT
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLSMALLINT
instance GHC.Classes.Eq Database.ODBC.Internal.SQLSMALLINT
instance GHC.Show.Show Database.ODBC.Internal.SQLSMALLINT
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLCHAR
instance GHC.Classes.Eq Database.ODBC.Internal.SQLCHAR
instance GHC.Show.Show Database.ODBC.Internal.SQLCHAR
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLUCHAR
instance GHC.Classes.Eq Database.ODBC.Internal.SQLUCHAR
instance GHC.Show.Show Database.ODBC.Internal.SQLUCHAR
instance GHC.Classes.Ord Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Num.Num Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Real.Real Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Enum.Enum Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Real.Integral Database.ODBC.Internal.SQLUSMALLINT
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Classes.Eq Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Show.Show Database.ODBC.Internal.SQLUSMALLINT
instance GHC.Classes.Eq Database.ODBC.Internal.RETCODE
instance GHC.Show.Show Database.ODBC.Internal.RETCODE
instance GHC.Classes.Ord Database.ODBC.Internal.SQLCTYPE
instance GHC.Num.Num Database.ODBC.Internal.SQLCTYPE
instance GHC.Real.Real Database.ODBC.Internal.SQLCTYPE
instance GHC.Enum.Enum Database.ODBC.Internal.SQLCTYPE
instance GHC.Real.Integral Database.ODBC.Internal.SQLCTYPE
instance Foreign.Storable.Storable Database.ODBC.Internal.SQLCTYPE
instance GHC.Classes.Eq Database.ODBC.Internal.SQLCTYPE
instance GHC.Show.Show Database.ODBC.Internal.SQLCTYPE
instance GHC.Show.Show a => GHC.Show.Show (Database.ODBC.Internal.Step a)
instance Data.Data.Data Database.ODBC.Internal.Value
instance GHC.Generics.Generic Database.ODBC.Internal.Value
instance GHC.Classes.Ord Database.ODBC.Internal.Value
instance GHC.Show.Show Database.ODBC.Internal.Value
instance GHC.Classes.Eq Database.ODBC.Internal.Value
instance Control.DeepSeq.NFData Database.ODBC.Internal.Binary
instance GHC.Generics.Generic Database.ODBC.Internal.Binary
instance Data.Data.Data Database.ODBC.Internal.Binary
instance GHC.Classes.Ord Database.ODBC.Internal.Binary
instance GHC.Classes.Eq Database.ODBC.Internal.Binary
instance GHC.Show.Show Database.ODBC.Internal.Binary
instance GHC.Classes.Eq Database.ODBC.Internal.ODBCException
instance GHC.Show.Show Database.ODBC.Internal.ODBCException
instance GHC.Exception.Exception Database.ODBC.Internal.ODBCException
instance Control.DeepSeq.NFData Database.ODBC.Internal.Value
-- | Conversion conveniences.
module Database.ODBC.Conversion
-- | Convert from a Value to a regular Haskell value.
class FromValue a
-- | The String is used for a helpful error message.
fromValue :: FromValue a => Maybe Value -> Either String a
-- | For producing rows from a list of column values.
--
-- You can get a row of a single type like Text or a list e.g.
-- [Maybe Value] if you don't know what you're dealing with, or
-- a tuple e.g. (Text, Int, Bool).
class FromRow r
fromRow :: FromRow r => [Maybe Value] -> Either String r
instance Database.ODBC.Conversion.FromValue a => Database.ODBC.Conversion.FromValue (GHC.Base.Maybe a)
instance Database.ODBC.Conversion.FromValue Database.ODBC.Internal.Value
instance Database.ODBC.Conversion.FromValue Data.Text.Internal.Text
instance Database.ODBC.Conversion.FromValue Data.Text.Internal.Lazy.Text
instance Database.ODBC.Conversion.FromValue Data.ByteString.Internal.ByteString
instance Database.ODBC.Conversion.FromValue Database.ODBC.Internal.Binary
instance Database.ODBC.Conversion.FromValue Data.ByteString.Lazy.Internal.ByteString
instance Database.ODBC.Conversion.FromValue GHC.Types.Int
instance Database.ODBC.Conversion.FromValue GHC.Types.Double
instance Database.ODBC.Conversion.FromValue GHC.Types.Float
instance Database.ODBC.Conversion.FromValue GHC.Word.Word8
instance Database.ODBC.Conversion.FromValue GHC.Types.Bool
instance Database.ODBC.Conversion.FromValue Data.Time.Calendar.Days.Day
instance Database.ODBC.Conversion.FromValue Data.Time.LocalTime.TimeOfDay.TimeOfDay
instance Database.ODBC.Conversion.FromValue Data.Time.LocalTime.LocalTime.LocalTime
instance Database.ODBC.Conversion.FromValue v => Database.ODBC.Conversion.FromRow (GHC.Base.Maybe v)
instance Database.ODBC.Conversion.FromValue v => Database.ODBC.Conversion.FromRow (Data.Functor.Identity.Identity v)
instance Database.ODBC.Conversion.FromRow [GHC.Base.Maybe Database.ODBC.Internal.Value]
instance Database.ODBC.Conversion.FromRow Database.ODBC.Internal.Value
instance Database.ODBC.Conversion.FromRow Data.Text.Internal.Text
instance Database.ODBC.Conversion.FromRow Data.Text.Internal.Lazy.Text
instance Database.ODBC.Conversion.FromRow Data.ByteString.Internal.ByteString
instance Database.ODBC.Conversion.FromRow Database.ODBC.Internal.Binary
instance Database.ODBC.Conversion.FromRow Data.ByteString.Lazy.Internal.ByteString
instance Database.ODBC.Conversion.FromRow GHC.Types.Int
instance Database.ODBC.Conversion.FromRow Data.Time.Calendar.Days.Day
instance Database.ODBC.Conversion.FromRow Data.Time.LocalTime.TimeOfDay.TimeOfDay
instance Database.ODBC.Conversion.FromRow Data.Time.LocalTime.LocalTime.LocalTime
instance Database.ODBC.Conversion.FromRow GHC.Types.Double
instance Database.ODBC.Conversion.FromRow GHC.Types.Float
instance Database.ODBC.Conversion.FromRow GHC.Word.Word8
instance Database.ODBC.Conversion.FromRow GHC.Types.Bool
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b) => Database.ODBC.Conversion.FromRow (a, b)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c) => Database.ODBC.Conversion.FromRow (a, b, c)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d) => Database.ODBC.Conversion.FromRow (a, b, c, d)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e) => Database.ODBC.Conversion.FromRow (a, b, c, d, e)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s, Database.ODBC.Conversion.FromValue t) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s, Database.ODBC.Conversion.FromValue t, Database.ODBC.Conversion.FromValue u) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s, Database.ODBC.Conversion.FromValue t, Database.ODBC.Conversion.FromValue u, Database.ODBC.Conversion.FromValue v) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s, Database.ODBC.Conversion.FromValue t, Database.ODBC.Conversion.FromValue u, Database.ODBC.Conversion.FromValue v, Database.ODBC.Conversion.FromValue w) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s, Database.ODBC.Conversion.FromValue t, Database.ODBC.Conversion.FromValue u, Database.ODBC.Conversion.FromValue v, Database.ODBC.Conversion.FromValue w, Database.ODBC.Conversion.FromValue x) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x)
instance (Database.ODBC.Conversion.FromValue a, Database.ODBC.Conversion.FromValue b, Database.ODBC.Conversion.FromValue c, Database.ODBC.Conversion.FromValue d, Database.ODBC.Conversion.FromValue e, Database.ODBC.Conversion.FromValue f, Database.ODBC.Conversion.FromValue g, Database.ODBC.Conversion.FromValue h, Database.ODBC.Conversion.FromValue i, Database.ODBC.Conversion.FromValue j, Database.ODBC.Conversion.FromValue k, Database.ODBC.Conversion.FromValue l, Database.ODBC.Conversion.FromValue m, Database.ODBC.Conversion.FromValue n, Database.ODBC.Conversion.FromValue o, Database.ODBC.Conversion.FromValue p, Database.ODBC.Conversion.FromValue q, Database.ODBC.Conversion.FromValue r, Database.ODBC.Conversion.FromValue s, Database.ODBC.Conversion.FromValue t, Database.ODBC.Conversion.FromValue u, Database.ODBC.Conversion.FromValue v, Database.ODBC.Conversion.FromValue w, Database.ODBC.Conversion.FromValue x, Database.ODBC.Conversion.FromValue y) => Database.ODBC.Conversion.FromRow (a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y)
-- | SQL Server database API.
module Database.ODBC.SQLServer
-- | Connect using the given connection string.
connect :: MonadIO m => Text -> m Connection
-- | Close the connection. Further use of the Connection will throw
-- an exception. Double closes also throw an exception to avoid
-- architectural mistakes.
close :: MonadIO m => Connection -> m ()
-- | Connection to a database. Use of this connection is thread-safe. When
-- garbage collected, the connection will be closed if not done already.
data Connection
-- | Execute a statement on the database.
exec :: MonadIO m => Connection -> Query -> m ()
-- | Query and return a list of rows.
--
-- The row type is inferred based on use or type-signature.
-- Examples might be (Int, Text, Bool) for concrete types, or
-- [Maybe Value] if you don't know ahead of time how many
-- columns you have and their type. See the top section for example use.
query :: (MonadIO m, FromRow row) => Connection -> Query -> m [row]
-- | A value used for input/output with the database.
data Value
-- | A Unicode text value.
TextValue :: !Text -> Value
-- | A vector of bytes. It might be binary, or a string, but we don't know
-- the encoding. Use decodeUtf8 if the string is UTF-8 encoded, or
-- decodeUtf16LE if it is UTF-16 encoded. For other encodings, see
-- the Haskell text-icu package. For raw binary, see BinaryValue.
ByteStringValue :: !ByteString -> Value
-- | Only a vector of bytes. Intended for binary data, not for ASCII text.
BinaryValue :: !Binary -> Value
-- | A simple boolean.
BoolValue :: !Bool -> Value
-- | Floating point values that fit in a Double.
DoubleValue :: !Double -> Value
-- | Floating point values that fit in a Float.
FloatValue :: !Float -> Value
-- | Integer values that fit in an Int.
IntValue :: !Int -> Value
-- | Values that fit in one byte.
ByteValue :: !Word8 -> Value
-- | Date (year, month, day) values.
DayValue :: !Day -> Value
-- | Time of day (hh, mm, ss + fractional) values.
TimeOfDayValue :: !TimeOfDay -> Value
-- | Local date and time.
LocalTimeValue :: !LocalTime -> Value
-- | A query builder. Use toSql to convert Haskell values to this
-- type safely.
--
-- It's an instance of IsString, so you can use
-- OverloadedStrings to produce plain text values e.g.
-- "SELECT 123".
--
-- It's an instance of Monoid, so you can append fragments
-- together with <> e.g. "SELECT * FROM x WHERE id = "
-- <> toSql 123.
--
-- This is meant as a bare-minimum of safety and convenience.
data Query
-- | Handy class for converting values to a query safely.
--
-- For example: query c ("SELECT * FROM demo WHERE id > " <>
-- toSql 123)
--
-- WARNING: Note that if you insert a value like an Int (64-bit)
-- into a column that is int (32-bit), then be sure that your
-- number fits inside an int. Try using an Int32 instead
-- to be sure.
class ToSql a
toSql :: ToSql a => a -> Query
-- | Convert from a Value to a regular Haskell value.
class FromValue a
-- | The String is used for a helpful error message.
fromValue :: FromValue a => Maybe Value -> Either String a
-- | For producing rows from a list of column values.
--
-- You can get a row of a single type like Text or a list e.g.
-- [Maybe Value] if you don't know what you're dealing with, or
-- a tuple e.g. (Text, Int, Bool).
class FromRow r
fromRow :: FromRow r => [Maybe Value] -> Either String r
-- | A simple newtype wrapper around the ByteString type to use when
-- you want to mean the binary type of SQL, and render to binary
-- literals e.g. 0xFFEF01.
--
-- The ByteString type is already mapped to the non-Unicode
-- text type.
newtype Binary
Binary :: ByteString -> Binary
[unBinary] :: Binary -> ByteString
-- | Stream results like a fold with the option to stop at any time.
stream :: (MonadUnliftIO m, FromRow row) => Connection -> Query -> (state -> row -> m (Step state)) -> state -> m state
-- | A step in the streaming process for the stream function.
data Step a
-- | Stop with this value.
Stop :: !a -> Step a
-- | Continue with this value.
Continue :: !a -> Step a
-- | A database exception. Any of the functions in this library may throw
-- this exception type.
data ODBCException
-- | An ODBC operation failed with the given return code.
UnsuccessfulReturnCode :: !String -> !Int16 -> !String -> ODBCException
-- | Allocating an ODBC resource failed.
AllocationReturnedNull :: !String -> ODBCException
-- | An unsupported/unknown data type was returned from the ODBC driver.
UnknownDataType :: !String -> !Int16 -> ODBCException
-- | You tried to use the database connection after it was closed.
DatabaseIsClosed :: !String -> ODBCException
-- | You attempted to close the database twice.
DatabaseAlreadyClosed :: ODBCException
-- | No total length information for column.
NoTotalInformation :: !Int -> ODBCException
-- | There was a general error retrieving data. String will contain the
-- reason why.
DataRetrievalError :: !String -> ODBCException
-- | Render a query to a plain text string. Useful for debugging and
-- testing.
renderQuery :: Query -> Text
instance Data.Semigroup.Semigroup Database.ODBC.SQLServer.Query
instance Data.Data.Data Database.ODBC.SQLServer.Query
instance GHC.Generics.Generic Database.ODBC.SQLServer.Query
instance GHC.Classes.Ord Database.ODBC.SQLServer.Query
instance GHC.Show.Show Database.ODBC.SQLServer.Query
instance GHC.Classes.Eq Database.ODBC.SQLServer.Query
instance GHC.Base.Monoid Database.ODBC.SQLServer.Query
instance Data.Data.Data Database.ODBC.SQLServer.Part
instance GHC.Generics.Generic Database.ODBC.SQLServer.Part
instance GHC.Classes.Ord Database.ODBC.SQLServer.Part
instance GHC.Show.Show Database.ODBC.SQLServer.Part
instance GHC.Classes.Eq Database.ODBC.SQLServer.Part
instance Control.DeepSeq.NFData Database.ODBC.SQLServer.Query
instance Data.String.IsString Database.ODBC.SQLServer.Query
instance Control.DeepSeq.NFData Database.ODBC.SQLServer.Part
instance Data.String.IsString Database.ODBC.SQLServer.Part
instance Database.ODBC.SQLServer.ToSql Database.ODBC.Internal.Value
instance Database.ODBC.SQLServer.ToSql Data.Text.Internal.Text
instance Database.ODBC.SQLServer.ToSql Data.Text.Internal.Lazy.Text
instance Database.ODBC.SQLServer.ToSql Data.ByteString.Internal.ByteString
instance Database.ODBC.SQLServer.ToSql Database.ODBC.Internal.Binary
instance Database.ODBC.SQLServer.ToSql Data.ByteString.Lazy.Internal.ByteString
instance Database.ODBC.SQLServer.ToSql GHC.Types.Bool
instance Database.ODBC.SQLServer.ToSql GHC.Types.Double
instance Database.ODBC.SQLServer.ToSql GHC.Types.Float
instance Database.ODBC.SQLServer.ToSql GHC.Types.Int
instance Database.ODBC.SQLServer.ToSql GHC.Int.Int16
instance Database.ODBC.SQLServer.ToSql GHC.Int.Int32
instance Database.ODBC.SQLServer.ToSql GHC.Word.Word8
instance Database.ODBC.SQLServer.ToSql Data.Time.Calendar.Days.Day
instance Database.ODBC.SQLServer.ToSql Data.Time.LocalTime.TimeOfDay.TimeOfDay
instance Database.ODBC.SQLServer.ToSql Data.Time.LocalTime.LocalTime.LocalTime