yesod-dsl 0.1.1.8 → 0.1.1.9
raw patch · 2 files changed
+47/−1 lines, 2 files
Files
- Generator/EsqueletoInstances.hs +45/−0
- yesod-dsl.cabal +2/−1
+ Generator/EsqueletoInstances.hs view
@@ -0,0 +1,45 @@+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE OverloadedStrings #-}++module Generator.EsqueletoInstances (esqueletoInstances) where+import AST+import Generator.Common+import qualified Data.Text as T+import Text.Shakespeare.Text hiding (toText)+import Data.List+import Generator.Esqueleto++maxInstances :: Module -> Int+maxInstances m = maximum $ map sqFieldNumber+ $ filter isSelectQuery [ hp | r <- modRoutes m, + h <- routeHandlers r,+ hp <- handlerParams h]+ where isSelectQuery (Select _) = True+ isSelectQuery _ = False+ sqFieldNumber (Select sq) = let+ ctx = Context {+ ctxNames = sqAliases sq,+ ctxModule = m,+ ctxHandlerParams = []+ }+ in length $ concatMap (selectFieldRefs m ctx) (sqFields sq)++genInstance :: Int -> String+genInstance fnum = T.unpack $(codegenFile "codegen/sqlselect-instance.cg")+ where nums = [1..fnum]+ ifield n = "i" ++ show n+ ofield n = "o" ++ show n+ sqlSelectTypeLhs n = "SqlSelect " ++ ifield n ++ " " ++ ofield n+ sqlSelectCols n = "sqlSelectCols esc " ++ ifield n+ pairs xs = intercalate ", " $ pairs' xs+ pairs' :: [String] -> [String]+ pairs' (x1:x2:xs) = ("(" ++ x1 ++ "," ++ x2 ++ ")"):pairs' xs+ pairs' (x:_) = [x] + pairs' _ = []+ ++esqueletoInstances :: Module -> String+esqueletoInstances m = concatMap genInstance [17.. (maxInstances m)]++
yesod-dsl.cabal view
@@ -1,5 +1,5 @@ name: yesod-dsl-version: 0.1.1.8+version: 0.1.1.9 license: BSD3 license-file: LICENSE author: Tero Laitinen @@ -42,6 +42,7 @@ Generator.Validation Generator.Require Generator.Cabal+ Generator.EsqueletoInstances Obfuscate SyncFile Validation.Fields