diff --git a/pkg/codegen/assets/store_rdbms.gen.go.tpl b/pkg/codegen/assets/store_rdbms.gen.go.tpl index 131308c34..4d9403cda 100644 --- a/pkg/codegen/assets/store_rdbms.gen.go.tpl +++ b/pkg/codegen/assets/store_rdbms.gen.go.tpl @@ -199,7 +199,7 @@ func (s Store) {{ unexport "fetchFullPageOf" $.Types.Plural }} ( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/pkg/filter/pagination.go b/pkg/filter/pagination.go index 1881cd885..02631ecbe 100644 --- a/pkg/filter/pagination.go +++ b/pkg/filter/pagination.go @@ -186,13 +186,12 @@ func (p *PagingCursor) Sort(sort SortExprSet) (SortExprSet, error) { } // check compatibility - ss := sort.Columns() - if len(p.keys) != len(ss) { + if len(p.keys) != len(sort) { return nil, fmt.Errorf("incompatible sort") } for k := range p.keys { - if p.keys[k] != ss[k] { + if p.keys[k] != sort[k].Column { return nil, fmt.Errorf("incompatible sort") } } diff --git a/pkg/filter/sorting.go b/pkg/filter/sorting.go index 4a408b2c6..83f3ec767 100644 --- a/pkg/filter/sorting.go +++ b/pkg/filter/sorting.go @@ -1,6 +1,7 @@ package filter import ( + "encoding/json" "fmt" "github.com/cortezaproject/corteza-server/pkg/slice" "regexp" @@ -70,13 +71,18 @@ func parseSort(in string) (set SortExprSet, err error) { return set, nil } -// UnmarshalJSON parses stringified sort expression when passed inside JSON +// UnmarshalJSON parses sort expression when passed inside JSON func (set *SortExprSet) UnmarshalJSON(in []byte) error { tmp, err := parseSort(string(in)) *set = tmp return err } +// UnmarshalJSON parses sort expression when passed inside JSON +func (set SortExprSet) MarshalJSON() ([]byte, error) { + return json.Marshal(set.String()) +} + // UnmarshalJSON parses stringified sort expression when passed inside JSON func (set *SortExprSet) Set(in string) error { tmp, err := parseSort(in) diff --git a/store/rdbms/actionlog.gen.go b/store/rdbms/actionlog.gen.go index 106463a07..cec7467e3 100644 --- a/store/rdbms/actionlog.gen.go +++ b/store/rdbms/actionlog.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfActionlogs( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/applications.gen.go b/store/rdbms/applications.gen.go index 470f95794..2e5da1c3a 100644 --- a/store/rdbms/applications.gen.go +++ b/store/rdbms/applications.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfApplications( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/compose_charts.gen.go b/store/rdbms/compose_charts.gen.go index 783f8bd74..b23c130a4 100644 --- a/store/rdbms/compose_charts.gen.go +++ b/store/rdbms/compose_charts.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfComposeCharts( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/compose_modules.gen.go b/store/rdbms/compose_modules.gen.go index 391ab0e21..8b090b0ae 100644 --- a/store/rdbms/compose_modules.gen.go +++ b/store/rdbms/compose_modules.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfComposeModules( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/compose_namespaces.gen.go b/store/rdbms/compose_namespaces.gen.go index a88f413f2..fe0540cf1 100644 --- a/store/rdbms/compose_namespaces.gen.go +++ b/store/rdbms/compose_namespaces.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfComposeNamespaces( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/compose_pages.gen.go b/store/rdbms/compose_pages.gen.go index c7d54e940..61f9a929a 100644 --- a/store/rdbms/compose_pages.gen.go +++ b/store/rdbms/compose_pages.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfComposePages( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/compose_records.gen.go b/store/rdbms/compose_records.gen.go index 24c8e07d9..05cadb5ad 100644 --- a/store/rdbms/compose_records.gen.go +++ b/store/rdbms/compose_records.gen.go @@ -90,7 +90,7 @@ func (s Store) fetchFullPageOfComposeRecords( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/messaging_channels.gen.go b/store/rdbms/messaging_channels.gen.go index 68db2cf95..796a68545 100644 --- a/store/rdbms/messaging_channels.gen.go +++ b/store/rdbms/messaging_channels.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfMessagingChannels( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/reminders.gen.go b/store/rdbms/reminders.gen.go index d7e44c413..f0a7cebdf 100644 --- a/store/rdbms/reminders.gen.go +++ b/store/rdbms/reminders.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfReminders( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/roles.gen.go b/store/rdbms/roles.gen.go index e1562e013..b07081824 100644 --- a/store/rdbms/roles.gen.go +++ b/store/rdbms/roles.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfRoles( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/rdbms/users.gen.go b/store/rdbms/users.gen.go index 3a85abc52..17b8bf479 100644 --- a/store/rdbms/users.gen.go +++ b/store/rdbms/users.gen.go @@ -148,7 +148,7 @@ func (s Store) fetchFullPageOfUsers( // if limit is not set or we've already collected enough items // we can break the loop right away - if limit == 0 || fetched == 0 || fetched < limit { + if limit == 0 || fetched == 0 || fetched <= limit { break } diff --git a/store/tests/users_test.go b/store/tests/users_test.go index 2793df62d..8b4659749 100644 --- a/store/tests/users_test.go +++ b/store/tests/users_test.go @@ -320,8 +320,13 @@ func testUsers(t *testing.T, s store.Users) { f := types.UserFilter{} f.Sort = filter.SortExprSet{&filter.SortExpr{Column: "email", Descending: true}, &filter.SortExpr{Column: "handle", Descending: true}} - f.Limit = 1 + f.Limit = uint(len(set)) set, f, err := store.SearchUsers(ctx, s, f) + req.Len(set, int(f.Limit)) + req.NoError(err) + + f.Limit = 1 + set, f, err = store.SearchUsers(ctx, s, f) req.NoError(err) // go to next page with different sorting