cp result to outd
parent
e543b119e8
commit
28b80f0b6b
90
main.go
90
main.go
|
|
@ -10,7 +10,6 @@ import (
|
|||
"path"
|
||||
"slices"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
//_ "github.com/glebarez/sqlite"
|
||||
"github.com/google/uuid"
|
||||
|
|
@ -26,6 +25,7 @@ func main() {
|
|||
data := os.Args[1]
|
||||
fromU := os.Args[2]
|
||||
toU := os.Args[3]
|
||||
outd := os.Args[4]
|
||||
|
||||
workd, err := ioutil.TempDir(os.TempDir(), "jellyfin-user-clone.*")
|
||||
if err != nil {
|
||||
|
|
@ -131,22 +131,20 @@ func main() {
|
|||
}
|
||||
}
|
||||
}
|
||||
break // TODO
|
||||
}
|
||||
|
||||
/*
|
||||
originalJelly, _ := sql.Open("sqlite", path.Join(data, jellyDB))
|
||||
defer originalJelly.Close()
|
||||
originalLibrary, _ := sql.Open("sqlite", path.Join(data, libDB))
|
||||
defer originalLibrary.Close()
|
||||
|
||||
if err := Diff(originalJelly, jellyfinDB); err != nil {
|
||||
entries, err := os.ReadDir(workd)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
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)
|
||||
}
|
||||
if err := Diff(originalLibrary, libraryDB); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
*/
|
||||
}
|
||||
}
|
||||
|
||||
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()
|
||||
}
|
||||
|
||||
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
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue