fixup! Add MintBurn indexer
Use multiline sql queries.
Use multiline sql queries.
where
template =
"INSERT INTO minting_policy_events \
\ (slotNo, blockHeaderHash, txId, policyId, assetName, quantity, redeemerIx, redeemerData) \
\ VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
\ ( slotNo, blockHeaderHash, txId \
\ , policyId, assetName, quantity \
\ , redeemerIx, redeemerData ) \
\ VALUES (?, ?, ?, ?, ?, ?, ?, ?) "
-- ** From Sqlite
sqliteSelectByTxIdPolicyId :: SQL.Connection -> C.TxId -> C.PolicyId -> IO [TxMintEvent]
sqliteSelectByTxIdPolicyId sqlCon txId policyId = fromRows <$> SQL.query sqlCon query (txId, policyId)
where query = "SELECT slotNo, blockHeaderHash, txId, policyId, assetName, quantity, redeemerIx, redeemerData FROM minting_policy_events WHERE txId = ? AND policyId = ? ORDER BY slotNo, txId"
where query =
" SELECT slotNo, blockHeaderHash, txId, policyId \
\ , assetName, quantity, redeemerIx, redeemerData \
\ FROM minting_policy_events \
\ WHERE txId = ? AND policyId = ? \
\ ORDER BY slotNo, txId "
sqliteSelectAll :: SQL.Connection -> IO [TxMintEvent]
sqliteSelectAll sqlCon = fromRows <$> SQL.query_ sqlCon query
where query = "SELECT slotNo, blockHeaderHash, txId, policyId, assetName, quantity, redeemerIx, redeemerData FROM minting_policy_events ORDER BY slotNo, txId"
where query =
" SELECT slotNo, blockHeaderHash, txId, policyId \
\ , assetName, quantity, redeemerIx, redeemerData \
\ FROM minting_policy_events \
\ ORDER BY slotNo, txId "
groupBySlotNo :: [TxMintEvent] -> [TxMintEvent]
groupBySlotNo events = events
persistToStorage events [email protected](MintBurnHandle sqlCon _k) = do
sqliteInsert sqlCon (map coerce $ toList events)
pure h
getStoredEvents (MintBurnHandle sqlCon k) = map MintBurnEvent . fromRows <$> SQL.query sqlCon query (SQL.Only k)
where query = "SELECT slotNo, blockHeaderHash, txId, policyId, assetName, quantity, redeemerIx, redeemerData FROM minting_policy_events WHERE slotNo >= (SELECT MAX(slotNo) - ? FROM minting_policy_events) ORDER BY slotNo, txId"
getStoredEvents (MintBurnHandle sqlCon k) =
map MintBurnEvent . fromRows <$> SQL.query sqlCon query (SQL.Only k)
where
query =
" SELECT slotNo, blockHeaderHash, txId, policyId, assetName, quantity \
\ redeemerIx, redeemerData \
\ FROM minting_policy_events \
\ WHERE slotNo >= (SELECT MAX(slotNo) - ? FROM minting_policy_events) \
\ ORDER BY slotNo, txId "
instance RI.Resumable MintBurnHandle where
resumeFromStorage h = do
rewindStorage cp [email protected](MintBurnHandle sqlCon _k) = doRewind >> pure (Just h)
where
doRewind = case cp of
C.ChainPoint slotNo _ -> SQL.execute sqlCon "DELETE FROM minting_policy_events WHERE slotNo > ?" (SQL.Only slotNo)
C.ChainPointAtGenesis -> SQL.execute_ sqlCon "DELETE FROM minting_policy_events"
C.ChainPoint slotNo _ ->
SQL.execute sqlCon "DELETE FROM minting_policy_events WHERE slotNo > ?" (SQL.Only slotNo)
C.ChainPointAtGenesis ->
SQL.execute_ sqlCon "DELETE FROM minting_policy_events"
open :: FilePath -> Int -> IO MintBurnIndexer
open dbPath bufferSize = do
Adding Milkomeda Open Oracle dev guide