parent
7166172251
commit
3c7c311995
@ -44,6 +44,7 @@ module Database.Esqueleto.Internal.Language
|
|||||||
, else_
|
, else_
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import Control.Applicative (Applicative(..), (<$>))
|
||||||
import Control.Exception (Exception)
|
import Control.Exception (Exception)
|
||||||
import Data.Int (Int64)
|
import Data.Int (Int64)
|
||||||
import Data.Typeable (Typeable)
|
import Data.Typeable (Typeable)
|
||||||
@ -51,6 +52,7 @@ import Database.Esqueleto.Internal.PersistentImport
|
|||||||
import Text.Blaze.Html (Html)
|
import Text.Blaze.Html (Html)
|
||||||
|
|
||||||
import qualified Data.ByteString as B
|
import qualified Data.ByteString as B
|
||||||
|
import qualified Data.ByteString.Lazy as BL
|
||||||
import qualified Data.Text as T
|
import qualified Data.Text as T
|
||||||
import qualified Data.Text.Lazy as TL
|
import qualified Data.Text.Lazy as TL
|
||||||
|
|
||||||
|
|||||||
@ -50,6 +50,7 @@ module Database.Esqueleto.Internal.Sql
|
|||||||
, veryUnsafeCoerceSqlExprValueList
|
, veryUnsafeCoerceSqlExprValueList
|
||||||
) where
|
) where
|
||||||
|
|
||||||
|
import Control.Applicative (Applicative(..), (<$>), (<$))
|
||||||
import Control.Arrow ((***), first)
|
import Control.Arrow ((***), first)
|
||||||
import Control.Exception (throw, throwIO)
|
import Control.Exception (throw, throwIO)
|
||||||
import Control.Monad (ap, MonadPlus(..), liftM)
|
import Control.Monad (ap, MonadPlus(..), liftM)
|
||||||
@ -59,7 +60,7 @@ import Control.Monad.Trans.Resource (MonadResource)
|
|||||||
import Data.Acquire (with, allocateAcquire, Acquire)
|
import Data.Acquire (with, allocateAcquire, Acquire)
|
||||||
import Data.Int (Int64)
|
import Data.Int (Int64)
|
||||||
import Data.List (intersperse)
|
import Data.List (intersperse)
|
||||||
import Data.Monoid (Last(..), (<>))
|
import Data.Monoid (Last(..), Monoid(..), (<>))
|
||||||
import Data.Proxy (Proxy(..))
|
import Data.Proxy (Proxy(..))
|
||||||
import Database.Esqueleto.Internal.PersistentImport
|
import Database.Esqueleto.Internal.PersistentImport
|
||||||
import Database.Persist.Sql.Util (entityColumnNames, entityColumnCount, parseEntityValues, isIdField, hasCompositeKey)
|
import Database.Persist.Sql.Util (entityColumnNames, entityColumnCount, parseEntityValues, isIdField, hasCompositeKey)
|
||||||
@ -416,7 +417,6 @@ instance Esqueleto SqlQuery SqlExpr SqlBackend where
|
|||||||
where
|
where
|
||||||
toDistinctOn :: SqlExpr OrderBy -> SqlExpr DistinctOn
|
toDistinctOn :: SqlExpr OrderBy -> SqlExpr DistinctOn
|
||||||
toDistinctOn (EOrderBy _ f) = EDistinctOn f
|
toDistinctOn (EOrderBy _ f) = EDistinctOn f
|
||||||
toDistinctOn EOrderRandom = error "toDistinctOn get an EOrderRandom but expect an EOrderBy"
|
|
||||||
|
|
||||||
sub_select = sub SELECT
|
sub_select = sub SELECT
|
||||||
sub_selectDistinct = sub_select . distinct
|
sub_selectDistinct = sub_select . distinct
|
||||||
@ -647,7 +647,7 @@ unsafeSqlBinOpComposite op sep a b = ERaw Parens $ compose (listify a) (listify
|
|||||||
|
|
||||||
deconstruct :: (TLB.Builder, [PersistValue]) -> ([TLB.Builder], [PersistValue])
|
deconstruct :: (TLB.Builder, [PersistValue]) -> ([TLB.Builder], [PersistValue])
|
||||||
deconstruct ("?", [PersistList vals]) = (replicate (length vals) "?", vals)
|
deconstruct ("?", [PersistList vals]) = (replicate (length vals) "?", vals)
|
||||||
deconstruct (b', []) = (TLB.fromLazyText <$> TL.splitOn "," (TLB.toLazyText b'), [])
|
deconstruct (b, []) = (TLB.fromLazyText <$> TL.splitOn "," (TLB.toLazyText b), [])
|
||||||
deconstruct x = err $ "cannot deconstruct " ++ show x ++ "."
|
deconstruct x = err $ "cannot deconstruct " ++ show x ++ "."
|
||||||
|
|
||||||
compose f1 f2 info
|
compose f1 f2 info
|
||||||
|
|||||||
21
test/Test.hs
21
test/Test.hs
@ -18,17 +18,21 @@
|
|||||||
#-}
|
#-}
|
||||||
module Main (main) where
|
module Main (main) where
|
||||||
|
|
||||||
|
import Control.Applicative ((<$>))
|
||||||
|
import Control.Arrow ((&&&))
|
||||||
|
import Control.Exception (IOException)
|
||||||
import Control.Monad (forM_, replicateM, replicateM_, void)
|
import Control.Monad (forM_, replicateM, replicateM_, void)
|
||||||
import Control.Monad.IO.Class (MonadIO(liftIO))
|
import Control.Monad.IO.Class (MonadIO(liftIO))
|
||||||
import Control.Monad.Logger (MonadLogger(..), runStderrLoggingT, runNoLoggingT)
|
import Control.Monad.Logger (MonadLogger(..), runStderrLoggingT, runNoLoggingT)
|
||||||
import Control.Monad.Trans.Control (MonadBaseControl(..))
|
import Control.Monad.Trans.Control (MonadBaseControl(..))
|
||||||
import Control.Monad.Trans.Reader (ReaderT)
|
import Control.Monad.Trans.Reader (ReaderT)
|
||||||
import Data.Char (toLower, toUpper)
|
import Data.Char (toLower, toUpper)
|
||||||
|
import Data.List (sortBy)
|
||||||
import Data.Monoid ((<>))
|
import Data.Monoid ((<>))
|
||||||
|
import Data.Ord (comparing)
|
||||||
import Database.Esqueleto
|
import Database.Esqueleto
|
||||||
#if defined (WITH_POSTGRESQL)
|
#if defined (WITH_POSTGRESQL)
|
||||||
import Database.Persist.Postgresql (withPostgresqlConn)
|
import Database.Persist.Postgresql (withPostgresqlConn)
|
||||||
import qualified Database.Esqueleto.PostgreSQL as EP
|
|
||||||
#elif defined (WITH_MYSQL)
|
#elif defined (WITH_MYSQL)
|
||||||
import Database.Persist.MySQL ( withMySQLConn
|
import Database.Persist.MySQL ( withMySQLConn
|
||||||
, connectHost
|
, connectHost
|
||||||
@ -49,6 +53,7 @@ import qualified Control.Monad.Trans.Resource as R
|
|||||||
import qualified Data.List as L
|
import qualified Data.List as L
|
||||||
import qualified Data.Set as S
|
import qualified Data.Set as S
|
||||||
import qualified Data.Text.Lazy.Builder as TLB
|
import qualified Data.Text.Lazy.Builder as TLB
|
||||||
|
import qualified Database.Esqueleto.PostgreSQL as EP
|
||||||
import qualified Database.Esqueleto.Internal.Sql as EI
|
import qualified Database.Esqueleto.Internal.Sql as EI
|
||||||
|
|
||||||
|
|
||||||
@ -803,6 +808,8 @@ main = do
|
|||||||
orderBy [asc title]
|
orderBy [asc title]
|
||||||
return title
|
return title
|
||||||
liftIO $ ret `shouldBe` [ Value t1, Value t2, Value t3 ]
|
liftIO $ ret `shouldBe` [ Value t1, Value t2, Value t3 ]
|
||||||
|
it "works on a simple example (selectDistinct)" $
|
||||||
|
selDistTest selectDistinct
|
||||||
|
|
||||||
it "works on a simple example (select . distinct)" $
|
it "works on a simple example (select . distinct)" $
|
||||||
selDistTest (select . distinct)
|
selDistTest (select . distinct)
|
||||||
@ -1300,15 +1307,15 @@ main = do
|
|||||||
-- reaction to the clause.
|
-- reaction to the clause.
|
||||||
let sanityCheck kind syntax = do
|
let sanityCheck kind syntax = do
|
||||||
let complexQuery =
|
let complexQuery =
|
||||||
from $ \(pl `InnerJoin` pr) -> do
|
from $ \(p1 `InnerJoin` p2) -> do
|
||||||
on (pl ^. PersonName ==. pr ^. PersonName)
|
on (p1 ^. PersonName ==. p2 ^. PersonName)
|
||||||
where_ (pl ^. PersonFavNum >. val 2)
|
where_ (p1 ^. PersonFavNum >. val 2)
|
||||||
orderBy [desc (pr ^. PersonAge)]
|
orderBy [desc (p2 ^. PersonAge)]
|
||||||
limit 3
|
limit 3
|
||||||
offset 9
|
offset 9
|
||||||
groupBy (pl ^. PersonId)
|
groupBy (p1 ^. PersonId)
|
||||||
having (countRows <. val (0 :: Int))
|
having (countRows <. val (0 :: Int))
|
||||||
return (pl, pr)
|
return (p1, p2)
|
||||||
queryWithClause1 = do
|
queryWithClause1 = do
|
||||||
r <- complexQuery
|
r <- complexQuery
|
||||||
locking kind
|
locking kind
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user