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 +59/−29
- Database/Sqlite.hs +1/−0
- persistent-sqlite.cabal +2/−2
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