Refactoring.
This commit is contained in:
parent
f00f158578
commit
dc4b260ff6
@ -30,7 +30,7 @@ library
|
||||
text >=1.2 && <1.3,
|
||||
containers >=0.5 && <0.6,
|
||||
mtl >=2.1 && <2.3,
|
||||
raw-strings-qq >= 1.0 && <1.2
|
||||
raw-strings-qq >=1.0 && <1.2
|
||||
ghc-options: -Wall -fno-warn-unused-do-bind -funbox-strict-fields -fno-warn-orphans -O2
|
||||
default-extensions: OverloadedStrings, RecordWildCards, ScopedTypeVariables, BangPatterns,
|
||||
TupleSections, CPP, NamedFieldPuns
|
||||
|
@ -12,11 +12,19 @@ import Control.Monad.Reader (Reader, asks)
|
||||
import Data.Function (on)
|
||||
import Data.Maybe (mapMaybe, fromMaybe, fromJust, catMaybes)
|
||||
import Data.Monoid ((<>))
|
||||
import Data.List (nub, nubBy)
|
||||
import Data.List (nub, nubBy, find)
|
||||
import Data.Text (Text)
|
||||
|
||||
import Ringo.Types
|
||||
import Ringo.Utils
|
||||
|
||||
findTable :: TableName -> [Table] -> Maybe Table
|
||||
findTable tName = find ((== tName) . tableName)
|
||||
|
||||
findFact :: TableName -> [Fact] -> Maybe Fact
|
||||
findFact fName = find ((== fName) . factName)
|
||||
|
||||
findColumn :: ColumnName -> [Column] -> Maybe Column
|
||||
findColumn cName = find ((== cName) . columnName)
|
||||
|
||||
dimColumnName :: Text -> ColumnName -> ColumnName
|
||||
dimColumnName dimName columnName =
|
||||
|
@ -13,16 +13,16 @@ tableDefnSQL :: Table -> [Text]
|
||||
tableDefnSQL Table {..} =
|
||||
tableSQL : concatMap constraintDefnSQL tableConstraints
|
||||
where
|
||||
tableSQL = "CREATE TABLE " <> tableName <> " (\n"
|
||||
<> (joinColumnNames . map columnDefnSQL $ tableColumns)
|
||||
<> "\n)"
|
||||
|
||||
columnDefnSQL Column {..} =
|
||||
columnName <> " " <> columnType <> " " <> nullableDefnSQL columnNullable
|
||||
|
||||
nullableDefnSQL Null = "NULL"
|
||||
nullableDefnSQL NotNull = "NOT NULL"
|
||||
|
||||
tableSQL = "CREATE TABLE " <> tableName <> " (\n"
|
||||
<> (joinColumnNames . map columnDefnSQL $ tableColumns)
|
||||
<> "\n)"
|
||||
|
||||
constraintDefnSQL constraint =
|
||||
let alterTableSQL = "ALTER TABLE ONLY " <> tableName <> " ADD "
|
||||
in case constraint of
|
||||
|
@ -19,7 +19,8 @@ fullColumnName tName cName = tName <> "." <> cName
|
||||
dimColumnMapping :: Text -> Fact -> TableName -> [(ColumnName, ColumnName)]
|
||||
dimColumnMapping dimPrefix fact dimTableName =
|
||||
[ (dimColumnName dName cName, cName)
|
||||
| DimVal dName cName <- factColumns fact , dimPrefix <> dName == dimTableName]
|
||||
| DimVal dName cName <- factColumns fact
|
||||
, dimPrefix <> dName == dimTableName ]
|
||||
|
||||
coalesceColumn :: TypeDefaults -> TableName -> Column -> Text
|
||||
coalesceColumn defaults tName Column{..} =
|
||||
|
@ -12,9 +12,9 @@ import Data.Maybe (fromJust)
|
||||
import Data.Monoid ((<>))
|
||||
import Data.Text (Text)
|
||||
|
||||
import Ringo.Extractor.Internal
|
||||
import Ringo.Generator.Internal
|
||||
import Ringo.Types
|
||||
import Ringo.Utils
|
||||
|
||||
dimensionTablePopulateSQL :: TablePopulationMode -> Fact -> TableName -> Reader Env Text
|
||||
dimensionTablePopulateSQL popMode fact dimTableName = do
|
||||
|
@ -206,7 +206,7 @@ factTablePopulateSQL popMode fact = do
|
||||
coalesceFKId col =
|
||||
if "coalesce" `Text.isPrefixOf` col
|
||||
then col
|
||||
else "coalesce((" <> col <> "), -1)"
|
||||
else "coalesce((" <> col <> "), -1)" -- TODO extract this out to settings
|
||||
|
||||
toSelectSQL :: FactTablePopulateSelectSQL -> Text
|
||||
toSelectSQL FactTablePopulateSelectSQL {..} =
|
||||
|
@ -58,15 +58,15 @@ data FactColumn = DimTime !ColumnName
|
||||
| FactCountDistinct !(Maybe ColumnName) !ColumnName
|
||||
deriving (Eq, Show)
|
||||
|
||||
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 cName _) = cName
|
||||
factColumnName (FactSum cName _) = Just cName
|
||||
factColumnName (FactAverage cName _) = Just cName
|
||||
factColumnName (FactCountDistinct cName _) = cName
|
||||
factSourceColumnName :: FactColumn -> Maybe ColumnName
|
||||
factSourceColumnName (DimTime cName) = Just cName
|
||||
factSourceColumnName (NoDimId cName) = Just cName
|
||||
factSourceColumnName (DimId _ cName) = Just cName
|
||||
factSourceColumnName (DimVal _ cName) = Just cName
|
||||
factSourceColumnName (FactCount cName _) = cName
|
||||
factSourceColumnName (FactSum cName _) = Just cName
|
||||
factSourceColumnName (FactAverage cName _) = Just cName
|
||||
factSourceColumnName (FactCountDistinct cName _) = cName
|
||||
|
||||
data Settings = Settings
|
||||
{ settingDimPrefix :: !Text
|
||||
|
@ -3,18 +3,6 @@ module Ringo.Utils where
|
||||
import qualified Control.Arrow as Arrow
|
||||
|
||||
import Data.Maybe (mapMaybe)
|
||||
import Data.List (find)
|
||||
|
||||
import Ringo.Types
|
||||
|
||||
findTable :: TableName -> [Table] -> Maybe Table
|
||||
findTable tName = find ((== tName) . tableName)
|
||||
|
||||
findFact :: TableName -> [Fact] -> Maybe Fact
|
||||
findFact fName = find ((== fName) . factName)
|
||||
|
||||
findColumn :: ColumnName -> [Column] -> Maybe Column
|
||||
findColumn cName = find ((== cName) . columnName)
|
||||
|
||||
for :: [a] -> (a -> b) -> [b]
|
||||
for = flip map
|
||||
|
@ -12,10 +12,10 @@ import Control.Applicative ((<$>))
|
||||
#endif
|
||||
|
||||
import Control.Monad.Reader (Reader, asks)
|
||||
import Data.Maybe (isJust, fromJust)
|
||||
|
||||
import Data.Maybe (isJust, fromJust)
|
||||
import Ringo.Extractor.Internal
|
||||
import Ringo.Types
|
||||
import Ringo.Utils
|
||||
|
||||
checkTableForCol :: Table -> ColumnName -> [ValidationError]
|
||||
checkTableForCol tab colName =
|
||||
@ -44,8 +44,8 @@ validateFact Fact {..} = do
|
||||
case findTable factTableName tables of
|
||||
Nothing -> return [ MissingTable factTableName ]
|
||||
Just table -> do
|
||||
tableVs <- validateTable table
|
||||
parentVs <- concat <$> mapM checkFactParents factParentNames
|
||||
tableVs <- validateTable table
|
||||
parentVs <- concat <$> mapM checkFactParents factParentNames
|
||||
let colVs = concatMap (checkColumn tables table) factColumns
|
||||
timeVs = [ MissingTimeColumn factTableName
|
||||
| null [ c | DimTime c <- factColumns ] ]
|
||||
@ -71,7 +71,7 @@ validateFact Fact {..} = do
|
||||
Just pFact -> validateFact pFact
|
||||
|
||||
checkColumn tables table factCol =
|
||||
maybe [] (checkTableForCol table) (factColumnName factCol)
|
||||
maybe [] (checkTableForCol table) (factSourceColumnName factCol)
|
||||
++ checkColumnTable tables factCol
|
||||
|
||||
checkColumnTable tables factCol = case factCol of
|
||||
|
Loading…
Reference in New Issue
Block a user