SQLite support is now relatively sane.

[?]
Dec 15, 2014, 10:10 PM
JKMHA2QGDSVHD4DKDYQUYNJJ3LUQCOPOWEC3543BDWDXLYIBBZXQC

Dependencies

  • [2] TLQ72DSJ Lenses, sqlite-simple
  • [3] MWUPXTBF A few steps down a road to be abandoned.
  • [4] LAROLAYU WIP
  • [5] FRPWIKCN Added log event parsing to Quixotic.Database.SQLite
  • [6] WO2MINIF Auctions now compile!
  • [7] 64VI73NP Server now compiles using abstracted SQLite
  • [8] EMVTF2IW WIP moving back to snap.
  • [9] 64C6AWH6 Rename Ananke -> Quixotic, project reboot.
  • [10] 75N3UJ4J More progression toward lenses.
  • [*] LUM4VQJI Increment.

Change contents

  • edit in lib/Quixotic/Database/SQLite.hs at line 7
    [3.101][2.791:817]()
    import Control.Error.Safe
  • replacement in lib/Quixotic/Database/SQLite.hs at line 8
    [3.101][3.3685:3719](),[3.1022][3.3685:3719](),[3.3685][3.3685:3719](),[3.3719][3.1023:1045]()
    import Control.Monad.Trans.Either
    import Data.Text.Lens
    [3.1022]
    [2.818]
    import Data.Hourglass
  • edit in lib/Quixotic/Database/SQLite.hs at line 10
    [2.848]
    [3.102]
    import Database.SQLite.Simple.ToField
  • edit in lib/Quixotic/Database/SQLite.hs at line 38
    [2.1498]
    [12.797]
    newtype PBid = PBid Bid
    makePrisms ''PBid
    instance FromRow PBid where
    fromRow =
    let bidParser = Bid <$> fmap UserId field <*> fmap Seconds field <*> fmap BTC field <*> field
    in fmap PBid bidParser
    newtype PSeconds = PSeconds Seconds
    instance ToField PSeconds where
    toField (PSeconds (Seconds i)) = toField i
    newtype PUserId = PUserId UserId
    instance ToField PUserId where
    toField (PUserId (UserId i)) = toField i
    newtype PAuctionId = PAuctionId AuctionId
    instance ToField PAuctionId where
    toField (PAuctionId (AuctionId i)) = toField i
    newtype PBTC = PBTC BTC
    instance ToField PBTC where
    toField (PBTC (BTC i)) = toField i
  • replacement in lib/Quixotic/Database/SQLite.hs at line 90
    [2.2323][2.2323:2357]()
    readAuction' (AuctionId aid) = do
    [2.2323]
    [2.2357]
    readAuction' aucId = do
  • replacement in lib/Quixotic/Database/SQLite.hs at line 94
    [2.2466][2.2466:2481]()
    (Only aid)
    [2.2466]
    [2.2481]
    (Only $ PAuctionId aucId)
  • replacement in lib/Quixotic/Database/SQLite.hs at line 98
    [2.2594][2.2594:2630]()
    recordBid' (AuctionId aid) bid = do
    [2.2594]
    [2.2630]
    recordBid' aucId bid = do
  • replacement in lib/Quixotic/Database/SQLite.hs at line 102
    [2.2769][2.2769:2848]()
    (aid, bid ^. bidUser, bid ^. bidSeconds, bid ^. bidAmount, bid ^. bidTime)
    [2.2769]
    [3.4645]
    ( PAuctionId aucId
    , PUserId $ bid ^. bidUser
    , PSeconds $ bid ^. bidSeconds
    , PBTC $ bid ^. bidAmount
    , bid ^. bidTime
    )
  • replacement in lib/Quixotic/Database/SQLite.hs at line 109
    [3.4646][2.2849:2936]()
    readBids' :: AuctionId -> ReaderT Connection IO [(UTCTime, Bid)]
    readBids' = undefined
    [3.4646]
    [3.4898]
    readBids' :: AuctionId -> ReaderT Connection IO [Bid]
    readBids' aucId = do
    conn <- ask
    rows <- lift $ query conn
    "SELECT user_id, bid_seconds, bid_amount, bid_time FROM bids WHERE auction_id = ?"
    (Only $ PAuctionId aucId)
    lift . return $ fmap (^. _PBid) rows
  • replacement in lib/Quixotic/Database/SQLite.hs at line 118
    [2.2989][2.2989:3013]()
    createUser' = undefined
    [2.2989]
    [3.735]
    createUser' user = do
    conn <- ask
    lift $ execute conn
    "INSERT INTO users (btc_addr, email) VALUES (?, ?)"
    (user ^. (userAddress . address), user ^. userEmail)
    lift . fmap UserId $ lastInsertRowId conn
  • replacement in lib/Quixotic/Database.hs at line 16
    [2.3388][3.5827:5885](),[3.5827][3.5827:5885]()
    , readBids :: AuctionId -> ReaderT a m [(UTCTime, Bid)]
    [2.3388]
    [3.5885]
    , readBids :: AuctionId -> ReaderT a m [Bid]
  • edit in lib/Quixotic/Users.hs at line 2
    [3.6008]
    [3.6008]
    {-# LANGUAGE TemplateHaskell #-}
  • edit in lib/Quixotic/Users.hs at line 7
    [3.6059]
    [3.1190]
    import Control.Lens
  • replacement in lib/Quixotic/Users.hs at line 10
    [3.6060][3.1207:1255]()
    newtype UserId = UserId Int deriving (Show, Eq)
    [3.6060]
    [3.6088]
    newtype UserId = UserId Int64 deriving (Show, Eq)
  • replacement in lib/Quixotic/Users.hs at line 13
    [3.6106][3.6106:6155]()
    { userAddress :: BtcAddr
    , userEmail :: Text
    [3.6106]
    [3.6155]
    { _userAddress :: BtcAddr
    , _userEmail :: Text
  • edit in lib/Quixotic/Users.hs at line 16
    [3.6159]
    makeLenses ''User