22
33use crate :: event_manager:: db:: EventsDatabase ;
44use crate :: types:: { BlockInfo , EventId , EventOccurrence , RegisteredEvent } ;
5+ use alloy:: primitives:: Address ;
56use chrono:: { DateTime , Utc } ;
67use sqlx:: { FromRow , QueryBuilder , Row , Sqlite , SqlitePool } ;
78use std:: str:: FromStr ;
@@ -169,7 +170,7 @@ impl EventsDatabase for SqliteEventDatabase {
169170 } ;
170171
171172 let mut query_builder: QueryBuilder < Sqlite > =
172- QueryBuilder :: new ( "SELECT * FROM event_occurrences WHERE event_id IN (" ) ;
173+ QueryBuilder :: new ( "SELECT * FROM event_occurrences_with_context WHERE event_id IN (" ) ;
173174 let mut separated = query_builder. separated ( ", " ) ;
174175 for id in event_ids {
175176 separated. push_bind ( Uuid :: from ( id) ) ;
@@ -195,12 +196,23 @@ impl From<(sqlx::Error, &'static str)> for SqliteEventDatabaseError {
195196impl < ' r > FromRow < ' r , sqlx:: sqlite:: SqliteRow > for EventOccurrence {
196197 fn from_row ( row : & ' r sqlx:: sqlite:: SqliteRow ) -> Result < Self , sqlx:: Error > {
197198 let event_id: Uuid = row. try_get ( "event_id" ) ?;
199+ let address: Vec < u8 > = row. try_get ( "address" ) ?;
200+ let chain_id_str: String = row. try_get ( "chain_id" ) ?;
198201 let block_number_str: String = row. try_get ( "block_number" ) ?;
199202 let block_hash: Vec < u8 > = row. try_get ( "block_hash" ) ?;
200203 let block_timestamp: DateTime < Utc > = row. try_get ( "block_timestamp" ) ?;
201204 let raw_log_json: String = row. try_get ( "raw_log_json" ) ?;
202205 let fields_json: String = row. try_get ( "fields_json" ) ?;
203206
207+ let address =
208+ Address :: try_from ( address. as_slice ( ) ) . map_err ( |e| sqlx:: Error :: ColumnDecode {
209+ index : "address" . to_owned ( ) ,
210+ source : Box :: new ( e) ,
211+ } ) ?;
212+ let chain_id = u64:: from_str ( & chain_id_str) . map_err ( |e| sqlx:: Error :: ColumnDecode {
213+ index : "chain_id" . to_owned ( ) ,
214+ source : Box :: new ( e) ,
215+ } ) ?;
204216 let block_number =
205217 u64:: from_str ( & block_number_str) . map_err ( |e| sqlx:: Error :: ColumnDecode {
206218 index : "block_number" . to_owned ( ) ,
@@ -218,6 +230,8 @@ impl<'r> FromRow<'r, sqlx::sqlite::SqliteRow> for EventOccurrence {
218230
219231 Ok ( Self {
220232 event_id : event_id. into ( ) ,
233+ address,
234+ chain_id,
221235 block_info : BlockInfo {
222236 number : block_number,
223237 hash : block_hash. into ( ) ,
@@ -285,6 +299,8 @@ mod tests {
285299 let res = db
286300 . store_event_occurrence ( EventOccurrence {
287301 event_id : EventId :: new ( b"invalid event id" ) ,
302+ address : Default :: default ( ) ,
303+ chain_id : 0 ,
288304 data : vec ! [ ] ,
289305 raw_log : LogData :: empty ( ) ,
290306 block_info : BlockInfo {
@@ -325,6 +341,8 @@ mod tests {
325341 let res = db
326342 . store_event_occurrence ( EventOccurrence {
327343 event_id,
344+ address : Default :: default ( ) ,
345+ chain_id : 0 ,
328346 data : vec ! [ ] ,
329347 raw_log : LogData :: empty ( ) ,
330348 block_info : BlockInfo {
@@ -364,6 +382,8 @@ mod tests {
364382
365383 let occurrence = EventOccurrence {
366384 event_id,
385+ address : Default :: default ( ) ,
386+ chain_id : 0 ,
367387 data : vec ! [ ] ,
368388 raw_log : LogData :: empty ( ) ,
369389 block_info : BlockInfo {
0 commit comments