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