From 0d5e1ff29fcb0e86e0ae91f6cb94e44ddcffb144 Mon Sep 17 00:00:00 2001 From: Abhinav Sarkar Date: Wed, 6 Jan 2016 19:00:27 +0530 Subject: [PATCH] Adds indexes on dimension table columns in SQL. --- app/Main.hs | 2 +- src/Ringo.hs | 6 +++--- src/Ringo/Generator.hs | 2 +- src/Ringo/Generator/Create.hs | 12 +++++++++++- 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/app/Main.hs b/app/Main.hs index d475181..a1ce7e2 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -55,7 +55,7 @@ writeFiles outputDir env@Env{..} = do dimTables = [ (fact, extractDimensionTables env fact) | fact <- envFacts ] factTables = [ (fact, extractFactTable env fact) | fact <- envFacts ] - dimTableDefnSQLs = [ (Create, tableName table, unlines . map sqlStr $ tableDefnSQL env table) + dimTableDefnSQLs = [ (Create, tableName table, unlines . map sqlStr $ dimensionTableDefnSQL env table) | (_, tabs) <- dimTables , table <- tabs , table `notElem` envTables ] diff --git a/src/Ringo.hs b/src/Ringo.hs index 9306bf7..743a0fe 100644 --- a/src/Ringo.hs +++ b/src/Ringo.hs @@ -3,7 +3,7 @@ module Ringo , extractFactTable , extractDimensionTables , extractDependencies - , tableDefnSQL + , dimensionTableDefnSQL , factTableDefnSQL , dimensionTablePopulateSQL , factTablePopulateSQL @@ -28,8 +28,8 @@ extractDimensionTables env = flip runReader env . E.extractDimensionTables extractDependencies :: Env -> Fact -> Dependencies extractDependencies env = flip runReader env . E.extractDependencies -tableDefnSQL :: Env -> Table -> [Text] -tableDefnSQL env = flip runReader env . G.tableDefnSQL +dimensionTableDefnSQL :: Env -> Table -> [Text] +dimensionTableDefnSQL env = flip runReader env . G.dimensionTableDefnSQL factTableDefnSQL :: Env -> Fact -> Table -> [Text] factTableDefnSQL env fact = flip runReader env . G.factTableDefnSQL fact diff --git a/src/Ringo/Generator.hs b/src/Ringo/Generator.hs index 09391a3..87bed07 100644 --- a/src/Ringo/Generator.hs +++ b/src/Ringo/Generator.hs @@ -1,5 +1,5 @@ module Ringo.Generator - ( tableDefnSQL + ( dimensionTableDefnSQL , factTableDefnSQL , dimensionTablePopulateSQL , factTablePopulateSQL diff --git a/src/Ringo/Generator/Create.hs b/src/Ringo/Generator/Create.hs index cd8abf1..0e636c3 100644 --- a/src/Ringo/Generator/Create.hs +++ b/src/Ringo/Generator/Create.hs @@ -1,4 +1,4 @@ -module Ringo.Generator.Create (tableDefnSQL, factTableDefnSQL) where +module Ringo.Generator.Create (dimensionTableDefnSQL, factTableDefnSQL) where #if MIN_VERSION_base(4,8,0) #else @@ -40,6 +40,16 @@ tableDefnSQL Table {..} = do return $ tableSQL : concatMap constraintDefnSQL tableConstraints +dimensionTableDefnSQL :: Table -> Reader Env [Text] +dimensionTableDefnSQL table@Table {..} = do + Settings {..} <- asks envSettings + let tabName = tableName <> settingTableNameSuffixTemplate + tablePKColName = head [ cName | PrimaryKey cName <- tableConstraints ] + nonPKColNames = [ cName | Column cName _ _ <- tableColumns, cName /= tablePKColName ] + indexSQLs = [ "CREATE INDEX ON " <> tabName <> " (" <> cName <> ")" + | cName <- nonPKColNames ] + (++ indexSQLs) <$> tableDefnSQL table + factTableDefnSQL :: Fact -> Table -> Reader Env [Text] factTableDefnSQL fact table = do Settings {..} <- asks envSettings