Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion x/sqlbuilder/reader/err_reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ func (er ErrReader) WithPagination(Pagination) Reader {
return er
}

func (er ErrReader) WithOrdering(sqlbuilder.OrderByClause) Reader {
func (er ErrReader) WithOrdering(...sqlbuilder.OrderByClause) Reader {
return er
}

Expand Down
27 changes: 11 additions & 16 deletions x/sqlbuilder/reader/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ type Reader interface {
WithPagination(Pagination) Reader

// WithOrdering: Overwrites the ordering setting with the attribute
WithOrdering(sqlbuilder.OrderByClause) Reader
WithOrdering(...sqlbuilder.OrderByClause) Reader

// WithJoinClauses: Apply join to the SQL request
WithJoinClauses(...sqlbuilder.JoinClause) Reader
Expand All @@ -54,10 +54,7 @@ func RootReader(q sql.Queryer, table string) Reader {
}
}

var (
zeroPagination Pagination
zeroOrdering sqlbuilder.OrderByClause
)
var zeroPagination Pagination

type reader struct {
pr parentReader
Expand All @@ -75,8 +72,8 @@ func (r reader) WithPagination(p Pagination) Reader {
return reader{pr: &withPaginationReader{parentReader: r.pr, p: p}}
}

func (r reader) WithOrdering(obc sqlbuilder.OrderByClause) Reader {
return reader{pr: &withOrderingReader{parentReader: r.pr, obc: obc}}
func (r reader) WithOrdering(obcs ...sqlbuilder.OrderByClause) Reader {
return reader{pr: &withOrderingReader{parentReader: r.pr, obcs: obcs}}
}

func (r reader) WithJoinClauses(jcs ...sqlbuilder.JoinClause) Reader {
Expand All @@ -99,8 +96,8 @@ func (r reader) readQueryer(opts ReadOptions) sqlbuilder.Queryer {
stmt.Limit = sqlbuilder.NullableInt{Int: p.Limit, Valid: true}
}

if o := r.pr.ordering(); !opts.SkipOrdering && o != zeroOrdering {
stmt.OrderByClauses = []sqlbuilder.OrderByClause{o}
if os := r.pr.ordering(); !opts.SkipOrdering && len(os) != 0 {
stmt.OrderByClauses = os
}

return r.pr.queryBuilder().PrepareSelect(stmt)
Expand All @@ -121,7 +118,7 @@ type parentReader interface {
reducer() PredicateClauseReducer
predicateClauses() []sqlbuilder.PredicateClause
pagination() Pagination
ordering() sqlbuilder.OrderByClause
ordering() []sqlbuilder.OrderByClause
joinClauses() []sqlbuilder.JoinClause
}

Expand All @@ -146,11 +143,11 @@ func (wpr *withPredicatesReader) predicateClauses() []sqlbuilder.PredicateClause
type withOrderingReader struct {
parentReader

obc sqlbuilder.OrderByClause
obcs []sqlbuilder.OrderByClause
}

func (wor *withOrderingReader) ordering() sqlbuilder.OrderByClause {
return wor.obc
func (wor *withOrderingReader) ordering() []sqlbuilder.OrderByClause {
return wor.obcs
}

type withJoinClausesReader struct {
Expand All @@ -175,9 +172,7 @@ func (rr *rootReader) table() string { return rr.t }
func (rr *rootReader) reducer() PredicateClauseReducer { return rr.r }
func (rr *rootReader) pagination() Pagination { return zeroPagination }

func (rr *rootReader) ordering() sqlbuilder.OrderByClause {
return zeroOrdering
}
func (rr *rootReader) ordering() []sqlbuilder.OrderByClause { return nil }

func (rr *rootReader) predicateClauses() []sqlbuilder.PredicateClause {
return nil
Expand Down
13 changes: 13 additions & 0 deletions x/sqlbuilder/reader/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,19 @@ func TestReader(t *testing.T) {

assertReader(t, or, []int64{2, 1})

or = zr.WithOrdering(
sqlbuilder.OrderByClause{
Field: sqlbuilder.Column("y"),
Direction: sqlbuilder.Desc,
},
sqlbuilder.OrderByClause{
Field: sqlbuilder.Column("x"),
Direction: sqlbuilder.Desc,
},
)

assertReader(t, or, []int64{1, 2})

pr1 := zr.WithPagination(Pagination{Limit: 1, Offset: 1})
assertReader(t, pr1, []int64{2})

Expand Down
Loading