From 43e206d8627ccdb94ad729d9d48d66484faba117 Mon Sep 17 00:00:00 2001 From: rtz12 Date: Tue, 29 Dec 2015 20:26:55 +0100 Subject: Importer gefixt Tags werden nur noch ein mal geschrieben Tags werden bei jedem Durchlauf neu importiert diff --git a/tools/importer/main.go b/tools/importer/main.go index f0c0856..9caf287 100644 --- a/tools/importer/main.go +++ b/tools/importer/main.go @@ -81,8 +81,7 @@ func main() { for rows.Next() { var id int var name string - rows.Scan(&id) - rows.Scan(&name) + rows.Scan(&id, &name) taglist[name] = id } idmap := make(map[int]int) @@ -90,8 +89,7 @@ func main() { for rows.Next() { var sourceID int var grilID int - rows.Scan(&sourceID) - rows.Scan(&grilID) + rows.Scan(&sourceID, &grilID) idmap[sourceID] = grilID } filepath.Walk(path, func(path string, info os.FileInfo, err error) error { @@ -99,28 +97,16 @@ func main() { return nil } g := r.Read(path) - for _, v := range g.Gril.Tags { - if _, ok := taglist[v]; ok { - continue - } - var id int - row := db.QueryRow("INSERT INTO grilist.tags (name) VALUES ($1) RETURNING id;", v) - row.Scan(&id) - taglist[v] = id - } - if _, ok := idmap[g.Gril.ID]; !ok { + var dbID int + var ok bool + if dbID, ok = idmap[g.Gril.ID]; !ok { row := db.QueryRow("INSERT INTO grilist.grils (age) VALUES (NULL) RETURNING id;") - var dbID int row.Scan(&dbID) fmt.Printf( "Assigned %d from %s to %d\n", g.Gril.ID, sourceType, dbID) - for _, v := range g.Gril.Tags { - tagID := taglist[v] - db.Exec("INSERT INTO grilist.grils_tags (gril_id, tag_id) VALUES ($1, $2);", dbID, tagID) - } db.Exec(`INSERT INTO grilist.grils_id_mappings (gril_id, source, source_id) VALUES ($1, $2, $3);`, dbID, r.ID(), g.Gril.ID) @@ -164,6 +150,24 @@ func main() { } fmt.Printf("Inserted %s\n", g.Gril.RomajiName) } + for _, v := range g.Gril.Tags { + if _, ok := taglist[v]; ok { + continue + } + var id int + row := db.QueryRow("INSERT INTO grilist.tags (name) VALUES ($1) RETURNING id;", v) + row.Scan(&id) + taglist[v] = id + } + _, err = db.Exec(`DELETE FROM grilist.grils_tags WHERE gril_id + = $1`, dbID) + LogErr(err) + for _, v := range g.Gril.Tags { + tagID := taglist[v] + _, err := db.Exec(`INSERT INTO grilist.grils_tags + (gril_id, tag_id) VALUES ($1, $2);`, dbID, tagID) + LogErr(err) + } return nil }) } -- cgit v0.10.1