packages feed

persistent 2.1.3 → 2.1.4

raw patch · 5 files changed

+35/−19 lines, 5 files

Files

ChangeLog.md view
@@ -1,3 +1,11 @@+## 2.1.4++* Fix getBy with a primary key. #342++## 2.1.3++* Break self-referencing cycles in the entity declarations+ ## 2.1.2  * Error with `Double`s without a decimal part [#378](https://github.com/yesodweb/persistent/issues/378)
Database/Persist/Sql/Orphan/PersistQuery.hs view
@@ -14,6 +14,7 @@ import Database.Persist.Sql.Types import Database.Persist.Sql.Raw import Database.Persist.Sql.Orphan.PersistStore (withRawQuery)+import Database.Persist.Sql.Util (dbIdColumns) import qualified Data.Text as T import Data.Text (Text) import Data.Monoid (Monoid (..), (<>))@@ -86,9 +87,7 @@         return $ fmap ($= CL.mapM parse) srcRes       where         t = entityDef $ dummyFromFilts filts-        cols conn = case entityPrimary t of -                     Just pdef -> T.intercalate "," $ map (connEscapeName conn . fieldDB) $ compositeFields pdef-                     Nothing   -> connEscapeName conn $ fieldDB (entityId t)+        cols conn = T.intercalate "," $ dbIdColumns conn t                                 wher conn = if null filts
Database/Persist/Sql/Orphan/PersistUnique.hs view
@@ -2,10 +2,13 @@ {-# OPTIONS_GHC -fno-warn-orphans #-} module Database.Persist.Sql.Orphan.PersistUnique () where +import Control.Exception (throwIO)+import Control.Monad.IO.Class (liftIO) import Database.Persist import Database.Persist.Sql.Types import Database.Persist.Sql.Raw import Database.Persist.Sql.Orphan.PersistStore (withRawQuery)+import Database.Persist.Sql.Util (dbColumns, parseEntityValues) import qualified Data.Text as T import Data.Monoid (mappend) import qualified Data.Conduit.List as CL@@ -30,31 +33,23 @@      getBy uniq = do         conn <- ask-        let flds = map (connEscapeName conn . fieldDB) (entityFields t)-        let cols = case entityPrimary t of-                     Just _ -> T.intercalate "," flds-                     Nothing -> T.intercalate "," $ connEscapeName conn (fieldDB (entityId t)) : flds         let sql = T.concat                 [ "SELECT "-                , cols+                , T.intercalate "," $ dbColumns conn t                 , " FROM "                 , connEscapeName conn $ entityDB t                 , " WHERE "                 , sqlClause conn                 ]-            vals' = persistUniqueToValues uniq-        withRawQuery sql vals' $ do+            uvals = persistUniqueToValues uniq+        withRawQuery sql uvals $ do             row <- CL.head             case row of                 Nothing -> return Nothing                 Just [] -> error "getBy: empty row"-                Just (kpv:vals) ->-                    case fromPersistValues vals of-                        Left s -> error $ T.unpack s-                        Right x ->-                            case keyFromValues [kpv] of-                                Right k -> return $ Just (Entity k x)-                                Left _ -> error $ "getBy: keyFromValues failed: " `mappend` show kpv+                Just vals -> case parseEntityValues t vals of+                    Left err -> liftIO $ throwIO $ PersistMarshalError err+                    Right r -> return $ Just r       where         sqlClause conn =             T.intercalate " AND " $ map (go conn) $ toFieldNames' uniq
Database/Persist/Sql/Util.hs view
@@ -5,6 +5,8 @@   , entityColumnCount   , isIdField   , hasCompositeKey+  , dbIdColumns+  , dbColumns ) where  import Data.Maybe (isJust)@@ -32,6 +34,19 @@ hasCompositeKey :: EntityDef -> Bool hasCompositeKey = isJust . entityPrimary +dbIdColumns :: SqlBackend -> EntityDef -> [Text]+dbIdColumns conn t = case entityPrimary t of+    Just pdef -> map (connEscapeName conn . fieldDB) $ compositeFields pdef+    Nothing   -> [connEscapeName conn $ fieldDB (entityId t)]++dbColumns :: SqlBackend -> EntityDef -> [Text]+dbColumns conn t = case entityPrimary t of+    Just _  -> flds      +    Nothing -> escapeDB (entityId t) : flds+  where+    escapeDB = connEscapeName conn . fieldDB+    flds = map escapeDB (entityFields t)+ parseEntityValues :: PersistEntity record                   => EntityDef -> [PersistValue] -> Either Text (Entity record) parseEntityValues t vals = @@ -64,4 +79,3 @@  isIdField :: PersistEntity record => EntityField record typ -> Bool isIdField f = fieldHaskell (persistFieldDef f) == HaskellName "Id"-
persistent.cabal view
@@ -1,5 +1,5 @@ name:            persistent-version:         2.1.3+version:         2.1.4 license:         MIT license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>