Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- src/Stocks.hs
- {-# LANGUAGE GADTs #-}
- {-# LANGUAGE GeneralizedNewtypeDeriving #-}
- {-# LANGUAGE OverloadedStrings #-}
- {-# LANGUAGE QuasiQuotes #-}
- {-# LANGUAGE TemplateHaskell #-}
- {-# LANGUAGE TypeFamilies #-}
- {-# LANGUAGE MultiParamTypeClasses #-}
- {-# LANGUAGE FlexibleContexts #-}
- {-# LANGUAGE EmptyDataDecls #-}
- module Stocks where
- import Control.Monad (
- mapM_
- )
- import Control.Monad.IO.Class (
- liftIO
- )
- import Database.Persist
- import Database.Persist.Sqlite
- import Database.Persist.Sqlite (
- runSqlite,
- runMigration,
- printMigration
- )
- import Database.Persist.MongoDB
- import Database.Persist.TH (
- mkSave,
- mkPersist,
- mkMigrate,
- persistLowerCase,
- share,
- sqlSettings
- )
- import qualified Data.Time as DT
- import Data.Time (
- TimeOfDay,
- Day,
- UTCTime,
- LocalTime,
- ZonedTime
- )
- import qualified Data.Text as T
- import Database.SQLite as SQL
- import Text.CSV
- dbMemory :: T.Text
- dbMemory = ":memory:"
- dbLocation :: T.Text
- dbLocation = "file:./db/stocks.db"
- dbLocationRd :: T.Text
- dbLocationRd = "file:./db/stocks.db?mode=ro"
- dbLocationWrt :: T.Text
- dbLocationWrt = "file:./db/stocks.db?mode=ro"
- connPoolSize :: Int
- connPoolSize = 2
- tblMemory :: T.Text
- tblMemory = "stocks_temp"
- tblName :: T.Text
- tblName = "stocks_temp"
- testRecord :: T.Text
- testRecord = "'AAPL.O','2017-01-09','04:00:00.081','Q',,,,'NAS',1,1,'SIP',0,0,,,'09:00:00.015'\n"
- testDateTime :: T.Text
- testDateTime = "2017-01-09 04:00:00.081"
- testDate :: T.Text
- testDate = "2017-01-09"
- testTime :: T.Text
- testTime = "04:00:00.081"
- getQuotes :: T.Text
- getQuotes = "Q"
- getTrades :: T.Text
- getTrades = "T"
- getTickerBA :: T.Text
- getTickerBA = "BA"
- share [mkSave "stockDef",mkPersist sqlSettings, mkMigrate "migrateAll"] [persistLowerCase|
- Stocks sql=stocksTbl
- ric T.Text sqltype=VARCHAR(15)
- date DT.Day sqltype=TEXT
- time DT.UTCTime sqltype=INTEGER
- type_torq T.Text sqlname=type sqltype=VARCHAR(10)
- exchange_id T.Text sqltype=VARCHAR(10) Maybe
- price Double sqltype=FLOAT Maybe
- volume Int sqltype=INTEGER Maybe
- buyer_id T.Text sqltype=VARCHAR(10) Maybe
- bid_price Double sqltype=FLOAT Maybe
- bid_size Int sqltype=INTEGER Maybe
- seller_id T.Text sqltype=VARCHAR(10) Maybe
- ask_price Double sqltype=FLOAT Maybe
- ask_size Int sqltype=INTEGER Maybe
- exch_time DT.TimeOfDay sqltype=INTEGER Maybe
- trd_qte_date DT.Day sqltype=TEXT Maybe
- quote_time DT.TimeOfDay sqltype=INTEGER Maybe
- deriving Show
- |]
- numOfRecords :: Int
- numOfRecords = 10
- --createDb :: IO ()
- createDb = do
- runMigration migrateAll
- -- ...
- -- pooling, https://sqlite.org/threadsafe.html
- dbConfig :: SqliteConf
- dbConfig = SqliteConf {
- sqlDatabase = dbLocation,
- sqlPoolSize = connPoolSize
- }
- --connStocks :: IO ()
- connStocks a = runSqlite (sqlDatabase dbConfig) $ do
- a
- --mainStocks :: IO ()
- --mainStocks = withSqliteConn dbLocation $ runSqlConn $ do
- mainStocks :: IO ()
- mainStocks = runSqlite dbLocation $ do
- createDb
- quotes <- selectList [StocksType_torq ==. getQuotes] []
- --liftIO $ print (quotes :: [Entity Stocks])
- liftIO $ print quotes
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement