persistent-mysql 2.13.1.4 → 2.13.1.5
raw patch · 5 files changed
+21/−10 lines, 5 files
Files
- ChangeLog.md +5/−0
- Database/Persist/MySQL.hs +7/−7
- persistent-mysql.cabal +1/−1
- test/MyInit.hs +1/−1
- test/main.hs +7/−1
ChangeLog.md view
@@ -1,5 +1,10 @@ # Changelog for persistent-mysql +## 2.13.1.5++* [#1526](https://github.com/yesodweb/persistent/pull/1526)+ * Parse `tinyint` column as `SqlOther "tinyint"` rather than `SqlBool`, fixing breakage in legitimate non-Boolean uses of `tinyint` on MySQL 8.0+ ## 2.13.1.4 * [#1459](https://github.com/yesodweb/persistent/pull/1459)
Database/Persist/MySQL.hs view
@@ -827,14 +827,16 @@ -- @INFORMATION_SCHEMA@ tables. parseColumnType :: Text -> ColumnInfo -> ExceptT String IO (SqlType, Maybe Integer) -- Ints--- The display width is deprecated and being removed in MySQL 8.X. To be--- consistent with earlier versions, which do report it, accept either+-- The display width is deprecated and being removed in MySQL 8.X+-- with [an exception of tinyint(1) which is used for boolean values](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-deprecation-removal).+-- To be consistent with earlier versions, which do report it, accept either -- the bare type in `ciColumnType ci`, or the type adorned with the expected -- value for the display width (ie the defaults for int and bigint, or the -- value explicitly set in `showSqlType` for SqlBool). -- parseColumnType "tinyint" ci- | ciColumnType ci == "tinyint" || ciColumnType ci == "tinyint(1)" = return (SqlBool, Nothing)+ | ciColumnType ci == "tinyint(1)" = return (SqlBool, Nothing)+ | otherwise = return (SqlOther "tinyint", Nothing) parseColumnType "int" ci | ciColumnType ci == "int" || ciColumnType ci == "int(11)" = return (SqlInt32, Nothing) parseColumnType "bigint" ci@@ -1023,10 +1025,8 @@ -> String showSqlType SqlBlob Nothing _ = "BLOB" showSqlType SqlBlob (Just i) _ = "VARBINARY(" ++ show i ++ ")"--- "tinyint(1)" has been used historically here. In MySQL 8, the display width--- is deprecated, and in the future it may need to be removed here. However,--- "(1)" is not the default in older MySQL versions, so for them omitting it--- would alter the exact form of the column type in the information_schema.+-- While integer widths are deprecated in MySQL 8.0, "tinyint(1)" remains as an exception.+-- cf. https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-19.html#mysqld-8-0-19-deprecation-removal showSqlType SqlBool _ _ = "TINYINT(1)" showSqlType SqlDay _ _ = "DATE" showSqlType SqlDayTime _ _ = "DATETIME"
persistent-mysql.cabal view
@@ -1,5 +1,5 @@ name: persistent-mysql-version: 2.13.1.4+version: 2.13.1.5 license: MIT license-file: LICENSE author: Felipe Lessa <felipe.lessa@gmail.com>, Michael Snoyman
test/MyInit.hs view
@@ -137,7 +137,7 @@ } _ <- if not travis then withMySQLPool baseConnectInfo- { connectHost = "localhost"+ { connectHost = "127.0.0.1" , connectUser = "test" , connectPassword = "test" , connectDatabase = "test"
test/main.hs view
@@ -18,6 +18,7 @@ import qualified Data.ByteString as BS import Data.Fixed+import Data.Int (Int8) import Data.IntMap (IntMap) import qualified Data.Text as T import Data.Time (Day, TimeOfDay, UTCTime(..), timeOfDayToTime, timeToTimeOfDay)@@ -90,6 +91,8 @@ -- off for older servers by defining OLD_MYSQL. timeFrac TimeOfDay sqltype=TIME(6) utcFrac UTCTime sqltype=DATETIME(6)+ tinyint Int8 sqltype=TINYINT+ tinyint4 Int8 sqltype=TINYINT(4) |] instance Arbitrary (DataTypeTableGeneric backend) where@@ -110,7 +113,8 @@ <*> (truncateUTCTime =<< arbitrary) -- utc <*> (truncateTimeOfDay =<< arbitrary) -- timeFrac <*> (truncateUTCTime =<< arbitrary) -- utcFrac-+ <*> arbitrary -- tinyint+ <*> choose (-8, 7) -- tinyint4 setup :: (HasCallStack, MonadUnliftIO m) => Migration -> ReaderT SqlBackend m () setup migration = do printMigration migration@@ -169,6 +173,8 @@ , TestFn "utc" (roundUTCTime . dataTypeTableUtc) , TestFn "timeFrac" (dataTypeTableTimeFrac) , TestFn "utcFrac" (dataTypeTableUtcFrac)+ , TestFn "tinyint" dataTypeTableTinyint+ , TestFn "tinyint4" dataTypeTableTinyint4 ] [ ("pico", dataTypeTablePico) ] dataTypeTableDouble