Skip to content

Commit 7d032aa

Browse files
authored
fix table renaming and from address query filter (#159)
* Adds missing filter clauses for `FromAddress` query filter param * Fixes incorrect table name checks for filter clauses when table names are being overriden * Omits empty metadata
2 parents 29109f2 + 9ffe714 commit 7d032aa

File tree

2 files changed

+27
-8
lines changed

2 files changed

+27
-8
lines changed

api/api.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -54,17 +54,17 @@ type Meta struct {
5454
// @Description Chain ID of the blockchain
5555
ChainId uint64 `json:"chain_id"`
5656
// @Description Contract address
57-
ContractAddress string `json:"address"`
57+
ContractAddress string `json:"address,omitempty"`
5858
// @Description Function or event signature
59-
Signature string `json:"signature"`
59+
Signature string `json:"signature,omitempty"`
6060
// @Description Current page number
6161
Page int `json:"page"`
6262
// @Description Number of items per page
63-
Limit int `json:"limit"`
63+
Limit int `json:"limit,omitempty"`
6464
// @Description Total number of items
65-
TotalItems int `json:"total_items"`
65+
TotalItems int `json:"total_items,omitempty"`
6666
// @Description Total number of pages
67-
TotalPages int `json:"total_pages"`
67+
TotalPages int `json:"total_pages,omitempty"`
6868
}
6969

7070
// QueryResponse represents the response structure for a query

internal/storage/clickhouse.go

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -469,6 +469,10 @@ func (c *ClickHouseConnector) GetAggregations(table string, qf QueryFilter) (Que
469469
if contractAddressClause != "" {
470470
whereClauses = append(whereClauses, contractAddressClause)
471471
}
472+
fromAddressClause := createFromAddressClause(table, qf.FromAddress)
473+
if fromAddressClause != "" {
474+
whereClauses = append(whereClauses, fromAddressClause)
475+
}
472476
signatureClause := createSignatureClause(table, qf.Signature)
473477
if signatureClause != "" {
474478
whereClauses = append(whereClauses, signatureClause)
@@ -545,8 +549,7 @@ func (c *ClickHouseConnector) GetAggregations(table string, qf QueryFilter) (Que
545549
}
546550

547551
func executeQuery[T any](c *ClickHouseConnector, table, columns string, qf QueryFilter, scanFunc func(driver.Rows) (T, error)) (QueryResult[T], error) {
548-
tableName := c.getTableName(qf.ChainId, table)
549-
query := c.buildQuery(tableName, columns, qf)
552+
query := c.buildQuery(table, columns, qf)
550553

551554
if err := common.ValidateQuery(query); err != nil {
552555
return QueryResult[T]{}, err
@@ -573,7 +576,8 @@ func executeQuery[T any](c *ClickHouseConnector, table, columns string, qf Query
573576
}
574577

575578
func (c *ClickHouseConnector) buildQuery(table, columns string, qf QueryFilter) string {
576-
query := fmt.Sprintf("SELECT %s FROM %s.%s", columns, c.cfg.Database, table)
579+
tableName := c.getTableName(qf.ChainId, table)
580+
query := fmt.Sprintf("SELECT %s FROM %s.%s", columns, c.cfg.Database, tableName)
577581
if qf.ForceConsistentData {
578582
query += " FINAL"
579583
}
@@ -590,6 +594,10 @@ func (c *ClickHouseConnector) buildQuery(table, columns string, qf QueryFilter)
590594
if contractAddressClause != "" {
591595
whereClauses = append(whereClauses, contractAddressClause)
592596
}
597+
fromAddressClause := createFromAddressClause(table, qf.FromAddress)
598+
if fromAddressClause != "" {
599+
whereClauses = append(whereClauses, fromAddressClause)
600+
}
593601
signatureClause := createSignatureClause(table, qf.Signature)
594602
if signatureClause != "" {
595603
whereClauses = append(whereClauses, signatureClause)
@@ -660,6 +668,17 @@ func createContractAddressClause(table, contractAddress string) string {
660668
return ""
661669
}
662670

671+
func createFromAddressClause(table, fromAddress string) string {
672+
if fromAddress == "" {
673+
return ""
674+
}
675+
fromAddress = strings.ToLower(fromAddress)
676+
if table == "transactions" {
677+
return fmt.Sprintf("from_address = '%s'", fromAddress)
678+
}
679+
return ""
680+
}
681+
663682
func createBlockNumbersClause(blockNumbers []*big.Int) string {
664683
if len(blockNumbers) > 0 {
665684
return fmt.Sprintf("block_number IN (%s)", getBlockNumbersStringArray(blockNumbers))

0 commit comments

Comments
 (0)