cp result to outd

main
Bel LaPointe 2025-06-04 11:15:25 -06:00
parent e543b119e8
commit 28b80f0b6b
1 changed files with 11 additions and 79 deletions

86
main.go
View File

@ -10,7 +10,6 @@ import (
"path" "path"
"slices" "slices"
"strings" "strings"
"sync"
//_ "github.com/glebarez/sqlite" //_ "github.com/glebarez/sqlite"
"github.com/google/uuid" "github.com/google/uuid"
@ -26,6 +25,7 @@ func main() {
data := os.Args[1] data := os.Args[1]
fromU := os.Args[2] fromU := os.Args[2]
toU := os.Args[3] toU := os.Args[3]
outd := os.Args[4]
workd, err := ioutil.TempDir(os.TempDir(), "jellyfin-user-clone.*") workd, err := ioutil.TempDir(os.TempDir(), "jellyfin-user-clone.*")
if err != nil { if err != nil {
@ -131,22 +131,20 @@ func main() {
} }
} }
} }
break // TODO
} }
/* entries, err := os.ReadDir(workd)
originalJelly, _ := sql.Open("sqlite", path.Join(data, jellyDB)) if err != nil {
defer originalJelly.Close()
originalLibrary, _ := sql.Open("sqlite", path.Join(data, libDB))
defer originalLibrary.Close()
if err := Diff(originalJelly, jellyfinDB); err != nil {
log.Fatal(err) log.Fatal(err)
} }
if err := Diff(originalLibrary, libraryDB); err != nil { for _, entry := range entries {
os.MkdirAll(path.Dir(path.Join(path.Join(outd, entry.Name()))), os.ModePerm)
if err := cp(path.Join(workd, entry.Name()), path.Join(outd, entry.Name())); err != nil {
log.Fatal(err)
} else if err := os.Remove(path.Join(workd, entry.Name())); err != nil {
log.Fatal(err) log.Fatal(err)
} }
*/ }
} }
func CloneForColumn[T any](db *sql.DB, table, column string, from, to T, fixed map[string]any) error { func CloneForColumn[T any](db *sql.DB, table, column string, from, to T, fixed map[string]any) error {
@ -400,69 +398,3 @@ func Select[T any](db *sql.DB, q string, args ...any) ([]T, error) {
return results, rows.Err() return results, rows.Err()
} }
func Diff(a, b *sql.DB) error {
tables, err := Tables(a)
if err != nil {
return err
}
for _, table := range tables {
if err := DiffTable(a, b, table); err != nil {
log.Printf("DIFF ERR | (%s) %v", table, err)
}
}
return nil
}
func DiffTable(a, b *sql.DB, table string) error {
orderBys, err := Select[string](a, `SELECT name FROM PRAGMA_TABLE_INFO($1) WHERE "pk" LIMIT 1`, table)
if err != nil {
return err
} else if len(orderBys) == 0 {
orderBys, err = Select[string](a, `SELECT name FROM PRAGMA_TABLE_INFO($1) LIMIT 1`, table)
if err != nil {
return err
} else if len(orderBys) == 0 {
return nil
}
}
orderBy := orderBys[0]
columns, err := Columns(a, table)
if err != nil {
return err
}
q := fmt.Sprintf(`SELECT %s FROM %q ORDER BY %q`, func() string {
quoted := []string{}
for _, col := range columns {
quoted = append(quoted, fmt.Sprintf("%q", col))
}
return strings.Join(quoted, ", ")
}(), table, orderBy)
//log.Printf("DIFF | %s", q)
wg := &sync.WaitGroup{}
defer wg.Wait()
var rowa []any
var rowb []any
wg.Add(1)
go func() {
defer wg.Done()
if err := ForEach(a, func(row []any) error { rowa = row; return nil }, q); err != nil {
log.Fatalf("failed foreach a: %v", err)
}
}()
wg.Add(1)
go func() {
defer wg.Done()
if err := ForEach(b, func(row []any) error { rowb = row; return nil }, q); err != nil {
log.Fatalf("failed foreach b: %v", err)
}
}()
_, _ = rowa, rowb
return nil
}