Skip to content

Commit

Permalink
Parse nostr filter only once.
Browse files Browse the repository at this point in the history
  • Loading branch information
ice-myles committed Feb 25, 2025
1 parent a216742 commit f9d53b9
Showing 1 changed file with 20 additions and 18 deletions.
38 changes: 20 additions & 18 deletions database/query/query_where_builder.go
Original file line number Diff line number Diff line change
Expand Up @@ -780,36 +780,38 @@ func (w *whereBuilder) WithPrefix(prefix string) *whereBuilder {
}

func (w *whereBuilder) Build(filters ...model.Filter) (sql string, params map[string]any, err error) {
var searchKeywords []string
needWrapperBrackets := len(filters) > 0
var (
searchKeywords []string
needWrapperBrackets = len(filters) > 0
dbFilters = make([]*databaseFilterSearch, 0, len(filters))
)
for idx := range filters {
dbFilter, err := parseNostrFilter(filters[idx])
if err != nil {
return "", nil, errors.Wrapf(err, "failed to parse filter %d", idx)
}
dbFilters = append(dbFilters, dbFilter)
}
if needWrapperBrackets {
for idx := range filters {
dbFilter, err := parseNostrFilter(filters[idx])
if err != nil {
return "", nil, errors.Wrapf(err, "failed to parse filter")
}
if dbFilter.isFilterEmptyExceptSearch() {
for idx := range dbFilters {
if dbFilters[idx].isFilterEmptyExceptSearch() {
needWrapperBrackets = false
}
}
if needWrapperBrackets {
w.WriteRune('(')
}
}
for idx := range filters {
for idx := range dbFilters {
w.maybeOR()
dbFilter, err := parseNostrFilter(filters[idx])
if err != nil {
return "", nil, errors.Wrapf(err, "failed to parse filter %d", idx)
}
if err := w.applyFilter(idx, dbFilter); err != nil {
if err := w.applyFilter(idx, dbFilters[idx]); err != nil {
return "", nil, errors.Wrapf(err, "failed to apply filter %d", idx)
}
if dbFilter.Dependencies != nil {
w.Dependencies = append(w.Dependencies, dbFilter.Dependencies...)
if dbFilters[idx].Dependencies != nil {
w.Dependencies = append(w.Dependencies, dbFilters[idx].Dependencies...)
}
if w.Prefix != "" && dbFilter.SearchText != "" {
searchKeywords = append(searchKeywords, replaceSpecialChars(dbFilter.SearchText)+"*")
if w.Prefix != "" && dbFilters[idx].SearchText != "" {
searchKeywords = append(searchKeywords, replaceSpecialChars(dbFilters[idx].SearchText)+"*")
}
}
if needWrapperBrackets {
Expand Down

0 comments on commit f9d53b9

Please sign in to comment.