Advertisement
Guest User

Untitled

a guest
Apr 12th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.29 KB | None | 0 0
  1. #!/usr/bin/env stack
  2. {- stack
  3. --resolver lts-6.24
  4. --install-ghc
  5. runghc
  6. --package yesod
  7. --package blaze-html
  8. --package persistent
  9. --package text
  10. --package bytestring
  11. --package persistent-postgresql
  12. --package persistent-template
  13. --package esqueleto
  14. --package monad-logger
  15. --package mtl
  16. -}
  17.  
  18. {-# LANGUAGE EmptyDataDecls #-}
  19. {-# LANGUAGE FlexibleContexts #-}
  20. {-# LANGUAGE GADTs #-}
  21. {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  22. {-# LANGUAGE MultiParamTypeClasses #-}
  23. {-# LANGUAGE OverloadedStrings #-}
  24. {-# LANGUAGE QuasiQuotes #-}
  25. {-# LANGUAGE TemplateHaskell #-}
  26. {-# LANGUAGE TypeFamilies #-}
  27. import Control.Monad.IO.Class (liftIO)
  28. import qualified Database.Esqueleto as E
  29. import Database.Esqueleto (LeftOuterJoin)
  30. import Database.Persist
  31. import Database.Persist.Postgresql
  32. import Database.Persist.TH
  33. import Control.Monad.Logger
  34. import Control.Monad.Reader
  35.  
  36. share [mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
  37. Author
  38. fname String
  39. lname String
  40. deriving Show
  41. Book
  42. title String
  43. isbn String
  44. deriving Show
  45. AuthorBook
  46. authorId AuthorId
  47. bookId BookId
  48. |]
  49.  
  50. loadData :: MonadIO m => ReaderT SqlBackend m ()
  51. loadData = do
  52. a1 <- insert $ Author "Simon" "PJ"
  53. a2 <- insert $ Author "Erik" "Meijer"
  54.  
  55. b1 <- insert $ Book "title1" "dkfa1"
  56. b2 <- insert $ Book "title2" "2kdfja"
  57.  
  58. insert_ $ AuthorBook a1 b1
  59. insert_ $ AuthorBook a1 b2
  60. insert_ $ AuthorBook a2 b1
  61. insert_ $ AuthorBook a2 b2
  62.  
  63. connStr = "host=localhost dbname=test user=postgres password=postgres port=5432"
  64.  
  65. testQuery :: MonadIO m => ReaderT SqlBackend m [(Entity Author, Entity Book)]
  66. testQuery = E.select $ E.from $ \(p `E.InnerJoin` b ) -> do
  67. E.on (E.just (p E.^. PersonId) E.==. b E.?. BlogPostAuthorId)
  68. E.where_ $ (p E.^. PersonId) `E.in_` E.valList [toSqlKey 2]
  69. return (p,b)
  70.  
  71.  
  72. main :: IO ()
  73. main =
  74. runStderrLoggingT $
  75. withPostgresqlPool connStr 10 $
  76. \pool ->
  77. liftIO $
  78. do flip runSqlPersistMPool pool $
  79. do runMigration migrateAll
  80. -- loadData
  81. dat <- testQuery
  82. liftIO $ mapM_ print dat >> putStrLn ""
  83. return ()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement