From b092da6d281a437c3f847e655c4ad182decb0978 Mon Sep 17 00:00:00 2001 From: kim <89579420+NyaaaWhatsUpDoc@users.noreply.github.com> Date: Tue, 21 May 2024 13:20:19 +0000 Subject: [performance] cache v2 filter keyword regular expressions (#2903) * add caching of filterkeyword regular expressions * formatting * fix WholeWord nil check --- internal/typeutils/internaltofrontend.go | 12 +----------- internal/typeutils/internaltofrontend_test.go | 2 ++ 2 files changed, 3 insertions(+), 11 deletions(-) (limited to 'internal/typeutils') diff --git a/internal/typeutils/internaltofrontend.go b/internal/typeutils/internaltofrontend.go index 7a5572267..d7f1fac6c 100644 --- a/internal/typeutils/internaltofrontend.go +++ b/internal/typeutils/internaltofrontend.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "math" - "regexp" "strconv" "strings" "time" @@ -746,18 +745,9 @@ func (c *Converter) statusToAPIFilterResults( keywordMatches := make([]string, 0, len(filter.Keywords)) fields := filterableTextFields(s) for _, filterKeyword := range filter.Keywords { - wholeWord := util.PtrValueOr(filterKeyword.WholeWord, false) - wordBreak := `` - if wholeWord { - wordBreak = `\b` - } - re, err := regexp.Compile(`(?i)` + wordBreak + regexp.QuoteMeta(filterKeyword.Keyword) + wordBreak) - if err != nil { - return nil, err - } var isMatch bool for _, field := range fields { - if re.MatchString(field) { + if filterKeyword.Regexp.MatchString(field) { isMatch = true break } diff --git a/internal/typeutils/internaltofrontend_test.go b/internal/typeutils/internaltofrontend_test.go index 2c4f28a9b..676870c7b 100644 --- a/internal/typeutils/internaltofrontend_test.go +++ b/internal/typeutils/internaltofrontend_test.go @@ -546,6 +546,7 @@ func (suite *InternalToFrontendTestSuite) TestWarnFilteredStatusToFrontend() { requestingAccount := suite.testAccounts["local_account_1"] expectedMatchingFilter := suite.testFilters["local_account_1_filter_1"] expectedMatchingFilterKeyword := suite.testFilterKeywords["local_account_1_filter_1_keyword_1"] + suite.NoError(expectedMatchingFilterKeyword.Compile()) expectedMatchingFilterKeyword.Filter = expectedMatchingFilter expectedMatchingFilter.Keywords = []*gtsmodel.FilterKeyword{expectedMatchingFilterKeyword} requestingAccountFilters := []*gtsmodel.Filter{expectedMatchingFilter} @@ -700,6 +701,7 @@ func (suite *InternalToFrontendTestSuite) TestHideFilteredStatusToFrontend() { expectedMatchingFilter := suite.testFilters["local_account_1_filter_1"] expectedMatchingFilter.Action = gtsmodel.FilterActionHide expectedMatchingFilterKeyword := suite.testFilterKeywords["local_account_1_filter_1_keyword_1"] + suite.NoError(expectedMatchingFilterKeyword.Compile()) expectedMatchingFilterKeyword.Filter = expectedMatchingFilter expectedMatchingFilter.Keywords = []*gtsmodel.FilterKeyword{expectedMatchingFilterKeyword} requestingAccountFilters := []*gtsmodel.Filter{expectedMatchingFilter} -- cgit v1.2.3