Skip to content

Commit 3dca69f

Browse files
committed
fix: sanitize column names in pagination and add test for column function
1 parent 6890ffb commit 3dca69f

2 files changed

Lines changed: 32 additions & 1 deletion

File tree

page.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ func (p *Page) GetOrder(defaultSort ...string) []Sort {
134134
continue
135135
}
136136
if s, ok := NewSort(part); ok {
137-
s.Column = pgx.Identifier(strings.Split(s.Column, ".")).Sanitize()
138137
sort = append(sort, s)
139138
}
140139
}
@@ -235,6 +234,7 @@ func (p Paginator[T]) getOrder(page *Page) []string {
235234
if p.settings.ColumnFunc != nil {
236235
s.Column = p.settings.ColumnFunc(s.Column)
237236
}
237+
s.Column = pgx.Identifier(strings.Split(s.Column, ".")).Sanitize()
238238
list[i] = s.String()
239239
}
240240
return list

page_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,3 +150,34 @@ func TestPaginationEdgeCases(t *testing.T) {
150150
require.NoError(t, err4)
151151
require.Equal(t, "SELECT * FROM t LIMIT 21 OFFSET 0", sql4)
152152
}
153+
154+
func TestColumnFunc(t *testing.T) {
155+
fn := func(column string) string {
156+
switch column {
157+
case "id":
158+
return "ID"
159+
case "name":
160+
return "NAME"
161+
default:
162+
return column
163+
}
164+
}
165+
paginator := pgkit.NewPaginator[T](
166+
pgkit.WithColumnFunc(fn),
167+
)
168+
page := &pgkit.Page{
169+
Page: 1,
170+
Size: 10,
171+
Sort: []pgkit.Sort{
172+
{Column: "id", Order: pgkit.Asc},
173+
{Column: "name", Order: pgkit.Desc},
174+
{Column: "created_at", Order: pgkit.Asc},
175+
},
176+
}
177+
_, query := paginator.PrepareQuery(sq.Select("*").From("t"), page)
178+
179+
sql, args, err := query.ToSql()
180+
require.NoError(t, err)
181+
require.Equal(t, `SELECT * FROM t ORDER BY "ID" ASC, "NAME" DESC, "created_at" ASC LIMIT 11 OFFSET 0`, sql)
182+
require.Empty(t, args)
183+
}

0 commit comments

Comments
 (0)