tangled
alpha
login
or
join now
edavis.dev
/
bsky-feeds
1
fork
atom
this repo has no description
1
fork
atom
overview
issues
pulls
pipelines
feat: use string builder for mostliked generator query
Eric Davis
1 year ago
f3beffde
fccb552a
+17
-34
1 changed file
expand all
collapse all
unified
split
pkg
mostliked
generator.go
+17
-34
pkg/mostliked/generator.go
···
5
5
"database/sql"
6
6
"log"
7
7
"strconv"
8
8
+
"strings"
9
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
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
21
-
q, err := gosq.Execute(`
22
22
-
SELECT posts.uri, likes
23
23
-
FROM posts LEFT JOIN langs ON posts.uri = langs.uri
24
24
-
WHERE 1=1
25
25
-
{{if .Langs}}
26
26
-
AND (
27
27
-
{{- range $index, $lang := .Langs }}
28
28
-
{{- if $index }} OR {{ end }} lang = ?
29
29
-
{{- end }}
30
30
-
)
31
31
-
{{end}}
32
32
-
{{if .Offset}}
33
33
-
AND likes < ?
34
34
-
{{end}}
35
35
-
ORDER BY likes DESC, create_ts DESC
36
36
-
LIMIT ?
37
37
-
`, params)
38
38
-
if err != nil {
39
39
-
log.Println("error in sql template:", err)
40
40
-
}
41
41
-
42
42
-
log.Println(q)
43
43
-
44
22
var queryParams []any
45
45
-
for _, lang := range params.Langs {
46
46
-
queryParams = append(queryParams, lang.String())
23
23
+
var query strings.Builder
24
24
+
fmt.Fprint(&query, "SELECT posts.uri, likes FROM posts LEFT JOIN langs ON posts.uri = langs.uri")
25
25
+
if len(params.Langs) > 0 {
26
26
+
fmt.Fprint(&query, " WHERE ")
27
27
+
for idx, lang := range params.Langs {
28
28
+
if idx > 0 {
29
29
+
fmt.Fprint(&query, " OR ")
30
30
+
}
31
31
+
fmt.Fprint(&query, " lang = ? ")
32
32
+
queryParams = append(queryParams, lang.String())
33
33
+
}
47
34
}
48
48
-
49
49
-
if params.Offset != "" {
50
50
-
queryParams = append(queryParams, params.Offset)
51
51
-
}
52
52
-
35
35
+
// TODO cursor/offset stuff
36
36
+
fmt.Fprint(&query, "ORDER BY likes DESC, create_ts DESC")
37
37
+
fmt.Fprint(&query, "LIMIT ?")
53
38
queryParams = append(queryParams, params.Limit)
54
39
55
55
-
log.Println(queryParams)
56
56
-
57
57
-
rows, err := dbCnx.QueryContext(ctx, q, queryParams...)
40
40
+
rows, err := dbCnx.QueryContext(ctx, q.String(), queryParams...)
58
41
if err != nil {
59
42
return nil, err
60
43
}