Skip to content

Commit

Permalink
fix: Use regex and cross segment (#448)
Browse files Browse the repository at this point in the history
  • Loading branch information
flemzord committed Jun 21, 2023
1 parent 87493ec commit d996e0c
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 4 deletions.
7 changes: 6 additions & 1 deletion pkg/storage/sqlstorage/accounts.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,11 @@ func (s *Store) buildAccountsQuery(p ledger.AccountsQuery) (*sqlbuilder.SelectBu
switch s.Schema().Flavor() {
case sqlbuilder.PostgreSQL:
src := strings.Split(address, ":")
sb.Where(fmt.Sprintf("jsonb_array_length(address_json) = %d", len(src)))
if address[len(address)-2:] != ".*" {
sb.Where(fmt.Sprintf("jsonb_array_length(address_json) = %d", len(src)))
} else {
src[len(src)-1] = src[len(src)-1][:len(src[len(src)-1])-2]
}

for i, segment := range src {
if segment == ".*" || segment == "*" || segment == "" {
Expand All @@ -49,6 +53,7 @@ func (s *Store) buildAccountsQuery(p ledger.AccountsQuery) (*sqlbuilder.SelectBu
operator := "=="
if !accountNameRegex.MatchString(segment) {
operator = "like_regex"
segment = strings.ReplaceAll(segment, "\\", "\\\\")
}

arg := sb.Args.Add(segment)
Expand Down
15 changes: 12 additions & 3 deletions pkg/storage/sqlstorage/balances.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,11 @@ func (s *Store) GetBalancesAggregated(ctx context.Context, q ledger.BalancesQuer
switch s.Schema().Flavor() {
case sqlbuilder.PostgreSQL:
src := strings.Split(q.Filters.AddressRegexp, ":")
sb.Where(fmt.Sprintf("jsonb_array_length(account_json) = %d", len(src)))
if q.Filters.AddressRegexp[len(q.Filters.AddressRegexp)-2:] != ".*" {
sb.Where(fmt.Sprintf("jsonb_array_length(account_json) = %d", len(src)))
} else {
src[len(src)-1] = src[len(src)-1][:len(src[len(src)-1])-2]
}

for i, segment := range src {
if segment == ".*" || segment == "*" || segment == "" {
Expand All @@ -35,6 +39,7 @@ func (s *Store) GetBalancesAggregated(ctx context.Context, q ledger.BalancesQuer
operator := "=="
if !accountNameRegex.MatchString(segment) {
operator = "like_regex"
segment = strings.ReplaceAll(segment, "\\", "\\\\")
}

arg := sb.Args.Add(segment)
Expand Down Expand Up @@ -115,14 +120,18 @@ func (s *Store) GetBalances(ctx context.Context, q ledger.BalancesQuery) (api.Cu
switch s.Schema().Flavor() {
case sqlbuilder.PostgreSQL:
src := strings.Split(q.Filters.AddressRegexp, ":")
sb.Where(fmt.Sprintf("jsonb_array_length(account_json) = %d", len(src)))
if q.Filters.AddressRegexp[len(q.Filters.AddressRegexp)-2:] != ".*" {
sb.Where(fmt.Sprintf("jsonb_array_length(account_json) = %d", len(src)))
} else {
src[len(src)-1] = src[len(src)-1][:len(src[len(src)-1])-2]
}

for i, segment := range src {
if segment == ".*" || segment == "*" || segment == "" {
continue
}

arg := sb.Args.Add(segment)
arg := sb.Args.Add(strings.ReplaceAll(segment, "\\", "\\\\"))
sb.Where(fmt.Sprintf("account_json @@ ('$[%d] like_regex \"' || %s::text || '\"')::jsonpath", i, arg))
}
case sqlbuilder.SQLite:
Expand Down

0 comments on commit d996e0c

Please sign in to comment.