@@ -344,22 +344,7 @@ async fn execute_account_update_query_and_update_balances(
344344 let prev_spent: Option < bool > = row. try_get ( "" , "prev_spent" ) ?;
345345 match ( prev_spent, & modification_type) {
346346 ( _, ModificationType :: Append ) | ( Some ( false ) , ModificationType :: Spend ) => {
347- // SQLite: columns are TEXT after migration, read as String and parse
348- // Postgres: columns are DECIMAL, read directly as Decimal
349- let mut amount_of_interest = match db_backend {
350- DatabaseBackend :: Postgres => row. try_get ( "" , balance_column) ?,
351- DatabaseBackend :: Sqlite => {
352- let amount_str: String = row. try_get ( "" , balance_column) ?;
353- let amount_u64 = amount_str. parse :: < u64 > ( ) . map_err ( |_| {
354- IngesterError :: DatabaseError ( format ! (
355- "Invalid {} value in SQLite: {}" ,
356- balance_column, amount_str
357- ) )
358- } ) ?;
359- Decimal :: from ( amount_u64)
360- }
361- _ => panic ! ( "Unsupported database backend" ) ,
362- } ;
347+ let mut amount_of_interest: Decimal = row. try_get ( "" , balance_column) ?;
363348 amount_of_interest *= multiplier;
364349 let owner = bytes_to_sql_format ( db_backend, row. try_get ( "" , "owner" ) ?) ;
365350 let key = match account_type {
@@ -381,40 +366,19 @@ async fn execute_account_update_query_and_update_balances(
381366 }
382367 }
383368
384- // Format values for INSERT - SQLite uses TEXT columns, Postgres uses DECIMAL
385369 let values = balance_modifications
386370 . into_iter ( )
387371 . filter ( |( _, value) | * value != Decimal :: from ( 0 ) )
388- . map ( |( key, value) | {
389- match db_backend {
390- DatabaseBackend :: Sqlite => {
391- // Store as quoted string for TEXT column
392- format ! ( "({}, '{}')" , key, value)
393- }
394- _ => {
395- // Postgres: numeric value
396- format ! ( "({}, {})" , key, value)
397- }
398- }
399- } )
372+ . map ( |( key, value) | format ! ( "({}, {})" , key, value) )
400373 . collect :: < Vec < String > > ( ) ;
401374
402375 if !values. is_empty ( ) {
403376 let values_string = values. join ( ", " ) ;
404- // SQLite: TEXT columns require CAST for arithmetic operations
405- // Postgres: DECIMAL columns support direct arithmetic
406- let raw_sql = match db_backend {
407- DatabaseBackend :: Sqlite => format ! (
408- "INSERT INTO {owner_table_name} (owner {additional_columns}, {balance_column})
409- VALUES {values_string} ON CONFLICT (owner{additional_columns})
410- DO UPDATE SET {balance_column} = CAST(CAST({owner_table_name}.{balance_column} AS INTEGER) + CAST(excluded.{balance_column} AS INTEGER) AS TEXT)" ,
411- ) ,
412- _ => format ! (
413- "INSERT INTO {owner_table_name} (owner {additional_columns}, {balance_column})
414- VALUES {values_string} ON CONFLICT (owner{additional_columns})
415- DO UPDATE SET {balance_column} = {owner_table_name}.{balance_column} + excluded.{balance_column}" ,
416- ) ,
417- } ;
377+ let raw_sql = format ! (
378+ "INSERT INTO {owner_table_name} (owner {additional_columns}, {balance_column})
379+ VALUES {values_string} ON CONFLICT (owner{additional_columns})
380+ DO UPDATE SET {balance_column} = {owner_table_name}.{balance_column} + excluded.{balance_column}" ,
381+ ) ;
418382 txn. execute ( Statement :: from_string ( db_backend, raw_sql) )
419383 . await ?;
420384 }
0 commit comments