-- 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.2.2 -- | 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 () -- | Memory bracket around connect and close. withConnection :: MonadUnliftIO m => Text -> (Connection -> m a) -> m a -- | 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 [[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 -- | SQL null value. NullValue :: 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 -> [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 Control.DeepSeq.NFData Database.ODBC.Internal.Value instance GHC.Exception.Exception Database.ODBC.Internal.ODBCException -- | 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 => 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 => [Value] -> Either String r 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 [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.Internal.TimeOfDay.TimeOfDay instance Database.ODBC.Conversion.FromRow Data.Time.LocalTime.Internal.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) 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.Internal.TimeOfDay.TimeOfDay instance Database.ODBC.Conversion.FromValue Data.Time.LocalTime.Internal.LocalTime.LocalTime -- | 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 -- | SQL null value. NullValue :: 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 -- | Do not use for writing your queries. Use when writing instances of -- ToSql if you want to efficiently include a Text value. -- Subject to SQL injection risk, so be careful. rawUnescapedText :: Text -> 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 => 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 => [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 -- | The LocalTime type has more accuracy than the datetime -- type and the datetime2 types can hold; so you will lose -- precision when you insert. Use this type to indicate that you are -- aware of the precision loss and fine with it. -- -- -- https://docs.microsoft.com/en-us/sql/t-sql/data-types/datetime2-transact-sql?view=sql-server-2017 -- -- If you are using smalldatetime in SQL Server, use instead the -- Smalldatetime type. newtype Datetime2 Datetime2 :: LocalTime -> Datetime2 [unDatetime2] :: Datetime2 -> LocalTime -- | Use this type to discard higher precision than seconds in your -- LocalTime values for a schema using smalldatetime. -- -- -- https://docs.microsoft.com/en-us/sql/t-sql/data-types/smalldatetime-transact-sql?view=sql-server-2017 newtype Smalldatetime Smalldatetime :: LocalTime -> Smalldatetime [unSmalldatetime] :: Smalldatetime -> LocalTime -- | 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 Database.ODBC.Conversion.FromValue Database.ODBC.SQLServer.Smalldatetime instance Data.Data.Data Database.ODBC.SQLServer.Smalldatetime instance GHC.Generics.Generic Database.ODBC.SQLServer.Smalldatetime instance GHC.Show.Show Database.ODBC.SQLServer.Smalldatetime instance GHC.Classes.Ord Database.ODBC.SQLServer.Smalldatetime instance GHC.Classes.Eq Database.ODBC.SQLServer.Smalldatetime instance Database.ODBC.Conversion.FromValue Database.ODBC.SQLServer.Datetime2 instance Data.Data.Data Database.ODBC.SQLServer.Datetime2 instance GHC.Generics.Generic Database.ODBC.SQLServer.Datetime2 instance GHC.Show.Show Database.ODBC.SQLServer.Datetime2 instance GHC.Classes.Ord Database.ODBC.SQLServer.Datetime2 instance GHC.Classes.Eq Database.ODBC.SQLServer.Datetime2 instance GHC.Base.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 Database.ODBC.SQLServer.ToSql a => Database.ODBC.SQLServer.ToSql (GHC.Base.Maybe a) 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.Internal.TimeOfDay.TimeOfDay instance (TypeError ...) => Database.ODBC.SQLServer.ToSql Data.Time.LocalTime.Internal.LocalTime.LocalTime instance (TypeError ...) => Database.ODBC.SQLServer.ToSql Data.Time.Clock.Internal.UTCTime.UTCTime instance Database.ODBC.SQLServer.ToSql Database.ODBC.SQLServer.Datetime2 instance Database.ODBC.SQLServer.ToSql Database.ODBC.SQLServer.Smalldatetime 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 module Database.ODBC.TH -- | Allows SQL parameters interpolation from a SQL query. Only -- quoteExp is implemented because this quote can only be used at -- the expression level. -- --
-- select_some_stuff :: Text -> Int -> Query -- select_some_stuff name age = [sql|select * from user where age = $age AND name = $name|] ---- -- In this case, sql quote will generate the code below: -- --
-- "select * from user where age = " <> toSql age <> " AND name = " <> toSql name --sql :: QuasiQuoter -- | Loads the content of a SQL query file and allows SQL parameters -- interpolation from it. -- --
-- select_some_stuff :: Text -> Int -> Query -- select_some_stuff name age = $(sqlFile "path/to/my/sql/file.sql") ---- -- See sql for more details. sqlFile :: FilePath -> Q Exp partsParser :: Parser [Part] data Part SqlPart :: !String -> Part ParamName :: !String -> Part instance GHC.Classes.Eq Database.ODBC.TH.Part instance GHC.Show.Show Database.ODBC.TH.Part