Copyright | (c) Kristof Bastiaensen 2020 |
---|---|
License | BSD-3 |
Maintainer | kristof@resonata.be |
Stability | unstable |
Portability | ghc |
Safe Haskell | None |
Language | Haskell2010 |
Synopsis
- data Query a
- data Command
- select :: Selector a -> QueryClauses -> Query a
- mergeSelect :: Query b -> (a -> b -> c) -> Selector a -> Query c
- replaceSelect :: Selector a -> Query b -> Query a
- data QueryClauses
- from :: QueryBuilder -> QueryClauses
- innerJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses
- leftJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses
- rightJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses
- outerJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses
- emptyJoins :: QueryClauses
- where_ :: [QueryBuilder] -> QueryClauses
- emptyWhere :: QueryClauses
- groupBy_ :: [QueryBuilder] -> QueryClauses
- having :: [QueryBuilder] -> QueryClauses
- emptyHaving :: QueryClauses
- data QueryOrdering
- orderBy :: [QueryOrdering] -> QueryClauses
- limit :: Int -> QueryClauses
- limitOffset :: Int -> Int -> QueryClauses
- data Selector a
- as :: QueryBuilder -> QueryBuilder -> QueryBuilder
- sel :: FromSql a => QueryBuilder -> Selector a
- intSel :: (Show a, Bounded a, Integral a) => QueryBuilder -> Selector a
- integerSel :: QueryBuilder -> Selector Integer
- doubleSel :: QueryBuilder -> Selector Double
- floatSel :: QueryBuilder -> Selector Float
- scientificSel :: QueryBuilder -> Selector Scientific
- localTimeSel :: QueryBuilder -> Selector LocalTime
- timeOfDaySel :: QueryBuilder -> Selector TimeOfDay
- diffTimeSel :: QueryBuilder -> Selector DiffTime
- daySel :: QueryBuilder -> Selector Day
- byteStringSel :: QueryBuilder -> Selector ByteString
- textSel :: QueryBuilder -> Selector Text
- values :: [QueryBuilder] -> Selector [MySQLValue]
- values_ :: [QueryBuilder] -> Selector ()
- subQuery :: ToQueryBuilder a => a -> QueryBuilder
- arg :: ToSql a => a -> QueryBuilder
- fun :: Text -> [QueryBuilder] -> QueryBuilder
- op :: Text -> QueryBuilder -> QueryBuilder -> QueryBuilder
- (>.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (<.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (>=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (<=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (+.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (-.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (*.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (/.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (++.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (/=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (&&.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- (||.) :: QueryBuilder -> QueryBuilder -> QueryBuilder
- abs_ :: QueryBuilder -> QueryBuilder
- negate_ :: QueryBuilder -> QueryBuilder
- signum_ :: QueryBuilder -> QueryBuilder
- sum_ :: QueryBuilder -> QueryBuilder
- rawSql :: Text -> QueryBuilder
- substr :: QueryBuilder -> QueryBuilder -> QueryBuilder -> QueryBuilder
- in_ :: QueryBuilder -> [QueryBuilder] -> QueryBuilder
- data Insertor a
- insertValues :: QueryBuilder -> Insertor a -> [a] -> Command
- insertSelect :: QueryBuilder -> [QueryBuilder] -> [QueryBuilder] -> QueryClauses -> Command
- insertData :: (Generic a, Generic b, InsertGeneric (Rep a ()) (Rep b ())) => a -> Insertor b
- skipInsert :: Insertor a
- into :: ToSql b => (a -> b) -> Text -> Insertor a
- type Getter s a = (a -> Const a a) -> s -> Const a s
- lensInto :: ToSql b => Getter a b -> Text -> Insertor a
- insertOne :: ToSql a => Text -> Insertor a
- class ToSql a
- renderStmt :: ToQueryBuilder a => a -> ByteString
- renderPreparedStmt :: ToQueryBuilder a => a -> (ByteString, [MySQLValue])
- data SQLError
- data QueryBuilder
- class ToQueryBuilder a where
- toQueryBuilder :: a -> QueryBuilder
- class FromSql a
- executeQuery :: MySQLConn -> Query a -> IO [a]
- executeCommand :: MySQLConn -> Command -> IO OK
Querying
Instances
ToQueryBuilder (Query a) Source # | |
Defined in Database.MySQL.Hasqlator toQueryBuilder :: Query a -> QueryBuilder Source # |
Instances
ToQueryBuilder Command Source # | |
Defined in Database.MySQL.Hasqlator toQueryBuilder :: Command -> QueryBuilder Source # |
Query Clauses
data QueryClauses Source #
Instances
Semigroup QueryClauses Source # | |
Defined in Database.MySQL.Hasqlator (<>) :: QueryClauses -> QueryClauses -> QueryClauses # sconcat :: NonEmpty QueryClauses -> QueryClauses # stimes :: Integral b => b -> QueryClauses -> QueryClauses # | |
Monoid QueryClauses Source # | |
Defined in Database.MySQL.Hasqlator mempty :: QueryClauses # mappend :: QueryClauses -> QueryClauses -> QueryClauses # mconcat :: [QueryClauses] -> QueryClauses # |
from :: QueryBuilder -> QueryClauses Source #
innerJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses Source #
leftJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses Source #
rightJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses Source #
outerJoin :: [QueryBuilder] -> [QueryBuilder] -> QueryClauses Source #
where_ :: [QueryBuilder] -> QueryClauses Source #
groupBy_ :: [QueryBuilder] -> QueryClauses Source #
having :: [QueryBuilder] -> QueryClauses Source #
data QueryOrdering Source #
Instances
ToQueryBuilder QueryOrdering Source # | |
Defined in Database.MySQL.Hasqlator |
orderBy :: [QueryOrdering] -> QueryClauses Source #
limit :: Int -> QueryClauses Source #
limitOffset :: Int -> Int -> QueryClauses Source #
Selectors
Selectors contain the target fields or expressions in a SQL
SELECT statement, and perform the conversion to haskell. Selectors
are instances of Applicative
, so they can return the desired
haskell type.
Instances
Functor Selector Source # | |
Applicative Selector Source # | |
FromSql a => IsString (Selector a) Source # | |
Defined in Database.MySQL.Hasqlator fromString :: String -> Selector a # | |
Semigroup a => Semigroup (Selector a) Source # | |
Monoid a => Monoid (Selector a) Source # | |
ToQueryBuilder (Query database (Selector a)) Source # | |
Defined in Database.MySQL.Hasqlator.Typed toQueryBuilder :: Query database (Selector a) -> QueryBuilder Source # |
as :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
combinator for aliasing columns.
polymorphic selector
sel :: FromSql a => QueryBuilder -> Selector a Source #
The polymorphic selector. The return type is determined by type inference.
specialised selectors
The following are specialised versions of sel
. Using these
may make refactoring easier, for example accidently swapping
and sel
"age"
would not give a type error,
while sel
"name"intSel "age"
and textSel "name"
most likely would.
integerSel :: QueryBuilder -> Selector Integer Source #
Un unbounded integer field, either a bounded integer (TINYINT, etc...) or DECIMAL in the database. Will throw a type error if the stored value is actually fractional.
WARNING: this function could potentially create huge integers with DECIMAL, if the exponent is large, even fillup the space and crash your program! Only use this on trusted inputs, or use Scientific instead.
scientificSel :: QueryBuilder -> Selector Scientific Source #
A DECIMAL or NUMERIC field.
localTimeSel :: QueryBuilder -> Selector LocalTime Source #
a DATETIME or a TIMESTAMP field.
timeOfDaySel :: QueryBuilder -> Selector TimeOfDay Source #
A TIME field taken as a specific time.
diffTimeSel :: QueryBuilder -> Selector DiffTime Source #
a TIME field taken as a time duration.
byteStringSel :: QueryBuilder -> Selector ByteString Source #
A binary BLOB field.
other selectors
values :: [QueryBuilder] -> Selector [MySQLValue] Source #
Read the columns directly as a MySQLValue
type without conversion.
values_ :: [QueryBuilder] -> Selector () Source #
Ignore the content of the given columns
Expressions
subQuery :: ToQueryBuilder a => a -> QueryBuilder Source #
arg :: ToSql a => a -> QueryBuilder Source #
fun :: Text -> [QueryBuilder] -> QueryBuilder Source #
op :: Text -> QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(>.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(<.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(>=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(<=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(+.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(-.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(*.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(/.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(++.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(/=.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(&&.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
(||.) :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #
abs_ :: QueryBuilder -> QueryBuilder Source #
negate_ :: QueryBuilder -> QueryBuilder Source #
signum_ :: QueryBuilder -> QueryBuilder Source #
sum_ :: QueryBuilder -> QueryBuilder Source #
rawSql :: Text -> QueryBuilder Source #
substr :: QueryBuilder -> QueryBuilder -> QueryBuilder -> QueryBuilder Source #
in_ :: QueryBuilder -> [QueryBuilder] -> QueryBuilder Source #
Insertion
An
provides a mapping of parts of values of type
Insertor
aa
to columns in the database. Insertors can be combined using <>
.
insertValues :: QueryBuilder -> Insertor a -> [a] -> Command Source #
insertSelect :: QueryBuilder -> [QueryBuilder] -> [QueryBuilder] -> QueryClauses -> Command Source #
insertData :: (Generic a, Generic b, InsertGeneric (Rep a ()) (Rep b ())) => a -> Insertor b Source #
insertData
inserts a tuple or other product type into the given
fields. It uses generics to match the input to the fields. For
example:
insert "Person" (insertData ("name", "age")) [Person "Bart Simpson" 10, Person "Lisa Simpson" 8]
skipInsert :: Insertor a Source #
skipInsert is mempty specialized to an Insertor. It can be used to skip fields when using insertData.
into :: ToSql b => (a -> b) -> Text -> Insertor a Source #
into
uses the given accessor function to map the part to a
field. For example:
insertValues "Person" (fst `into` "name" <> snd `into` "age") [("Bart Simpson", 10), ("Lisa Simpson", 8)]
type Getter s a = (a -> Const a a) -> s -> Const a s Source #
A Getter type compatible with the lens library
lensInto :: ToSql b => Getter a b -> Text -> Insertor a Source #
lensInto
uses a lens to map the part to a field. For example:
insertValues "Person" (_1 `lensInto` "name" <> _2 `lensInto` "age") [("Bart Simpson", 10), ("Lisa Simpson", 8)]
toSqlValue
Instances
Rendering Queries
renderStmt :: ToQueryBuilder a => a -> ByteString Source #
renderPreparedStmt :: ToQueryBuilder a => a -> (ByteString, [MySQLValue]) Source #
Instances
Show SQLError Source # | |
Exception SQLError Source # | |
Defined in Database.MySQL.Hasqlator toException :: SQLError -> SomeException # fromException :: SomeException -> Maybe SQLError # displayException :: SQLError -> String # |
data QueryBuilder Source #
Instances
IsString QueryBuilder Source # | |
Defined in Database.MySQL.Hasqlator fromString :: String -> QueryBuilder # | |
Semigroup QueryBuilder Source # | |
Defined in Database.MySQL.Hasqlator (<>) :: QueryBuilder -> QueryBuilder -> QueryBuilder # sconcat :: NonEmpty QueryBuilder -> QueryBuilder # stimes :: Integral b => b -> QueryBuilder -> QueryBuilder # | |
Monoid QueryBuilder Source # | |
Defined in Database.MySQL.Hasqlator mempty :: QueryBuilder # mappend :: QueryBuilder -> QueryBuilder -> QueryBuilder # mconcat :: [QueryBuilder] -> QueryBuilder # |
class ToQueryBuilder a where Source #
toQueryBuilder :: a -> QueryBuilder Source #
Instances
ToQueryBuilder QueryOrdering Source # | |
Defined in Database.MySQL.Hasqlator | |
ToQueryBuilder Command Source # | |
Defined in Database.MySQL.Hasqlator toQueryBuilder :: Command -> QueryBuilder Source # | |
ToQueryBuilder (Query a) Source # | |
Defined in Database.MySQL.Hasqlator toQueryBuilder :: Query a -> QueryBuilder Source # | |
ToQueryBuilder (Query database (Selector a)) Source # | |
Defined in Database.MySQL.Hasqlator.Typed toQueryBuilder :: Query database (Selector a) -> QueryBuilder Source # |
fromSql