parent
9107b7c83d
commit
8e74c20705
@ -1,50 +1,75 @@ |
||||
module Ringo.Types where |
||||
|
||||
import Data.Text (Text) |
||||
|
||||
(&) :: a -> (a -> b) -> b |
||||
x & f = f x |
||||
import qualified Data.Text as T |
||||
|
||||
type ColumnName = Text |
||||
type ColumnType = Text |
||||
type TableName = Text |
||||
|
||||
data Nullable = Nullable | NotNullable deriving (Eq, Enum, Show) |
||||
data Nullable = Null | NotNull deriving (Eq, Enum, Show) |
||||
|
||||
data Column = Column |
||||
{ columnName :: ColumnName |
||||
, columnType :: ColumnType |
||||
, columnNullable :: Nullable |
||||
{ columnName :: !ColumnName |
||||
, columnType :: !ColumnType |
||||
, columnNullable :: !Nullable |
||||
} deriving (Eq, Show) |
||||
|
||||
data TableContraint = PrimaryKey ColumnName |
||||
| UniqueKey [ColumnName] |
||||
| ForeignKey TableName [(ColumnName, ColumnName)] |
||||
data TableContraint = PrimaryKey !ColumnName |
||||
| UniqueKey ![ColumnName] |
||||
| ForeignKey !TableName ![(ColumnName, ColumnName)] |
||||
deriving (Eq, Show) |
||||
|
||||
data Table = Table |
||||
{ tableName :: TableName |
||||
, tableColumns :: [Column] |
||||
, tableConstraints :: [TableContraint] |
||||
{ tableName :: !TableName |
||||
, tableColumns :: ![Column] |
||||
, tableConstraints :: ![TableContraint] |
||||
} deriving (Eq, Show) |
||||
|
||||
data TimeUnit = Second | Minute | Hour | Day | Week | Month | Year |
||||
deriving (Eq, Enum, Show) |
||||
|
||||
timeUnitName :: TimeUnit -> Text |
||||
timeUnitName = T.toLower . T.pack . show |
||||
|
||||
data Fact = Fact |
||||
{ factName :: TableName |
||||
, factTableName :: TableName |
||||
, factColumns :: [FactColumn] |
||||
{ factName :: !TableName |
||||
, factTableName :: !TableName |
||||
, factParentNames :: ![TableName] |
||||
, factColumns :: ![FactColumn] |
||||
} deriving (Eq, Show) |
||||
|
||||
data FactColumn = DimTime ColumnName |
||||
| NoDimId ColumnName |
||||
| DimId TableName ColumnName |
||||
| DimVal TableName ColumnName |
||||
data FactValType = Count | Sum | Average | CountDistinct deriving (Eq, Enum, Show) |
||||
|
||||
data FactColumn = DimTime !ColumnName |
||||
| NoDimId !ColumnName |
||||
| DimId !TableName !ColumnName |
||||
| DimVal !TableName !ColumnName |
||||
| FactCount !ColumnName |
||||
| FactSum !ColumnName !ColumnName |
||||
| FactAverage !ColumnName !ColumnName |
||||
| FactCountDistinct !ColumnName |
||||
deriving (Eq, Show) |
||||
|
||||
factColumnName :: FactColumn -> ColumnName |
||||
factColumnName (DimTime cName) = cName |
||||
factColumnName (NoDimId cName) = cName |
||||
factColumnName (DimId _ cName) = cName |
||||
factColumnName (DimVal _ cName) = cName |
||||
factColumnName :: FactColumn -> Maybe ColumnName |
||||
factColumnName (DimTime cName) = Just cName |
||||
factColumnName (NoDimId cName) = Just cName |
||||
factColumnName (DimId _ cName) = Just cName |
||||
factColumnName (DimVal _ cName) = Just cName |
||||
factColumnName (FactCount _) = Nothing |
||||
factColumnName (FactSum cName _) = Just cName |
||||
factColumnName (FactAverage cName _) = Just cName |
||||
factColumnName (FactCountDistinct _) = Nothing |
||||
|
||||
data Settings = Settings |
||||
{ settingDimPrefix :: !Text |
||||
, settingFactPrefix :: !Text |
||||
, settingTimeUnit :: !TimeUnit |
||||
} deriving (Eq, Show) |
||||
|
||||
defSettings :: Settings |
||||
defSettings = Settings |
||||
{ settingDimPrefix = "dim_" |
||||
, settingFactPrefix = "fact_" |
||||
, settingTimeUnit = Minute |
||||
} |
||||
|
Loading…
Reference in new issue