packages feed

esqueleto 1.3.9 → 1.3.10

raw patch · 5 files changed

+49/−21 lines, 5 filesdep ~conduit

Dependency ranges changed: conduit

Files

esqueleto.cabal view
@@ -1,5 +1,5 @@ name:                esqueleto-version:             1.3.9+version:             1.3.10 synopsis:            Bare bones, type-safe EDSL for SQL queries on persistent backends. homepage:            https://github.com/meteficha/esqueleto license:             BSD3@@ -71,7 +71,7 @@     , tagged               >= 0.2      , monad-logger-    , conduit+    , conduit              >= 1.1     , resourcet   hs-source-dirs: src/   ghc-options: -Wall
src/Database/Esqueleto.hs view
@@ -38,7 +38,7 @@     -- $gettingstarted      -- * @esqueleto@'s Language-    Esqueleto( where_, on, groupBy, orderBy, asc, desc, limit, offset, having+    Esqueleto( where_, on, groupBy, orderBy, rand, asc, desc, limit, offset, having              , sub_select, sub_selectDistinct, (^.), (?.)              , val, isNothing, just, nothing, joinV, countRows, count, not_              , (==.), (>=.), (>.), (<=.), (<.), (!=.), (&&.), (||.)
src/Database/Esqueleto/Internal/Language.hs view
@@ -174,6 +174,11 @@   -- | @OFFSET@.  Usually used with 'limit'.   offset :: Int64 -> query () +  -- | @ORDER BY random()@ clause.+  --+  -- /Since: 1.3.10/+  rand :: expr OrderBy+   -- | @HAVING@.   --   -- /Since: 1.2.2/
src/Database/Esqueleto/Internal/Sql.hs view
@@ -256,6 +256,7 @@    -- A 'SqlExpr' accepted only by 'orderBy'.   EOrderBy :: OrderByType -> SqlExpr (Value a) -> SqlExpr OrderBy+  EOrderRandom :: SqlExpr OrderBy    -- A 'SqlExpr' accepted only by 'set'.   ESet :: (SqlExpr (Entity val) -> SqlExpr (Value ())) -> SqlExpr (Update val)@@ -322,6 +323,8 @@   asc  = EOrderBy ASC   desc = EOrderBy DESC +  rand = EOrderRandom+   limit  n = Q $ W.tell mempty { sdLimitClause = Limit (Just n) Nothing  }   offset n = Q $ W.tell mempty { sdLimitClause = Limit Nothing  (Just n) } @@ -903,7 +906,9 @@ makeOrderBy _    [] = mempty makeOrderBy info os = first ("\nORDER BY " <>) $ uncommas' (map mk os)   where+    mk :: OrderByClause -> (TLB.Builder, [PersistValue])     mk (EOrderBy t (ERaw p f)) = first ((<> orderByType t) . parensM p) (f info)+    mk EOrderRandom = first ((<> "RANDOM()")) mempty     orderByType ASC  = " ASC"     orderByType DESC = " DESC" 
test/Test.hs view
@@ -122,8 +122,8 @@         run $ do           p1k <- insert p1           p2k <- insert p2-          f1k <- insert (Follow p1k p2k)-          f2k <- insert (Follow p2k p1k)+          _f1k <- insert (Follow p1k p2k)+          _f2k <- insert (Follow p2k p1k)           ret <- select $                  from $ \followA -> do                  let subquery =@@ -138,8 +138,8 @@         run $ do           p1k <- insert p1           p2k <- insert p2-          f1k <- insert (Follow p1k p2k)-          f2k <- insert (Follow p2k p1k)+          _f1k <- insert (Follow p1k p2k)+          _f2k <- insert (Follow p2k p1k)           ret <- select $                  from $ \followA -> do                  where_ $ exists $@@ -368,9 +368,9 @@       it "works with random_" $         run $ do #if defined(WITH_POSTGRESQL) || defined(WITH_MYSQL)-          ret <- select $ return (random_ :: SqlExpr (Value Double))+          _ <- select $ return (random_ :: SqlExpr (Value Double)) #else-          ret <- select $ return (random_ :: SqlExpr (Value Int))+          _ <- select $ return (random_ :: SqlExpr (Value Int)) #endif           return () @@ -530,10 +530,10 @@        it "works with asc random_" $         run $ do-          p1e <- insert' p1-          p2e <- insert' p2-          p3e <- insert' p3-          p4e <- insert' p4+          _p1e <- insert' p1+          _p2e <- insert' p2+          _p3e <- insert' p3+          _p4e <- insert' p4           rets <-             fmap S.fromList $             replicateM 11 $@@ -680,7 +680,7 @@       it "GROUP BY works with HAVING" $         run $ do           p1k <- insert p1-          p2k <- insert p2+          _p2k <- insert p2           p3k <- insert p3           replicateM_ 3 (insert $ BlogPost "" p1k)           replicateM_ 7 (insert $ BlogPost "" p3k)@@ -700,7 +700,7 @@         run $ do           p1k <- insert p1           p2k <- insert p2-          p3k <- insert p3+          _p3k <- insert p3           ret <- select $                  from $ \p -> do                  where_ (p ^. PersonName `in_` valList (personName <$> [p1, p2]))@@ -710,9 +710,9 @@        it "IN works for valList (null list)" $         run $ do-          p1k <- insert p1-          p2k <- insert p2-          p3k <- insert p3+          _p1k <- insert p1+          _p2k <- insert p2+          _p3k <- insert p3           ret <- select $                  from $ \p -> do                  where_ (p ^. PersonName `in_` valList [])@@ -722,7 +722,7 @@       it "IN works for subList_select" $         run $ do           p1k <- insert p1-          p2k <- insert p2+          _p2k <- insert p2           p3k <- insert p3           _ <- insert (BlogPost "" p1k)           _ <- insert (BlogPost "" p3k)@@ -756,7 +756,7 @@       it "EXISTS works for subList_select" $         run $ do           p1k <- insert p1-          p2k <- insert p2+          _p2k <- insert p2           p3k <- insert p3           _ <- insert (BlogPost "" p1k)           _ <- insert (BlogPost "" p3k)@@ -792,10 +792,25 @@           _ <- insert p3           insertSelect $ from $ \p -> do             return $ BlogPost <# val "FakePost" <&> (p ^. PersonId)-          ret <- select $ from (\(b::(SqlExpr (Entity BlogPost))) -> return countRows)+          ret <- select $ from (\(_::(SqlExpr (Entity BlogPost))) -> return countRows)           liftIO $ ret `shouldBe` [Value (3::Int)] +    describe "rand works" $ do+      it "returns result in random order" $+        run $ do+          _ <- insert p1+          _ <- insert p2+          _ <- insert p3+          _ <- insert p4+          ret1 <- fmap (map unValue) $ select $ from $ \p -> do+                    orderBy [rand]+                    return (p ^. PersonId)+          ret2 <- fmap (map unValue) $ select $ from $ \p -> do+                    orderBy [rand]+                    return (p ^. PersonId) +          liftIO $ (ret1 == ret2) `shouldBe` False+ ----------------------------------------------------------------------  @@ -859,3 +874,6 @@ #else   (runMigrationSilent migrateAll >>) $ act #endif++unValue :: Value a -> a+unValue (Value a) = a