duckdb-simple-0.1.1.1: Haskell FFI bindings for DuckDB
Safe HaskellSafe-Inferred
LanguageHaskell2010

Database.DuckDB.Simple

Description

The API mirrors the ergonomics of sqlite-simple while being backed by the DuckDB C API. It supports connection management, parameter binding, execution, and typed result decoding. See md for usage examples.

Synopsis

Connections

data Connection Source #

Tracks the lifetime of a DuckDB database and connection pair.

open :: FilePath -> IO Connection Source #

Open a DuckDB database located at the supplied path.

close :: Connection -> IO () Source #

Close a connection. The operation is idempotent.

withConnection :: FilePath -> (Connection -> IO a) -> IO a Source #

Run an action with a freshly opened connection, closing it afterwards.

Queries and statements

newtype Query Source #

Represents a textual SQL query with UTF-8 encoding semantics.

Constructors

Query 

Fields

  • fromQuery :: Text

    Extract the underlying textual representation of the query.

Instances

Instances details
IsString Query Source # 
Instance details

Defined in Database.DuckDB.Simple.Internal

Methods

fromString :: String -> Query #

Semigroup Query Source # 
Instance details

Defined in Database.DuckDB.Simple.Internal

Methods

(<>) :: Query -> Query -> Query #

sconcat :: NonEmpty Query -> Query #

stimes :: Integral b => b -> Query -> Query #

Show Query Source # 
Instance details

Defined in Database.DuckDB.Simple.Internal

Methods

showsPrec :: Int -> Query -> ShowS #

show :: Query -> String #

showList :: [Query] -> ShowS #

Eq Query Source # 
Instance details

Defined in Database.DuckDB.Simple.Internal

Methods

(==) :: Query -> Query -> Bool #

(/=) :: Query -> Query -> Bool #

Ord Query Source # 
Instance details

Defined in Database.DuckDB.Simple.Internal

Methods

compare :: Query -> Query -> Ordering #

(<) :: Query -> Query -> Bool #

(<=) :: Query -> Query -> Bool #

(>) :: Query -> Query -> Bool #

(>=) :: Query -> Query -> Bool #

max :: Query -> Query -> Query #

min :: Query -> Query -> Query #

data Statement Source #

Tracks the lifetime of a prepared statement.

openStatement :: Connection -> Query -> IO Statement Source #

Prepare a SQL statement for execution.

closeStatement :: Statement -> IO () Source #

Finalise a prepared statement. The operation is idempotent.

withStatement :: Connection -> Query -> (Statement -> IO a) -> IO a Source #

Run an action with a prepared statement, closing it afterwards.

clearStatementBindings :: Statement -> IO () Source #

Remove all parameter bindings associated with a prepared statement.

namedParameterIndex :: Statement -> Text -> IO (Maybe Int) Source #

Look up the 1-based index of a named placeholder.

columnCount :: Statement -> IO Int Source #

Retrieve the number of columns produced by the supplied prepared statement.

columnName :: Statement -> Int -> IO Text Source #

Look up the zero-based column name exposed by a prepared statement result.

executeStatement :: Statement -> IO Int Source #

Execute a prepared statement and return the number of affected rows. Resets any active result stream before running and raises a SqlError if DuckDB reports a failure.

execute :: ToRow q => Connection -> Query -> q -> IO Int Source #

Execute a query with positional parameters and return the affected row count.

executeMany :: ToRow q => Connection -> Query -> [q] -> IO Int Source #

Execute the same query multiple times with different parameter sets.

execute_ :: Connection -> Query -> IO Int Source #

Execute an ad-hoc query without parameters and return the affected row count.

bind :: Statement -> [FieldBinding] -> IO () Source #

Bind positional parameters to a prepared statement, replacing any previous bindings.

bindNamed :: Statement -> [NamedParam] -> IO () Source #

Bind named parameters to a prepared statement, preserving any positional bindings.

executeNamed :: Connection -> Query -> [NamedParam] -> IO Int Source #

Execute a query that uses named parameters.

queryNamed :: FromRow r => Connection -> Query -> [NamedParam] -> IO [r] Source #

Run a query that uses named parameters and decode all rows eagerly.

fold :: (FromRow row, ToRow params) => Connection -> Query -> params -> a -> (a -> row -> IO a) -> IO a Source #

Stream a parameterised query through an accumulator without loading all rows. Bind the supplied parameters, start a streaming result, and apply the step function row by row to produce a final accumulator value.

fold_ :: FromRow row => Connection -> Query -> a -> (a -> row -> IO a) -> IO a Source #

Stream a parameterless query through an accumulator without loading all rows.

foldNamed :: FromRow row => Connection -> Query -> [NamedParam] -> a -> (a -> row -> IO a) -> IO a Source #

Stream a query that uses named parameters through an accumulator.

withTransaction :: Connection -> IO a -> IO a Source #

Run an action inside a transaction.

query :: (ToRow q, FromRow r) => Connection -> Query -> q -> IO [r] Source #

Run a parameterised query and decode every resulting row eagerly.

queryWith :: ToRow q => RowParser r -> Connection -> Query -> q -> IO [r] Source #

Run a parameterised query with a custom row parser.

query_ :: FromRow r => Connection -> Query -> IO [r] Source #

Run a query without supplying parameters and decode all rows eagerly.

queryWith_ :: RowParser r -> Connection -> Query -> IO [r] Source #

Run a query without parameters using a custom row parser.

nextRow :: FromRow r => Statement -> IO (Maybe r) Source #

Fetch the next row from a streaming statement, stopping when no rows remain.

nextRowWith :: RowParser r -> Statement -> IO (Maybe r) Source #

Fetch the next row using a custom parser, returning Nothing once exhausted.

Errors and conversions

data SQLError Source #

Represents an error reported by DuckDB or by duckdb-simple itself.

data FormatError Source #

Raised when parameter formatting fails before a statement is executed.

Constructors

FormatError 

Fields

data ResultError Source #

Exception thrown if conversion from a SQL value to a Haskell value fails.

Constructors

Incompatible

The SQL and Haskell types are not compatible.

UnexpectedNull

A SQL NULL was encountered when the Haskell type did not permit it.

ConversionFailed

The SQL value could not be parsed, or could not be represented as a valid Haskell value, or an unexpected low-level error occurred (e.g. mismatch between metadata and actual data in a row).

type FieldParser a = Field -> Ok a Source #

Parser used by FromField instances and utilities such as fieldWith. The supplied Field contains column metadata and an already-decoded FieldValue; callers should return Ok on success or Errors (typically wrapping a ResultError) when the conversion fails.

class FromField a where Source #

Types that can be constructed from a DuckDB column.

Instances

Instances details
FromField Int16 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Int32 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Int64 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Int8 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Word16 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Word32 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Word64 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Word8 Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField ByteString Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField FieldValue Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Null Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Text Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Day Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField UTCTime Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField LocalTime Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField TimeOfDay Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField String Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Bool Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Double Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Float Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField Int Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

FromField a => FromField (Maybe a) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

class FromRow a where Source #

Types that can be constructed from database rows.

Minimal complete definition

Nothing

Methods

fromRow :: RowParser a Source #

default fromRow :: (Generic a, GFromRow (Rep a)) => RowParser a Source #

Instances

Instances details
FromRow () Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser () Source #

FromField a => FromRow (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (Only a) Source #

FromField a => FromRow [a] Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser [a] Source #

(FromRow a, FromRow b) => FromRow (a :. b) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a :. b) Source #

(FromField a, FromField b) => FromRow (a, b) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b) Source #

(FromField a, FromField b, FromField c) => FromRow (a, b, c) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c) Source #

(FromField a, FromField b, FromField c, FromField d) => FromRow (a, b, c, d) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d) Source #

(FromField a, FromField b, FromField c, FromField d, FromField e) => FromRow (a, b, c, d, e) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d, e) Source #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f) => FromRow (a, b, c, d, e, f) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d, e, f) Source #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g) => FromRow (a, b, c, d, e, f, g) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d, e, f, g) Source #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h) => FromRow (a, b, c, d, e, f, g, h) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d, e, f, g, h) Source #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i) => FromRow (a, b, c, d, e, f, g, h, i) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d, e, f, g, h, i) Source #

(FromField a, FromField b, FromField c, FromField d, FromField e, FromField f, FromField g, FromField h, FromField i, FromField j) => FromRow (a, b, c, d, e, f, g, h, i, j) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a, b, c, d, e, f, g, h, i, j) Source #

data RowParser a Source #

Parser used by FromRow implementations.

Instances

Instances details
Alternative RowParser Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

empty :: RowParser a #

(<|>) :: RowParser a -> RowParser a -> RowParser a #

some :: RowParser a -> RowParser [a] #

many :: RowParser a -> RowParser [a] #

Applicative RowParser Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

pure :: a -> RowParser a #

(<*>) :: RowParser (a -> b) -> RowParser a -> RowParser b #

liftA2 :: (a -> b -> c) -> RowParser a -> RowParser b -> RowParser c #

(*>) :: RowParser a -> RowParser b -> RowParser b #

(<*) :: RowParser a -> RowParser b -> RowParser a #

Functor RowParser Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fmap :: (a -> b) -> RowParser a -> RowParser b #

(<$) :: a -> RowParser b -> RowParser a #

Monad RowParser Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

(>>=) :: RowParser a -> (a -> RowParser b) -> RowParser b #

(>>) :: RowParser a -> RowParser b -> RowParser b #

return :: a -> RowParser a #

MonadPlus RowParser Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

mzero :: RowParser a #

mplus :: RowParser a -> RowParser a -> RowParser a #

field :: FromField a => RowParser a Source #

Pull the next field and parse it using its FromField instance.

fieldWith :: FieldParser a -> RowParser a Source #

Pull the next field using the provided FieldParser.

numFieldsRemaining :: RowParser Int Source #

Report how many columns remain unread in the current row.

class ToField a where Source #

Types that can be used as positional parameters.

Methods

toField :: a -> FieldBinding Source #

Instances

Instances details
ToField Int16 Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Int32 Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Int64 Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Word16 Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Word32 Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Word64 Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField ByteString Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Null Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Text Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Day Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField UTCTime Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField LocalTime Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField TimeOfDay Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField String Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Bool Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Double Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Float Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Int Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField Word Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

ToField a => ToField (Maybe a) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

class ToRow a where Source #

Types that can be transformed into parameter bindings.

Minimal complete definition

Nothing

Methods

toRow :: a -> [FieldBinding] Source #

default toRow :: (Generic a, GToRow (Rep a)) => a -> [FieldBinding] Source #

Instances

Instances details
ToRow () Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: () -> [FieldBinding] Source #

ToField a => ToRow (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: Only a -> [FieldBinding] Source #

ToField a => ToRow [a] Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: [a] -> [FieldBinding] Source #

(ToRow a, ToRow b) => ToRow (a :. b) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: (a :. b) -> [FieldBinding] Source #

(ToField a, ToField b) => ToRow (a, b) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: (a, b) -> [FieldBinding] Source #

(ToField a, ToField b, ToField c) => ToRow (a, b, c) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: (a, b, c) -> [FieldBinding] Source #

(ToField a, ToField b, ToField c, ToField d) => ToRow (a, b, c, d) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: (a, b, c, d) -> [FieldBinding] Source #

(ToField a, ToField b, ToField c, ToField d, ToField e) => ToRow (a, b, c, d, e) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: (a, b, c, d, e) -> [FieldBinding] Source #

data FieldBinding Source #

Encapsulates the action required to bind a single positional parameter, together with a textual description used in diagnostics.

data NamedParam where Source #

Represents a named parameter binding using the := operator.

Constructors

(:=) :: ToField a => Text -> a -> NamedParam infixr 3 

data Null Source #

Placeholder representing SQL NULL.

Constructors

Null 

Instances

Instances details
Read Null Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Show Null Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

showsPrec :: Int -> Null -> ShowS #

show :: Null -> String #

showList :: [Null] -> ShowS #

FromField Null Source # 
Instance details

Defined in Database.DuckDB.Simple.FromField

ToField Null Source # 
Instance details

Defined in Database.DuckDB.Simple.ToField

Eq Null Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

(==) :: Null -> Null -> Bool #

(/=) :: Null -> Null -> Bool #

Ord Null Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

compare :: Null -> Null -> Ordering #

(<) :: Null -> Null -> Bool #

(<=) :: Null -> Null -> Bool #

(>) :: Null -> Null -> Bool #

(>=) :: Null -> Null -> Bool #

max :: Null -> Null -> Null #

min :: Null -> Null -> Null #

newtype Only a Source #

Wrapper used for single-column rows.

Constructors

Only 

Fields

Instances

Instances details
Read a => Read (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Show a => Show (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

showsPrec :: Int -> Only a -> ShowS #

show :: Only a -> String #

showList :: [Only a] -> ShowS #

FromField a => FromRow (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (Only a) Source #

ToField a => ToRow (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: Only a -> [FieldBinding] Source #

Eq a => Eq (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

(==) :: Only a -> Only a -> Bool #

(/=) :: Only a -> Only a -> Bool #

Ord a => Ord (Only a) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

compare :: Only a -> Only a -> Ordering #

(<) :: Only a -> Only a -> Bool #

(<=) :: Only a -> Only a -> Bool #

(>) :: Only a -> Only a -> Bool #

(>=) :: Only a -> Only a -> Bool #

max :: Only a -> Only a -> Only a #

min :: Only a -> Only a -> Only a #

data h :. t infixr 3 Source #

Convenience product type for combining FromRow/ToRow instances.

Constructors

h :. t infixr 3 

Instances

Instances details
(Read h, Read t) => Read (h :. t) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

readsPrec :: Int -> ReadS (h :. t) #

readList :: ReadS [h :. t] #

readPrec :: ReadPrec (h :. t) #

readListPrec :: ReadPrec [h :. t] #

(Show h, Show t) => Show (h :. t) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

showsPrec :: Int -> (h :. t) -> ShowS #

show :: (h :. t) -> String #

showList :: [h :. t] -> ShowS #

(FromRow a, FromRow b) => FromRow (a :. b) Source # 
Instance details

Defined in Database.DuckDB.Simple.FromRow

Methods

fromRow :: RowParser (a :. b) Source #

(ToRow a, ToRow b) => ToRow (a :. b) Source # 
Instance details

Defined in Database.DuckDB.Simple.ToRow

Methods

toRow :: (a :. b) -> [FieldBinding] Source #

(Eq h, Eq t) => Eq (h :. t) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

(==) :: (h :. t) -> (h :. t) -> Bool #

(/=) :: (h :. t) -> (h :. t) -> Bool #

(Ord h, Ord t) => Ord (h :. t) Source # 
Instance details

Defined in Database.DuckDB.Simple.Types

Methods

compare :: (h :. t) -> (h :. t) -> Ordering #

(<) :: (h :. t) -> (h :. t) -> Bool #

(<=) :: (h :. t) -> (h :. t) -> Bool #

(>) :: (h :. t) -> (h :. t) -> Bool #

(>=) :: (h :. t) -> (h :. t) -> Bool #

max :: (h :. t) -> (h :. t) -> h :. t #

min :: (h :. t) -> (h :. t) -> h :. t #

User-defined scalar functions

class Function a Source #

Typeclass describing Haskell functions that can be exposed to DuckDB.

Minimal complete definition

argumentTypes, returnType, isVolatile, applyFunction

Instances

Instances details
FunctionResult a => Function a Source # 
Instance details

Defined in Database.DuckDB.Simple.Function

Methods

argumentTypes :: Proxy a -> [DuckDBType]

returnType :: Proxy a -> ScalarType

isVolatile :: Proxy a -> Bool

applyFunction :: [Field] -> a -> IO ScalarValue

FunctionResult a => Function (IO a) Source # 
Instance details

Defined in Database.DuckDB.Simple.Function

Methods

argumentTypes :: Proxy (IO a) -> [DuckDBType]

returnType :: Proxy (IO a) -> ScalarType

isVolatile :: Proxy (IO a) -> Bool

applyFunction :: [Field] -> IO a -> IO ScalarValue

(FromField a, FunctionArg a, Function r) => Function (a -> r) Source # 
Instance details

Defined in Database.DuckDB.Simple.Function

Methods

argumentTypes :: Proxy (a -> r) -> [DuckDBType]

returnType :: Proxy (a -> r) -> ScalarType

isVolatile :: Proxy (a -> r) -> Bool

applyFunction :: [Field] -> (a -> r) -> IO ScalarValue

createFunction :: forall f. Function f => Connection -> Text -> f -> IO () Source #

Register a Haskell function under the supplied name.

deleteFunction :: Connection -> Text -> IO () Source #

Drop a previously registered scalar function by issuing a DROP FUNCTION statement.