hasqly-mysql-0.0.1: composable SQL generation

Copyright(c) Kristof Bastiaensen 2020
LicenseBSD-3
Maintainerkristof@resonata.be
Stabilityunstable
Portabilityghc
Safe HaskellNone
LanguageHaskell2010

Database.Hasqly

Contents

Description

 
Synopsis

Querying

data Query a Source #

Instances
ToQueryBuilder (Query a) Source # 
Instance details

Defined in Database.Hasqly

data Command Source #

Instances
ToQueryBuilder Command Source # 
Instance details

Defined in Database.Hasqly

mergeSelect :: Query b -> (a -> b -> c) -> Selector a -> Query c Source #

Query Clauses

orderBy :: [QueryOrdering] -> QueryClauses Source #

Selectors

data Selector a Source #

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 # 
Instance details

Defined in Database.Hasqly

Methods

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

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

Applicative Selector Source # 
Instance details

Defined in Database.Hasqly

Methods

pure :: a -> Selector a #

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

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

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

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

FromSql a => IsString (Selector a) Source # 
Instance details

Defined in Database.Hasqly

Methods

fromString :: String -> Selector a #

Semigroup a => Semigroup (Selector a) Source # 
Instance details

Defined in Database.Hasqly

Methods

(<>) :: Selector a -> Selector a -> Selector a #

sconcat :: NonEmpty (Selector a) -> Selector a #

stimes :: Integral b => b -> Selector a -> Selector a #

Monoid a => Monoid (Selector a) Source # 
Instance details

Defined in Database.Hasqly

Methods

mempty :: Selector a #

mappend :: Selector a -> Selector a -> Selector a #

mconcat :: [Selector a] -> Selector a #

as :: QueryBuilder -> QueryBuilder -> QueryBuilder Source #

combinator for aliasing columns.

polymorphic selector

col :: 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 col. Using these may make refactoring easier, for example accidently swapping col "age" and col "name" would not give a type error, while intCol "age" and textCol "name" most likely would.

intCol :: (Show a, Bounded a, Integral a) => QueryBuilder -> Selector a Source #

an integer field (TINYINT.. BIGINT). Any bounded haskell integer type can be used here , for example Int, Int32, Word32. An Overflow ur Underflow error will be raised if the value doesn't fit the type.

integerCol :: 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.

scientificCol :: QueryBuilder -> Selector Scientific Source #

A DECIMAL or NUMERIC field.

localTimeCol :: QueryBuilder -> Selector LocalTime Source #

a DATETIME or a TIMESTAMP field.

timeOfDayCol :: QueryBuilder -> Selector TimeOfDay Source #

A TIME field taken as a specific time.

diffTimeCol :: QueryBuilder -> Selector DiffTime Source #

a TIME field taken as a time duration.

dayCol :: QueryBuilder -> Selector Day Source #

A DATE 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

Insertion

data Insertor a Source #

An Insertor a provides a mapping of parts of values of type a to columns in the database. Insertors can be combined using <>.

Instances
Semigroup (Insertor a) Source # 
Instance details

Defined in Database.Hasqly

Methods

(<>) :: Insertor a -> Insertor a -> Insertor a #

sconcat :: NonEmpty (Insertor a) -> Insertor a #

stimes :: Integral b => b -> Insertor a -> Insertor a #

Monoid (Insertor a) Source # 
Instance details

Defined in Database.Hasqly

Methods

mempty :: Insertor a #

mappend :: Insertor a -> Insertor a -> Insertor a #

mconcat :: [Insertor a] -> Insertor a #

into :: ToSql b => (a -> b) -> Text -> Insertor a Source #

into uses the given extractor function to map the part to a field. For example:

insertValues "Person" (fst `into` "name" <> snd `into` "age")
  [("Bart Simpson", 10), ("Lisa Simpson", 8)]

lensInto :: ToSql b => ((b -> Const b b) -> a -> Const b a) -> 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)]

insert1 :: ToSql a => Text -> Insertor a Source #

insert a single value directly

insert2 :: (ToSql a1, ToSql a2) => Text -> Text -> Insertor (a1, a2) Source #

insert the values of a tuple

insert3 :: (ToSql a1, ToSql a2, ToSql a3) => Text -> Text -> Text -> Insertor (a1, a2, a3) Source #

insert4 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4) => Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4) Source #

insert5 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4, ToSql a5) => Text -> Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4, a5) Source #

insert6 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4, ToSql a5, ToSql a6) => Text -> Text -> Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4, a5, a6) Source #

insert7 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4, ToSql a5, ToSql a6, ToSql a7) => Text -> Text -> Text -> Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4, a5, a6, a7) Source #

insert8 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4, ToSql a5, ToSql a6, ToSql a7, ToSql a8) => Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4, a5, a6, a7, a8) Source #

insert9 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4, ToSql a5, ToSql a6, ToSql a7, ToSql a8, ToSql a9) => Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4, a5, a6, a7, a8, a9) Source #

insert10 :: (ToSql a1, ToSql a2, ToSql a3, ToSql a4, ToSql a5, ToSql a6, ToSql a7, ToSql a8, ToSql a9, ToSql a10) => Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Text -> Insertor (a1, a2, a3, a4, a5, a6, a7, a8, a9, a10) Source #

class ToSql a Source #

Minimal complete definition

toSqlValue

Instances
ToSql Double Source # 
Instance details

Defined in Database.Hasqly

ToSql Float Source # 
Instance details

Defined in Database.Hasqly

ToSql Int Source # 
Instance details

Defined in Database.Hasqly

ToSql Int8 Source # 
Instance details

Defined in Database.Hasqly

ToSql Int16 Source # 
Instance details

Defined in Database.Hasqly

ToSql Int32 Source # 
Instance details

Defined in Database.Hasqly

ToSql Int64 Source # 
Instance details

Defined in Database.Hasqly

ToSql Integer Source # 
Instance details

Defined in Database.Hasqly

ToSql Word8 Source # 
Instance details

Defined in Database.Hasqly

ToSql Word16 Source # 
Instance details

Defined in Database.Hasqly

ToSql Word32 Source # 
Instance details

Defined in Database.Hasqly

ToSql Word64 Source # 
Instance details

Defined in Database.Hasqly

ToSql ByteString Source # 
Instance details

Defined in Database.Hasqly

ToSql Text Source # 
Instance details

Defined in Database.Hasqly

ToSql TimeOfDay Source # 
Instance details

Defined in Database.Hasqly

ToSql LocalTime Source # 
Instance details

Defined in Database.Hasqly

ToSql Scientific Source # 
Instance details

Defined in Database.Hasqly

ToSql DiffTime Source # 
Instance details

Defined in Database.Hasqly

ToSql Day Source # 
Instance details

Defined in Database.Hasqly

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

Defined in Database.Hasqly

Methods

toSqlValue :: Maybe a -> MySQLValue

Rendering Queries

class ToQueryBuilder a Source #

Minimal complete definition

toQueryBuilder

Instances
ToQueryBuilder Command Source # 
Instance details

Defined in Database.Hasqly

ToQueryBuilder (Query a) Source # 
Instance details

Defined in Database.Hasqly

class FromSql a Source #

Minimal complete definition

fromSql

Instances
FromSql Double Source # 
Instance details

Defined in Database.Hasqly

FromSql Float Source # 
Instance details

Defined in Database.Hasqly

FromSql Int Source # 
Instance details

Defined in Database.Hasqly

FromSql Int8 Source # 
Instance details

Defined in Database.Hasqly

FromSql Int16 Source # 
Instance details

Defined in Database.Hasqly

FromSql Int32 Source # 
Instance details

Defined in Database.Hasqly

FromSql Int64 Source # 
Instance details

Defined in Database.Hasqly

FromSql Integer Source # 
Instance details

Defined in Database.Hasqly

FromSql Word8 Source # 
Instance details

Defined in Database.Hasqly

FromSql Word16 Source # 
Instance details

Defined in Database.Hasqly

FromSql Word32 Source # 
Instance details

Defined in Database.Hasqly

FromSql Word64 Source # 
Instance details

Defined in Database.Hasqly

FromSql ByteString Source # 
Instance details

Defined in Database.Hasqly

FromSql Text Source # 
Instance details

Defined in Database.Hasqly

FromSql TimeOfDay Source # 
Instance details

Defined in Database.Hasqly

FromSql LocalTime Source # 
Instance details

Defined in Database.Hasqly

FromSql Scientific Source # 
Instance details

Defined in Database.Hasqly

FromSql DiffTime Source # 
Instance details

Defined in Database.Hasqly

FromSql Day Source # 
Instance details

Defined in Database.Hasqly

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

Defined in Database.Hasqly