package sq import ct "gogs.mikescher.com/BlackForestBytes/goext/cursortoken" type FilterSort struct { Field string Direction ct.SortDirection } type PaginateFilter interface { SQL(params PP) (filterClause string, joinClause string, joinTables []string) Sort() []FilterSort } type genericPaginateFilter struct { sql func(params PP) (filterClause string, joinClause string, joinTables []string) sort func() []FilterSort } func (g genericPaginateFilter) SQL(params PP) (filterClause string, joinClause string, joinTables []string) { return g.sql(params) } func (g genericPaginateFilter) Sort() []FilterSort { return g.sort() } func NewPaginateFilter(sql func(params PP) (filterClause string, joinClause string, joinTables []string), sort []FilterSort) PaginateFilter { return genericPaginateFilter{ sql: func(params PP) (filterClause string, joinClause string, joinTables []string) { return sql(params) }, sort: func() []FilterSort { return sort }, } } func NewSimplePaginateFilter(filterClause string, filterParams PP, sort []FilterSort) PaginateFilter { return genericPaginateFilter{ sql: func(params PP) (string, string, []string) { params.AddAll(filterParams) return filterClause, "", nil }, sort: func() []FilterSort { return sort }, } } func NewEmptyPaginateFilter() PaginateFilter { return genericPaginateFilter{ sql: func(params PP) (string, string, []string) { return "1=1", "", nil }, sort: func() []FilterSort { return make([]FilterSort, 0) }, } }