diff options
author | Christopher Speller <crspeller@gmail.com> | 2015-10-07 08:24:45 -0400 |
---|---|---|
committer | Christopher Speller <crspeller@gmail.com> | 2015-10-07 08:24:45 -0400 |
commit | db532e7506713790d7d8bd62700ca339a908b2b5 (patch) | |
tree | 00859d372bb5b2f80611ff1e71c6bbabdc41c200 | |
parent | 3ce40d6a9483c8df41fae256f71fc82d366a1a34 (diff) | |
parent | 8a0d0bfa257afaa84a50620f9c85b35df753d569 (diff) | |
download | chat-db532e7506713790d7d8bd62700ca339a908b2b5.tar.gz chat-db532e7506713790d7d8bd62700ca339a908b2b5.tar.bz2 chat-db532e7506713790d7d8bd62700ca339a908b2b5.zip |
Merge pull request #943 from mattermost/plt-444
PLT-444 Parse special characters out of end of mysql search strings.
-rw-r--r-- | store/sql_post_store.go | 19 | ||||
-rw-r--r-- | store/sql_post_store_test.go | 26 |
2 files changed, 33 insertions, 12 deletions
diff --git a/store/sql_post_store.go b/store/sql_post_store.go index 668f45fbb..8d62eaad0 100644 --- a/store/sql_post_store.go +++ b/store/sql_post_store.go @@ -396,6 +396,17 @@ func (s SqlPostStore) getParentsPosts(channelId string, offset int, limit int) S return storeChannel } +var specialSearchChar = []string{ + "<", + ">", + "+", + "-", + "(", + ")", + "~", + "@", +} + func (s SqlPostStore) Search(teamId string, userId string, terms string, isHashtagSearch bool) StoreChannel { storeChannel := make(StoreChannel) @@ -411,10 +422,10 @@ func (s SqlPostStore) Search(teamId string, userId string, terms string, isHasht } } - // @ has a speical meaning in INNODB FULLTEXT indexes and - // is reserved for calc'ing distances so you - // cannot escape it so we replace it. - terms = strings.Replace(terms, "@", " ", -1) + // these chars have speical meaning and can be treated as spaces + for _, c := range specialSearchChar { + terms = strings.Replace(terms, c, " ", -1) + } var posts []*model.Post diff --git a/store/sql_post_store_test.go b/store/sql_post_store_test.go index 6a6364dc8..62d7b0100 100644 --- a/store/sql_post_store_test.go +++ b/store/sql_post_store_test.go @@ -516,7 +516,7 @@ func TestPostStoreSearch(t *testing.T) { o4.ChannelId = c1.Id o4.UserId = model.NewId() o4.Hashtags = "#hashtag" - o4.Message = "message" + o4.Message = "(message)blargh" o4 = (<-store.Post().Save(o4)).Data.(*model.Post) o5 := &model.Post{} @@ -527,37 +527,37 @@ func TestPostStoreSearch(t *testing.T) { r1 := (<-store.Post().Search(teamId, userId, "corey", false)).Data.(*model.PostList) if len(r1.Order) != 1 && r1.Order[0] != o1.Id { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r3 := (<-store.Post().Search(teamId, userId, "new", false)).Data.(*model.PostList) if len(r3.Order) != 2 && r3.Order[0] != o1.Id { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r4 := (<-store.Post().Search(teamId, userId, "john", false)).Data.(*model.PostList) if len(r4.Order) != 1 && r4.Order[0] != o2.Id { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r5 := (<-store.Post().Search(teamId, userId, "matter*", false)).Data.(*model.PostList) if len(r5.Order) != 1 && r5.Order[0] != o1.Id { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r6 := (<-store.Post().Search(teamId, userId, "#hashtag", true)).Data.(*model.PostList) if len(r6.Order) != 1 && r6.Order[0] != o4.Id { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r7 := (<-store.Post().Search(teamId, userId, "#secret", true)).Data.(*model.PostList) if len(r7.Order) != 1 && r7.Order[0] != o5.Id { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r8 := (<-store.Post().Search(teamId, userId, "@thisshouldmatchnothing", true)).Data.(*model.PostList) if len(r8.Order) != 0 { - t.Fatal("returned wrong serach result") + t.Fatal("returned wrong search result") } r9 := (<-store.Post().Search(teamId, userId, "mattermost jersey", false)).Data.(*model.PostList) @@ -569,4 +569,14 @@ func TestPostStoreSearch(t *testing.T) { if len(r10.Order) != 2 { t.Fatal("returned wrong search result") } + + r11 := (<-store.Post().Search(teamId, userId, "message blargh", false)).Data.(*model.PostList) + if len(r11.Order) != 1 { + t.Fatal("returned wrong search result") + } + + r12 := (<-store.Post().Search(teamId, userId, "blargh>", false)).Data.(*model.PostList) + if len(r12.Order) != 1 { + t.Fatal("returned wrong search result") + } } |