|
1 | 1 | {-# LANGUAGE DeriveGeneric #-} |
2 | 2 | {-# LANGUAGE TemplateHaskell #-} |
3 | 3 |
|
4 | | -module Database.SqlServer.Definitions.DataTypes where |
| 4 | +module Database.SqlServer.Definitions.DataTypes |
| 5 | + ( |
| 6 | + Type |
| 7 | + , renderDataType |
| 8 | + , collation |
| 9 | + , renderSparse |
| 10 | + , storageOptions |
| 11 | + , rowGuidOptions |
| 12 | + , storageSize |
| 13 | + , renderRowGuidConstraint |
| 14 | + , isRowGuidCol |
| 15 | + , nullOptions |
| 16 | + , renderNullConstraint |
| 17 | + , isTimestamp |
| 18 | + , renderValue |
| 19 | + ) where |
5 | 20 |
|
6 | 21 | import Database.SqlServer.Definitions.Collations (Collation) |
7 | | -import Database.SqlServer.Definitions.Identifiers (ArbUUID(..)) |
| 22 | +import Database.SqlServer.Definitions.Identifiers (ArbUUID) |
8 | 23 |
|
9 | 24 | import Text.PrettyPrint |
10 | 25 |
|
@@ -71,10 +86,6 @@ data VarBinaryStorage = SizedRange Range |
71 | 86 | | MaxNoFileStream |
72 | 87 | | MaxFileStream |
73 | 88 |
|
74 | | -renderFileStream :: VarBinaryStorage -> Doc |
75 | | -renderFileStream MaxFileStream = text "FILESTREAM" |
76 | | -renderFileStream _ = empty |
77 | | - |
78 | 89 | renderVarBinaryStorage :: VarBinaryStorage -> Doc |
79 | 90 | renderVarBinaryStorage (SizedRange r) = renderRange r |
80 | 91 | renderVarBinaryStorage MaxFileStream = text "(max)" |
@@ -192,23 +203,24 @@ instance Arbitrary SQLDate where |
192 | 203 |
|
193 | 204 | data SQLDateTime = SQLDateTime UTCTime |
194 | 205 |
|
| 206 | +dateBetween :: Integer -> Integer -> Gen Day |
| 207 | +dateBetween startYear endYear = do |
| 208 | + y <- choose (startYear,endYear) |
| 209 | + m <- choose (1,12) |
| 210 | + d <- choose (1,31) |
| 211 | + return (fromGregorian y m d) |
| 212 | + |
195 | 213 | instance Arbitrary SQLDateTime where |
196 | 214 | arbitrary = do |
197 | | - y <- choose (1753,9999) |
198 | | - m <- choose (1,12) |
199 | | - d <- choose (1,31) |
200 | | - let day = fromGregorian y m d |
| 215 | + day <- dateBetween 1753 9999 |
201 | 216 | datetime <- choose (0,86400) |
202 | 217 | return (SQLDateTime (UTCTime day (secondsToDiffTime datetime))) |
203 | 218 |
|
204 | 219 | data SQLSmallDateTime = SQLSmallDateTime UTCTime |
205 | 220 |
|
206 | 221 | instance Arbitrary SQLSmallDateTime where |
207 | 222 | arbitrary = do |
208 | | - y <- choose (1900,2078) |
209 | | - m <- choose (1,12) |
210 | | - d <- choose (1,31) |
211 | | - let day = fromGregorian y m d |
| 223 | + day <- dateBetween 1900 2078 |
212 | 224 | datetime <- choose (0,86400) |
213 | 225 | return (SQLSmallDateTime (UTCTime day (secondsToDiffTime datetime))) |
214 | 226 |
|
@@ -275,7 +287,7 @@ data SQLVariant = SQLVariantInt Int |
275 | 287 | instance Arbitrary SQLVariant where |
276 | 288 | arbitrary = do |
277 | 289 | x <- arbitrary |
278 | | - y <- elements [\y -> SQLVariantString (show y), \y -> SQLVariantInt y] |
| 290 | + y <- elements [SQLVariantString . show, SQLVariantInt] |
279 | 291 | return $ y x |
280 | 292 |
|
281 | 293 | data SQLXml = SQLXml String |
@@ -468,7 +480,7 @@ renderValue (BigInt _ v) = Just $ (text . show) v |
468 | 480 | renderValue (Int _ v) = Just $ (text . show) v |
469 | 481 | renderValue (TinyInt _ v) = Just $ (text . show) v |
470 | 482 | renderValue (SmallInt _ v) = Just $ (text . show) v |
471 | | -renderValue (Bit _ b) = Just $ maybe (text "NULL") (\x -> if x then int 1 else int 0) b |
| 483 | +renderValue (Bit _ b) = Just $ maybe (text "NULL") (\x -> int (if x then 1 else 0)) b |
472 | 484 | renderValue (SmallMoney _ s) = Just $ text (divideBy10000 $ fromIntegral s) |
473 | 485 | renderValue (Money _ s) = Just $ text (divideBy10000 $ fromIntegral s) |
474 | 486 | renderValue (Date _ d) = Just $ renderSQLDate d |
|
0 commit comments