>
> module Database.Dawdle.Types
> (SParser
> ,CellType(..)
> ,isNullable
> ,applyNullIfNeeded
> ,getDateFormatFromCT
> ,removeNull
> ,composeNull
> ,composeMaxTypesWithNulls
> ,isDateOrUnknown
> ,isDateTimeOrUnknown)
> where
> import Data.Data
> import Text.Parsec
> type SParser a = forall s u (m :: * -> *). Stream s m Char => ParsecT s u m a
> data CellType = Nullable CellType | Unknown |
> CTBool | CTInt8 | CTInt16 | CTInt32 | CTInt64 | CTFloat | CTDouble | CTDate String | CTDateTime String | CTChar Int
> deriving (Eq,Show,Ord,Data,Typeable)
> isNullable :: CellType -> Bool
> isNullable (Nullable _) = True
> isNullable _ = False
> applyNullIfNeeded :: Bool -> CellType -> CellType
> applyNullIfNeeded True r@Nullable{} = r
> applyNullIfNeeded True r = Nullable r
> applyNullIfNeeded False r = r
> getDateFormatFromCT :: CellType -> Maybe String
> getDateFormatFromCT (CTDateTime s) = Just s
> getDateFormatFromCT (CTDate s) = Just s
> getDateFormatFromCT _ = Nothing
> removeNull :: CellType -> CellType
> removeNull (Nullable x) = x
> removeNull x = x
> composeNull :: CellType -> CellType -> CellType
> composeNull _ r@Nullable{} = r
> composeNull Nullable{} r = Nullable r
> composeNull _ r = r
> composeMaxTypesWithNulls :: CellType -> CellType -> CellType
> composeMaxTypesWithNulls mp nt =
> composeNull mp (maximum $ map removeNull [mp,nt])
> isDateOrUnknown :: CellType -> Bool
> isDateOrUnknown CTDate{} = True
> isDateOrUnknown Unknown = True
> isDateOrUnknown _ = False
> isDateTimeOrUnknown :: CellType -> Bool
> isDateTimeOrUnknown CTDateTime{} = True
> isDateTimeOrUnknown Unknown = True
> isDateTimeOrUnknown _ = False