test3.hs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. {-# LANGUAGE TypeFamilies #-}
  2. {-# LANGUAGE FlexibleInstances #-}
  3. {-# LANGUAGE MultiParamTypeClasses #-}
  4. {-# LANGUAGE StandaloneDeriving #-}
  5. {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  6. {-# LANGUAGE QuasiQuotes #-}
  7. import Database.Persist.Quasi
  8. import Prelude hiding (filter)
  9. import Database.Persist
  10. import Database.Persist.State
  11. import Database.Persist.Sqlite3
  12. import Control.Monad.IO.Class
  13. import qualified Data.Map as Map
  14. import Database.HDBC.Sqlite3 (connectSqlite3)
  15. persistSqlite3 [$persist|
  16. Person
  17. name String update Eq Ne Desc
  18. age Int update Lt Asc
  19. color String null Eq Ne
  20. PersonNameKey name
  21. |]
  22. deriving instance Show Person
  23. main = do
  24. --evalPersistState go (Map.empty :: Map.Map Int Person)
  25. conn <- connectSqlite3 "test.db3"
  26. runSqlite3 go conn
  27. go = do
  28. initialize (undefined :: Person)
  29. pid <- insert $ Person "Michael" 25 Nothing
  30. liftIO $ print pid
  31. p1 <- get pid
  32. liftIO $ print p1
  33. replace pid $ Person "Michael" 26 Nothing
  34. p2 <- get pid
  35. liftIO $ print p2
  36. p3 <- select [PersonNameEq "Michael"] []
  37. liftIO $ print p3
  38. _ <- insert $ Person "Michael2" 27 Nothing
  39. deleteWhere [PersonNameEq "Michael2"]
  40. p4 <- select [PersonAgeLt 28] []
  41. liftIO $ print p4
  42. update pid [PersonAge 28]
  43. p5 <- get pid
  44. liftIO $ print p5
  45. updateWhere [PersonNameEq "Michael"] [PersonAge 29]
  46. p6 <- get pid
  47. liftIO $ print p6
  48. insert $ Person "Eliezer" 2 $ Just "blue"
  49. p7 <- select [] [PersonAgeAsc]
  50. liftIO $ print p7
  51. insert $ Person "Abe" 30 $ Just "black"
  52. p8 <- select [PersonAgeLt 30] [PersonNameDesc]
  53. liftIO $ print p8
  54. insertR $ Person "Abe" 31 $ Just "brown"
  55. p9 <- select [PersonNameEq "Abe"] []
  56. liftIO $ print p9
  57. p10 <- getBy $ PersonNameKey "Michael"
  58. liftIO $ print p10
  59. p11 <- select [PersonColorEq $ Just "blue"] []
  60. liftIO $ print p11
  61. p12 <- select [PersonColorEq Nothing] []
  62. liftIO $ print p12
  63. p13 <- select [PersonColorNe Nothing] []
  64. liftIO $ print p13
  65. delete pid
  66. plast <- get pid
  67. liftIO $ print plast