packages feed

esqueleto 2.5.1 → 2.5.2

raw patch · 4 files changed

+60/−24 lines, 4 filesdep ~persistentdep ~persistent-sqlitePVP ok

version bump matches the API change (PVP)

Dependency ranges changed: persistent, persistent-sqlite

API changes (from Hackage documentation)

Files

esqueleto.cabal view
@@ -1,5 +1,5 @@ name:                esqueleto-version:             2.5.1+version:             2.5.2 synopsis:            Type-safe EDSL for SQL queries on persistent backends. homepage:            https://github.com/bitemyapp/esqueleto license:             BSD3@@ -63,10 +63,10 @@   other-modules:     Database.Esqueleto.Internal.PersistentImport   build-depends:-      base                 >= 4.5     && < 5.0+      base                 >= 4.8     && < 5.0     , bytestring     , text                 >= 0.11    && < 1.3-    , persistent           >= 2.5 && < 2.7+    , persistent           >= 2.5 && < 2.8     , transformers         >= 0.2     , unordered-containers >= 0.2     , tagged               >= 0.2@@ -97,7 +97,7 @@     , HUnit     , QuickCheck     , hspec               >= 1.8-    , persistent-sqlite   >= 2.1+    , persistent-sqlite   >= 2.1.3     , persistent-template >= 2.1     , monad-control     , monad-logger        >= 0.3
src/Database/Esqueleto/Internal/Sql.hs view
@@ -76,7 +76,6 @@  import Database.Esqueleto.Internal.Language - -- | SQL backend for @esqueleto@ using 'SqlPersistT'. newtype SqlQuery a =   Q { unQ :: W.WriterT SideData (S.State IdentState) a }@@ -1099,13 +1098,19 @@ makeGroupBy _ (GroupBy []) = (mempty, []) makeGroupBy info (GroupBy fields) = first ("\nGROUP BY " <>) build   where-    build = uncommas' $ map (\(SomeValue (ERaw _ f)) -> f info) fields+    build :: (TLB.Builder, [PersistValue])+    build = uncommas' $ map match fields +    match :: SomeValue SqlExpr -> (TLB.Builder, [PersistValue])+    match (SomeValue (ERaw _ f)) = f info+    match (SomeValue (ECompositeKey f)) = (mconcat $ f info, mempty)+ makeHaving :: IdentInfo -> WhereClause -> (TLB.Builder, [PersistValue]) makeHaving _    NoWhere                    = mempty makeHaving info (Where (ERaw _ f))         = first ("\nHAVING " <>) (f info)-makeHaving _    (Where (ECompositeKey _ )) = unexpectedCompositeKeyError "makeHaving"+makeHaving _    (Where (ECompositeKey _)) = unexpectedCompositeKeyError "makeHaving" +-- makeHaving, makeWhere and makeOrderBy makeOrderBy :: IdentInfo -> [OrderByClause] -> (TLB.Builder, [PersistValue]) makeOrderBy _    [] = mempty makeOrderBy info os = first ("\nORDER BY " <>) . uncommas' $ concatMap mk os
src/Database/Esqueleto/PostgreSQL.hs view
@@ -20,7 +20,6 @@ arrayAgg :: SqlExpr (Value a) -> SqlExpr (Value [a]) arrayAgg = unsafeSqlFunction "array_agg" - -- | (@string_agg@) Concatenate input values separated by a -- delimiter. --
test/Test.hs view
@@ -28,6 +28,9 @@ import Database.Esqueleto #if   defined (WITH_POSTGRESQL) import Database.Persist.Postgresql (withPostgresqlConn)+import Data.Ord (comparing)+import Control.Arrow ((&&&))+import qualified Database.Esqueleto.PostgreSQL as EP #elif defined (WITH_MYSQL) import Database.Persist.MySQL ( withMySQLConn                               , connectHost@@ -35,12 +38,9 @@                               , connectUser                               , connectPassword                               , defaultConnectInfo)-#else+#endif import Database.Persist.Sqlite (withSqliteConn)-#if MIN_VERSION_persistent_sqlite(2,1,3) import Database.Sqlite (SqliteException)-#endif-#endif import Database.Persist.TH import Test.Hspec @@ -69,6 +69,19 @@     title String     authorId PersonId     deriving Eq Show++  Lord+    county String+    dogs Int Maybe+    Primary county+    deriving Show++  Deed+    contract String+    ownerId LordId+    Primary contract+    deriving Show+   Follow     follower PersonId     followed PersonId@@ -129,6 +142,10 @@       p3 = Person "Mike"   (Just 17) Nothing   3       p4 = Person "Livia"  (Just 17) (Just 18) 4       p5 = Person "Mitch"  Nothing   Nothing   5+      l1 = Lord "Cornwall" (Just 36)+      l2 = Lord "Dorset" Nothing+      l3 = Lord "Chester" (Just 17)+   hspec $ do     describe "select" $ do       it "works for a single value" $@@ -825,7 +842,7 @@                  distinctOn [don (bp ^. BlogPostAuthorId)] $ do                  orderBy [asc (bp ^. BlogPostAuthorId), desc (bp ^. BlogPostTitle)]                  return bp-          liftIO $ ret `shouldBe` sortBy (comparing (blogPostAuthorId . entityVal)) [bpB, bpC]+          liftIO $ ret `shouldBe` L.sortBy (comparing (blogPostAuthorId . entityVal)) [bpB, bpC]        let slightlyLessSimpleTest q =             run $ do@@ -838,7 +855,7 @@                      from $ \bp ->                      q bp $ return bp               let cmp = (blogPostAuthorId &&& blogPostTitle) . entityVal-              liftIO $ ret `shouldBe` sortBy (comparing cmp) [bpA, bpB, bpC]+              liftIO $ ret `shouldBe` L.sortBy (comparing cmp) [bpA, bpB, bpC]       it "works on a slightly less simple example (two distinctOn calls, orderBy)" $         slightlyLessSimpleTest $ \bp act ->           distinctOn [don (bp ^. BlogPostAuthorId)] $@@ -915,12 +932,8 @@       it "throws an exception on SQLite with <2 arguments" $         run (select $              from $ \p -> do-             return (coalesce [p ^. PersonAge]) :: SqlQuery (SqlExpr (Value (Maybe Int)))-#if MIN_VERSION_persistent_sqlite(2,1,3)-        ) `shouldThrow` (\(_ :: SqliteException) -> True)-#else-        ) `shouldThrow` (\(_ :: IOException) -> True)-#endif+             return (coalesce [p ^. PersonAge]) :: SqlQuery (SqlExpr (Value (Maybe Int))))+        `shouldThrow` (\(_ :: SqliteException) -> True) #endif      describe "text functions" $ do@@ -1073,6 +1086,23 @@                                   , (Entity p1k p1, Value 3)                                   , (Entity p3k p3, Value 7) ] +      it "GROUP BY works with COUNT and InnerJoin" $+        run $ do+          l1k <- insert l1+          l2k <- insert l2+          l3k <- insert l3+          mapM_ (\k -> insert $ Deed k l1k) (map show [1..3])++          mapM_ (\k -> insert $ Deed k l3k) (map show [4..10])++          (ret :: [(Value (Key Lord), Value Int)]) <- select $ from $+            \ ( lord `InnerJoin` deed ) -> do+            on $ lord ^. LordId ==. deed ^. DeedOwnerId+            groupBy (lord ^. LordId)+            return (lord ^. LordId, count $ deed ^. DeedId)+          liftIO $ ret `shouldBe` [ (Value l3k, Value 7)+                                  , (Value l1k, Value 3) ]+       it "GROUP BY works with HAVING" $         run $ do           p1k <- insert p1@@ -1181,7 +1211,6 @@                  return p           liftIO $ ret `shouldBe` [ Entity p2k p2 ] -     describe "list fields" $ do       -- <https://github.com/prowdsponsor/esqueleto/issues/100>       it "can update list fields" $@@ -1365,9 +1394,7 @@           let people = [p1, p2, p3, p4, p5]           mapM_ insert people           [Value ret] <--            select $-            from $ \p -> do-            return (EP.arrayAgg (p ^. PersonName))+            select . from $ \p -> return (EP.arrayAgg (p ^. PersonName))           liftIO $ L.sort ret `shouldBe` L.sort (map personName people)        it "stringAgg looks sane" $@@ -1410,9 +1437,14 @@   :: (forall m. RunDbMonad m   => SqlPersistT (R.ResourceT m) ()) cleanDB = do+  delete $ from $ \(_ :: SqlExpr (Entity Foo))  -> return ()+  delete $ from $ \(_ :: SqlExpr (Entity Bar))  -> return ()+   delete $ from $ \(_ :: SqlExpr (Entity BlogPost))   -> return ()   delete $ from $ \(_ :: SqlExpr (Entity Follow))     -> return ()   delete $ from $ \(_ :: SqlExpr (Entity Person))     -> return ()++  delete $ from $ \(_ :: SqlExpr (Entity CcList))  -> return ()    delete $ from $ \(_ :: SqlExpr (Entity ArticleTag)) -> return ()   delete $ from $ \(_ :: SqlExpr (Entity Article))    -> return ()