Advertisement
Guest User

Untitled

a guest
Jun 21st, 2017
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.87 KB | None | 0 0
  1. -- src/Stocks.hs
  2.  
  3. {-# LANGUAGE GADTs #-}
  4. {-# LANGUAGE GeneralizedNewtypeDeriving #-}
  5. {-# LANGUAGE OverloadedStrings #-}
  6. {-# LANGUAGE QuasiQuotes #-}
  7. {-# LANGUAGE TemplateHaskell #-}
  8. {-# LANGUAGE TypeFamilies #-}
  9. {-# LANGUAGE MultiParamTypeClasses #-}
  10. {-# LANGUAGE FlexibleContexts #-}
  11. {-# LANGUAGE EmptyDataDecls #-}
  12.  
  13. module Stocks where
  14.  
  15. import Control.Monad (
  16. mapM_
  17. )
  18. import Control.Monad.IO.Class (
  19. liftIO
  20. )
  21. import Database.Persist
  22. import Database.Persist.Sqlite
  23. import Database.Persist.Sqlite (
  24. runSqlite,
  25. runMigration,
  26. printMigration
  27. )
  28. import Database.Persist.MongoDB
  29. import Database.Persist.TH (
  30. mkSave,
  31. mkPersist,
  32. mkMigrate,
  33. persistLowerCase,
  34. share,
  35. sqlSettings
  36. )
  37. import qualified Data.Time as DT
  38. import Data.Time (
  39. TimeOfDay,
  40. Day,
  41. UTCTime,
  42. LocalTime,
  43. ZonedTime
  44. )
  45. import qualified Data.Text as T
  46. import Database.SQLite as SQL
  47. import Text.CSV
  48.  
  49. dbMemory :: T.Text
  50. dbMemory = ":memory:"
  51.  
  52. dbLocation :: T.Text
  53. dbLocation = "file:./db/stocks.db"
  54.  
  55. dbLocationRd :: T.Text
  56. dbLocationRd = "file:./db/stocks.db?mode=ro"
  57.  
  58. dbLocationWrt :: T.Text
  59. dbLocationWrt = "file:./db/stocks.db?mode=ro"
  60.  
  61. connPoolSize :: Int
  62. connPoolSize = 2
  63.  
  64. tblMemory :: T.Text
  65. tblMemory = "stocks_temp"
  66.  
  67. tblName :: T.Text
  68. tblName = "stocks_temp"
  69.  
  70. testRecord :: T.Text
  71. testRecord = "'AAPL.O','2017-01-09','04:00:00.081','Q',,,,'NAS',1,1,'SIP',0,0,,,'09:00:00.015'\n"
  72.  
  73. testDateTime :: T.Text
  74. testDateTime = "2017-01-09 04:00:00.081"
  75.  
  76. testDate :: T.Text
  77. testDate = "2017-01-09"
  78.  
  79. testTime :: T.Text
  80. testTime = "04:00:00.081"
  81.  
  82. getQuotes :: T.Text
  83. getQuotes = "Q"
  84.  
  85. getTrades :: T.Text
  86. getTrades = "T"
  87.  
  88. getTickerBA :: T.Text
  89. getTickerBA = "BA"
  90.  
  91. share [mkSave "stockDef",mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
  92. Stocks sql=stocksTbl
  93. ric T.Text sqltype=VARCHAR(15)
  94. date DT.Day sqltype=TEXT
  95. time DT.UTCTime sqltype=INTEGER
  96. type_torq T.Text sqlname=type sqltype=VARCHAR(10)
  97. exchange_id T.Text sqltype=VARCHAR(10) Maybe
  98. price Double sqltype=FLOAT Maybe
  99. volume Int sqltype=INTEGER Maybe
  100. buyer_id T.Text sqltype=VARCHAR(10) Maybe
  101. bid_price Double sqltype=FLOAT Maybe
  102. bid_size Int sqltype=INTEGER Maybe
  103. seller_id T.Text sqltype=VARCHAR(10) Maybe
  104. ask_price Double sqltype=FLOAT Maybe
  105. ask_size Int sqltype=INTEGER Maybe
  106. exch_time DT.TimeOfDay sqltype=INTEGER Maybe
  107. trd_qte_date DT.Day sqltype=TEXT Maybe
  108. quote_time DT.TimeOfDay sqltype=INTEGER Maybe
  109. deriving Show
  110. |]
  111.  
  112. numOfRecords :: Int
  113. numOfRecords = 10
  114.  
  115. --createDb :: IO ()
  116. createDb = do
  117. runMigration migrateAll
  118.  
  119. -- ...
  120. -- pooling, https://sqlite.org/threadsafe.html
  121. dbConfig :: SqliteConf
  122. dbConfig = SqliteConf {
  123. sqlDatabase = dbLocation,
  124. sqlPoolSize = connPoolSize
  125. }
  126.  
  127. --connStocks :: IO ()
  128. connStocks a = runSqlite (sqlDatabase dbConfig) $ do
  129. a
  130.  
  131. --mainStocks :: IO ()
  132. --mainStocks = withSqliteConn dbLocation $ runSqlConn $ do
  133.  
  134. mainStocks :: IO ()
  135. mainStocks = runSqlite dbLocation $ do
  136. createDb
  137. quotes <- selectList [StocksType_torq ==. getQuotes] []
  138. --liftIO $ print (quotes :: [Entity Stocks])
  139. liftIO $ print quotes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement