forked from tangled.org/core
this repo has no description
at master 1.8 kB view raw
1package db 2 3import ( 4 "fmt" 5 "strings" 6 7 "github.com/bluesky-social/indigo/atproto/syntax" 8) 9 10type RepoLanguage struct { 11 Id int64 12 RepoAt syntax.ATURI 13 Ref string 14 IsDefaultRef bool 15 Language string 16 Bytes int64 17} 18 19func GetRepoLanguages(e Execer, filters ...filter) ([]RepoLanguage, error) { 20 var conditions []string 21 var args []any 22 for _, filter := range filters { 23 conditions = append(conditions, filter.Condition()) 24 args = append(args, filter.Arg()...) 25 } 26 27 whereClause := "" 28 if conditions != nil { 29 whereClause = " where " + strings.Join(conditions, " and ") 30 } 31 32 query := fmt.Sprintf( 33 `select id, repo_at, ref, is_default_ref, language, bytes from repo_languages %s`, 34 whereClause, 35 ) 36 rows, err := e.Query(query, args...) 37 38 if err != nil { 39 return nil, fmt.Errorf("failed to execute query: %w ", err) 40 } 41 42 var langs []RepoLanguage 43 for rows.Next() { 44 var rl RepoLanguage 45 var isDefaultRef int 46 47 err := rows.Scan( 48 &rl.Id, 49 &rl.RepoAt, 50 &rl.Ref, 51 &isDefaultRef, 52 &rl.Language, 53 &rl.Bytes, 54 ) 55 if err != nil { 56 return nil, fmt.Errorf("failed to scan: %w ", err) 57 } 58 59 if isDefaultRef != 0 { 60 rl.IsDefaultRef = true 61 } 62 63 langs = append(langs, rl) 64 } 65 if err = rows.Err(); err != nil { 66 return nil, fmt.Errorf("failed to scan rows: %w ", err) 67 } 68 69 return langs, nil 70} 71 72func InsertRepoLanguages(e Execer, langs []RepoLanguage) error { 73 stmt, err := e.Prepare( 74 "insert or replace into repo_languages (repo_at, ref, is_default_ref, language, bytes) values (?, ?, ?, ?, ?)", 75 ) 76 if err != nil { 77 return err 78 } 79 80 for _, l := range langs { 81 isDefaultRef := 0 82 if l.IsDefaultRef { 83 isDefaultRef = 1 84 } 85 86 _, err := stmt.Exec(l.RepoAt, l.Ref, isDefaultRef, l.Language, l.Bytes) 87 if err != nil { 88 return err 89 } 90 } 91 92 return nil 93}