this repo has no description

feat: use string builder for mostliked generator query

Changed files
+17 -34
pkg
mostliked
+17 -34
pkg/mostliked/generator.go
··· 5 5 "database/sql" 6 6 "log" 7 7 "strconv" 8 + "strings" 9 + "fmt" 8 10 9 11 appbsky "github.com/bluesky-social/indigo/api/bsky" 10 12 "github.com/edavis/bsky-feeds/pkg/feeds" 11 13 _ "github.com/mattn/go-sqlite3" 12 - "github.com/sanggonlee/gosq" 13 14 ) 14 15 15 16 type PostRow struct { ··· 18 19 } 19 20 20 21 func getPosts(ctx context.Context, dbCnx *sql.DB, params feeds.FeedgenParams) ([]PostRow, error) { 21 - q, err := gosq.Execute(` 22 - SELECT posts.uri, likes 23 - FROM posts LEFT JOIN langs ON posts.uri = langs.uri 24 - WHERE 1=1 25 - {{if .Langs}} 26 - AND ( 27 - {{- range $index, $lang := .Langs }} 28 - {{- if $index }} OR {{ end }} lang = ? 29 - {{- end }} 30 - ) 31 - {{end}} 32 - {{if .Offset}} 33 - AND likes < ? 34 - {{end}} 35 - ORDER BY likes DESC, create_ts DESC 36 - LIMIT ? 37 - `, params) 38 - if err != nil { 39 - log.Println("error in sql template:", err) 40 - } 41 - 42 - log.Println(q) 43 - 44 22 var queryParams []any 45 - for _, lang := range params.Langs { 46 - queryParams = append(queryParams, lang.String()) 23 + var query strings.Builder 24 + fmt.Fprint(&query, "SELECT posts.uri, likes FROM posts LEFT JOIN langs ON posts.uri = langs.uri") 25 + if len(params.Langs) > 0 { 26 + fmt.Fprint(&query, " WHERE ") 27 + for idx, lang := range params.Langs { 28 + if idx > 0 { 29 + fmt.Fprint(&query, " OR ") 30 + } 31 + fmt.Fprint(&query, " lang = ? ") 32 + queryParams = append(queryParams, lang.String()) 33 + } 47 34 } 48 - 49 - if params.Offset != "" { 50 - queryParams = append(queryParams, params.Offset) 51 - } 52 - 35 + // TODO cursor/offset stuff 36 + fmt.Fprint(&query, "ORDER BY likes DESC, create_ts DESC") 37 + fmt.Fprint(&query, "LIMIT ?") 53 38 queryParams = append(queryParams, params.Limit) 54 39 55 - log.Println(queryParams) 56 - 57 - rows, err := dbCnx.QueryContext(ctx, q, queryParams...) 40 + rows, err := dbCnx.QueryContext(ctx, q.String(), queryParams...) 58 41 if err != nil { 59 42 return nil, err 60 43 }