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