Fix case-insensitive task search for postgresql (#524)
"Fix" gocyclo Fix case-insensitive task search for postgresql Co-authored-by: kolaente <k@knt.li> Reviewed-on: https://kolaente.dev/vikunja/api/pulls/524
This commit is contained in:
parent
92e5e2db6a
commit
8758fb6ac5
3 changed files with 32 additions and 3 deletions
2
Makefile
2
Makefile
|
@ -219,7 +219,7 @@ gocyclo-check:
|
||||||
go get -u github.com/fzipp/gocyclo; \
|
go get -u github.com/fzipp/gocyclo; \
|
||||||
go install $(GOFLAGS) github.com/fzipp/gocyclo; \
|
go install $(GOFLAGS) github.com/fzipp/gocyclo; \
|
||||||
fi
|
fi
|
||||||
for S in $(GOFILES); do gocyclo -over 27 $$S || exit 1; done;
|
for S in $(GOFILES); do gocyclo -over 28 $$S || exit 1; done;
|
||||||
|
|
||||||
.PHONY: static-check
|
.PHONY: static-check
|
||||||
static-check:
|
static-check:
|
||||||
|
|
|
@ -89,6 +89,24 @@ func TestTaskCollection(t *testing.T) {
|
||||||
assert.NotContains(t, rec.Body.String(), `task #13`)
|
assert.NotContains(t, rec.Body.String(), `task #13`)
|
||||||
assert.NotContains(t, rec.Body.String(), `task #14`)
|
assert.NotContains(t, rec.Body.String(), `task #14`)
|
||||||
})
|
})
|
||||||
|
t.Run("Search case insensitive", func(t *testing.T) {
|
||||||
|
rec, err := testHandler.testReadAllWithUser(url.Values{"s": []string{"tASk #6"}}, urlParams)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #1`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #2`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #3`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #4`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #5`)
|
||||||
|
assert.Contains(t, rec.Body.String(), `task #6`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #7`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #8`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #9`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #10`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #11`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #12`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #13`)
|
||||||
|
assert.NotContains(t, rec.Body.String(), `task #14`)
|
||||||
|
})
|
||||||
t.Run("Sort Order", func(t *testing.T) {
|
t.Run("Sort Order", func(t *testing.T) {
|
||||||
// TODO: Add more cases
|
// TODO: Add more cases
|
||||||
// should equal priority asc
|
// should equal priority asc
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
package models
|
package models
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"code.vikunja.io/api/pkg/config"
|
||||||
"code.vikunja.io/api/pkg/files"
|
"code.vikunja.io/api/pkg/files"
|
||||||
"code.vikunja.io/api/pkg/metrics"
|
"code.vikunja.io/api/pkg/metrics"
|
||||||
"code.vikunja.io/api/pkg/timeutil"
|
"code.vikunja.io/api/pkg/timeutil"
|
||||||
|
@ -235,9 +236,19 @@ func getRawTasksForLists(lists []*List, opts *taskOptions) (tasks []*Task, resul
|
||||||
queryCount := x.NewSession()
|
queryCount := x.NewSession()
|
||||||
|
|
||||||
if len(opts.search) > 0 {
|
if len(opts.search) > 0 {
|
||||||
|
// Postgres' is case sensitive by default.
|
||||||
|
// To work around this, we're using ILIKE as opposed to normal LIKE statements.
|
||||||
|
// ILIKE is preferred over LOWER(text) LIKE for performance reasons.
|
||||||
|
// See https://stackoverflow.com/q/7005302/10924593
|
||||||
|
// Seems okay to use that now, we may need to find a better solution overall in the future.
|
||||||
|
if config.DatabaseType.GetString() == "postgres" {
|
||||||
|
query = query.Where("text ILIKE ?", "%"+opts.search+"%")
|
||||||
|
queryCount = queryCount.Where("text ILIKE ?", "%"+opts.search+"%")
|
||||||
|
} else {
|
||||||
query = query.Where("text LIKE ?", "%"+opts.search+"%")
|
query = query.Where("text LIKE ?", "%"+opts.search+"%")
|
||||||
queryCount = queryCount.Where("text LIKE ?", "%"+opts.search+"%")
|
queryCount = queryCount.Where("text LIKE ?", "%"+opts.search+"%")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if len(listIDs) > 0 {
|
if len(listIDs) > 0 {
|
||||||
query = query.In("list_id", listIDs)
|
query = query.In("list_id", listIDs)
|
||||||
|
|
Loading…
Reference in a new issue