packages feed

persistent-sqlite 1.2.1 → 1.3.0

raw patch · 3 files changed

+62/−31 lines, 3 filesdep ~persistent

Dependency ranges changed: persistent

Files

Database/Persist/Sqlite.hs view
@@ -69,6 +69,7 @@         , connEscapeName = escape         , connNoLimit = "LIMIT -1"         , connRDBMS = "sqlite"+        , connLimitOffset = decorateSQLWithLimitOffset "LIMIT -1"         }   where     helper t getter = do@@ -101,20 +102,33 @@         , stmtQuery = withStmt' conn stmt         } -insertSql' :: DBName -> [DBName] -> DBName -> InsertSqlResult-insertSql' t cols _ =-    ISRInsertGet (pack ins) sel-  where-    sel = "SELECT last_insert_rowid()"-    ins = concat-        [ "INSERT INTO "-        , escape' t-        , "("-        , intercalate "," $ map escape' cols-        , ") VALUES("-        , intercalate "," (map (const "?") cols)-        , ")"-        ]+insertSql' :: EntityDef SqlType -> [PersistValue] -> InsertSqlResult+insertSql' ent vals =+  case entityPrimary ent of+    Just _ -> +      ISRManyKeys sql vals+        where sql = pack $ concat+                [ "INSERT INTO "+                , escape' $ entityDB ent+                , "("+                , intercalate "," $ map (escape' . fieldDB) $ entityFields ent+                , ") VALUES("+                , intercalate "," (map (const "?") $ entityFields ent)+                , ")"+                ]+    Nothing -> +      ISRInsertGet (pack ins) sel+        where+          sel = "SELECT last_insert_rowid()"+          ins = concat+              [ "INSERT INTO "+              , escape' $ entityDB ent+              , "("+              , intercalate "," $ map (escape' . fieldDB) $ entityFields ent+              , ") VALUES("+              , intercalate "," (map (const "?") $ entityFields ent)+              , ")"+              ]  execute' :: Sqlite.Connection -> Sqlite.Statement -> [PersistValue] -> IO Int64 execute' conn stmt vals = flip finally (liftIO $ Sqlite.reset conn stmt) $ do@@ -161,7 +175,7 @@          -> EntityDef SqlType          -> IO (Either [Text] [(Bool, Text)]) migrate' allDefs getter val = do-    let (cols, uniqs) = mkColumns allDefs val+    let (cols, uniqs, _) = mkColumns allDefs val     let newSql = mkCreateTable False def (filter (not . safeToRemove val . cName) cols, uniqs)     stmt <- getter "SELECT sql FROM sqlite_master WHERE type='table' AND name=?"     oldSql' <- runResourceT@@ -223,7 +237,7 @@             Just y -> error $ "Invalid result from PRAGMA table_info: " ++ show y     table = entityDB def     tableTmp = DBName $ unDBName table `T.append` "_backup"-    (cols, uniqs) = mkColumns allDefs val+    (cols, uniqs, _) = mkColumns allDefs val     cols' = filter (not . safeToRemove def . cName) cols     newSql = mkCreateTable False def (cols', uniqs)     tmpSql = mkCreateTable True def { entityDB = tableTmp } (cols', uniqs)@@ -252,21 +266,37 @@ escape' = T.unpack . escape  mkCreateTable :: Bool -> EntityDef a -> ([Column], [UniqueDef]) -> Text-mkCreateTable isTemp entity (cols, uniqs) = T.concat-    [ "CREATE"-    , if isTemp then " TEMP" else ""-    , " TABLE "-    , escape $ entityDB entity-    , "("-    , escape $ entityID entity-    , " INTEGER PRIMARY KEY"-    , T.concat $ map sqlColumn cols-    , T.concat $ map sqlUnique uniqs-    , ")"-    ]+mkCreateTable isTemp entity (cols, uniqs) = +  case entityPrimary entity of +    Just _ -> +       T.concat+        [ "CREATE"+        , if isTemp then " TEMP" else ""+        , " TABLE "+        , escape $ entityDB entity+        , "("+        , T.drop 1 $ T.concat $ map sqlColumn cols+        , ", PRIMARY KEY "+        , "("+        , T.intercalate "," $ map (escape . fieldDB) $ entityFields entity+        , ")"+        , ")"+        ]+    Nothing -> T.concat+        [ "CREATE"+        , if isTemp then " TEMP" else ""+        , " TABLE "+        , escape $ entityDB entity+        , "("+        , escape $ entityID entity+        , " INTEGER PRIMARY KEY"+        , T.concat $ map sqlColumn cols+        , T.concat $ map sqlUnique uniqs+        , ")"+        ]  sqlColumn :: Column -> Text-sqlColumn (Column name isNull typ def _maxLen ref) = T.concat+sqlColumn (Column name isNull typ def _cn _maxLen ref) = T.concat     [ ","     , escape name     , " "
Database/Sqlite.hs view
@@ -355,6 +355,7 @@             PersistZonedTime (ZT d) -> bindText statement parameterIndex $ pack $ show d             PersistList l -> bindText statement parameterIndex $ listToJSON l             PersistMap m -> bindText statement parameterIndex $ mapToJSON m+            PersistDbSpecific s -> bindText statement parameterIndex $ decodeUtf8With lenientDecode s             PersistObjectId _ -> P.error "Refusing to serialize a PersistObjectId to a SQLite value"             )        $ zip [1..] sqlData
persistent-sqlite.cabal view
@@ -1,5 +1,5 @@ name:            persistent-sqlite-version:         1.2.1+version:         1.3.0 license:         MIT license-file:    LICENSE author:          Michael Snoyman <michael@snoyman.com>@@ -20,7 +20,7 @@     build-depends:   base                    >= 4         && < 5                    , bytestring              >= 0.9.1                    , transformers            >= 0.2.1-                   , persistent              >= 1.2       && < 1.3+                   , persistent              >= 1.3       && < 1.4                    , monad-control           >= 0.2                    , containers              >= 0.2                    , text                    >= 0.7