From c896406dc0c60de052fd5648d0f95afca28493d7 Mon Sep 17 00:00:00 2001 From: traviolus <42636319+traviolus@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:03:58 +0700 Subject: [PATCH 1/2] feat(db): create interface for valid tables --- informative-indexer/db/db.go | 11 +---------- informative-indexer/db/valid_tables.go | 22 ++++++++++++++++------ informative-indexer/prunner/prunner.go | 26 +++++++------------------- 3 files changed, 24 insertions(+), 35 deletions(-) diff --git a/informative-indexer/db/db.go b/informative-indexer/db/db.go index 76c7400..6ab95e2 100644 --- a/informative-indexer/db/db.go +++ b/informative-indexer/db/db.go @@ -140,16 +140,7 @@ func GetRowsToPruneByBlockHeight(ctx context.Context, dbClient Queryable, table } var query string - var t interface{} - - if table == "transaction_events" { - t = TransactionEvent{} - } else if table == "finalize_block_events" { - t = FinalizeBlockEvent{} - } else if table == "move_events" { - t = MoveEvent{} - } - + t := ValidTablesMap[table] columns := getColumns(t) query = fmt.Sprintf("SELECT %s FROM %s WHERE block_height <= $1", strings.Join(columns, ", "), table) diff --git a/informative-indexer/db/valid_tables.go b/informative-indexer/db/valid_tables.go index 5fca377..ddc5f2e 100644 --- a/informative-indexer/db/valid_tables.go +++ b/informative-indexer/db/valid_tables.go @@ -1,13 +1,19 @@ package db -var validTableNames = []string{ - "transaction_events", - "finalize_block_events", - "move_events", +import "github.com/jackc/pgx/v5" + +type ValidTable interface { + Unmarshal(pgx.Rows) (map[string]interface{}, error) +} + +var ValidTablesMap = map[string]ValidTable{ + "transaction_events": &TransactionEvent{}, + "finalize_block_events": &FinalizeBlockEvent{}, + "move_events": &MoveEvent{}, } func isValidTableName(tableName string) bool { - for _, validTable := range validTableNames { + for validTable, _ := range ValidTablesMap { if tableName == validTable { return true } @@ -16,5 +22,9 @@ func isValidTableName(tableName string) bool { } func GetValidTableNames() []string { - return validTableNames + var keys []string + for key := range ValidTablesMap { + keys = append(keys, key) + } + return keys } diff --git a/informative-indexer/prunner/prunner.go b/informative-indexer/prunner/prunner.go index 138a433..f378af8 100644 --- a/informative-indexer/prunner/prunner.go +++ b/informative-indexer/prunner/prunner.go @@ -127,25 +127,13 @@ func fetchRowsToPrune(ctx context.Context, dbClient db.Queryable, tableName stri var result []interface{} for rows.Next() { - var row map[string]interface{} - if tableName == "transaction_events" { - transactionEvent := db.TransactionEvent{} - row, err = transactionEvent.Unmarshal(rows) - if err != nil { - return nil, err - } - } else if tableName == "finalize_block_events" { - blockResult := db.FinalizeBlockEvent{} - row, err = blockResult.Unmarshal(rows) - if err != nil { - return nil, err - } - } else if tableName == "move_events" { - eventResult := db.MoveEvent{} - row, err = eventResult.Unmarshal(rows) - if err != nil { - return nil, err - } + table, ok := db.ValidTablesMap[tableName] + if !ok { + return nil, fmt.Errorf("failed to get table interface from table name %s", tableName) + } + row, err := table.Unmarshal(rows) + if err != nil { + return nil, err } result = append(result, row) } From ea305f6fc023e7ad357050ea349aa3358cf79898 Mon Sep 17 00:00:00 2001 From: traviolus <42636319+traviolus@users.noreply.github.com> Date: Mon, 13 Jan 2025 16:13:52 +0700 Subject: [PATCH 2/2] impv(db): update valid tables methods --- informative-indexer/db/db.go | 10 ++++------ informative-indexer/db/valid_tables.go | 8 ++------ 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/informative-indexer/db/db.go b/informative-indexer/db/db.go index 6ab95e2..82a8bec 100644 --- a/informative-indexer/db/db.go +++ b/informative-indexer/db/db.go @@ -135,16 +135,14 @@ func GetRowCount(ctx context.Context, dbClient Queryable, table string) (int64, } func GetRowsToPruneByBlockHeight(ctx context.Context, dbClient Queryable, table string, threshold int64) (pgx.Rows, error) { - if !isValidTableName(table) { + t, ok := ValidTablesMap[table] + if !ok { return nil, fmt.Errorf("invalid table name: %s", table) + } - var query string - t := ValidTablesMap[table] columns := getColumns(t) - - query = fmt.Sprintf("SELECT %s FROM %s WHERE block_height <= $1", strings.Join(columns, ", "), table) - + query := fmt.Sprintf("SELECT %s FROM %s WHERE block_height <= $1", strings.Join(columns, ", "), table) rows, err := QueryRowsWithTimeout(ctx, dbClient, query, threshold) if err != nil { return nil, fmt.Errorf("failed to get rows to prune from table %s: %w", table, err) diff --git a/informative-indexer/db/valid_tables.go b/informative-indexer/db/valid_tables.go index ddc5f2e..4be6cb0 100644 --- a/informative-indexer/db/valid_tables.go +++ b/informative-indexer/db/valid_tables.go @@ -13,12 +13,8 @@ var ValidTablesMap = map[string]ValidTable{ } func isValidTableName(tableName string) bool { - for validTable, _ := range ValidTablesMap { - if tableName == validTable { - return true - } - } - return false + _, ok := ValidTablesMap[tableName] + return ok } func GetValidTableNames() []string {