2015-12-10 13:58:14 +05:30
|
|
|
module Ringo.Types where
|
|
|
|
|
|
|
|
import Data.Text (Text)
|
|
|
|
|
|
|
|
(&) :: a -> (a -> b) -> b
|
|
|
|
x & f = f x
|
|
|
|
|
|
|
|
type ColumnName = Text
|
|
|
|
type ColumnType = Text
|
|
|
|
type TableName = Text
|
|
|
|
|
2015-12-10 20:30:55 +05:30
|
|
|
data Nullable = Nullable | NotNullable deriving (Eq, Enum, Show)
|
|
|
|
|
2015-12-10 13:58:14 +05:30
|
|
|
data Column = Column
|
2015-12-10 20:30:55 +05:30
|
|
|
{ columnName :: ColumnName
|
|
|
|
, columnType :: ColumnType
|
|
|
|
, columnNullable :: Nullable
|
2015-12-10 13:58:14 +05:30
|
|
|
} deriving (Eq, Show)
|
|
|
|
|
2015-12-10 20:30:55 +05:30
|
|
|
data TableContraint = PrimaryKey ColumnName
|
|
|
|
| UniqueKey [ColumnName]
|
|
|
|
| ForeignKey TableName [(ColumnName, ColumnName)]
|
2015-12-10 13:58:14 +05:30
|
|
|
deriving (Eq, Show)
|
|
|
|
|
|
|
|
data Table = Table
|
2015-12-10 20:30:55 +05:30
|
|
|
{ tableName :: TableName
|
|
|
|
, tableColumns :: [Column]
|
2015-12-10 13:58:14 +05:30
|
|
|
, tableConstraints :: [TableContraint]
|
|
|
|
} deriving (Eq, Show)
|
|
|
|
|
2015-12-10 20:30:55 +05:30
|
|
|
data TimeUnit = Second | Minute | Hour | Day | Week | Month | Year
|
|
|
|
deriving (Eq, Enum, Show)
|
|
|
|
|
|
|
|
data Fact = Fact
|
|
|
|
{ factName :: TableName
|
|
|
|
, factTableName :: TableName
|
|
|
|
, factColumns :: [FactColumn]
|
|
|
|
} deriving (Eq, Show)
|
|
|
|
|
|
|
|
data FactColumn = DimTime ColumnName
|
|
|
|
| NoDimId ColumnName
|
|
|
|
| DimId TableName ColumnName
|
|
|
|
| DimVal TableName ColumnName
|
|
|
|
deriving (Eq, Show)
|
|
|
|
|
|
|
|
factColumnName :: FactColumn -> ColumnName
|
|
|
|
factColumnName (DimTime cName) = cName
|
|
|
|
factColumnName (NoDimId cName) = cName
|
|
|
|
factColumnName (DimId _ cName) = cName
|
|
|
|
factColumnName (DimVal _ cName) = cName
|