diff --git a/BasicMap.go b/BasicMap.go index 614311c..b2e8b9d 100644 --- a/BasicMap.go +++ b/BasicMap.go @@ -2,6 +2,7 @@ package ch import ( "cmp" + "errors" "fmt" "math/bits" "slices" @@ -111,6 +112,9 @@ func (b *basicMapStorage) DecodeHashes(hashes SavedHashes) error { b.hashes[hashType] = make([]structHash, len(sourceHashes)) for savedHash, idlistLocation := range sourceHashes { b.hashes[hashType] = append(b.hashes[hashType], structHash{savedHash, &hashes.IDs[idlistLocation]}) + for _, id := range hashes.IDs[idlistLocation] { + b.ids[id] = &hashes.IDs[idlistLocation] + } } } for hashType := range b.hashes { @@ -155,22 +159,22 @@ func (b *basicMapStorage) EncodeHashes() (SavedHashes, error) { return hashes, nil } -func (b *basicMapStorage) AssociateIDs(newids []NewIDs) { +func (b *basicMapStorage) AssociateIDs(newids []NewIDs) error { for _, newid := range newids { ids, found := b.ids[newid.OldID] if !found { - msg := "No IDs belonging to " + newid.OldID.Domain + "exist on this server" - panic(msg) + msg := "No IDs belonging to " + string(newid.OldID.Domain) + " exist on this server" + return errors.New(msg) } *ids = InsertID(*ids, newid.NewID) } + return nil } func (b *basicMapStorage) GetIDs(id ID) IDList { ids, found := b.ids[id] if !found { - msg := "No IDs belonging to " + id.Domain + "exist on this server" - panic(msg) + return nil } return ToIDList(*ids) } diff --git a/hashing.go b/hashing.go index f7c9775..f1468ac 100644 --- a/hashing.go +++ b/hashing.go @@ -163,7 +163,7 @@ type HashStorage interface { MapHashes(ImageHash) DecodeHashes(hashes SavedHashes) error EncodeHashes() (SavedHashes, error) - AssociateIDs(newIDs []NewIDs) + AssociateIDs(newIDs []NewIDs) error GetIDs(id ID) IDList } diff --git a/sqlite.go b/sqlite.go index d937390..52be9b6 100644 --- a/sqlite.go +++ b/sqlite.go @@ -354,26 +354,26 @@ func (s *sqliteStorage) EncodeHashes() (SavedHashes, error) { return hashes, nil } -func (s *sqliteStorage) AssociateIDs(newIDs []NewIDs) { +func (s *sqliteStorage) AssociateIDs(newIDs []NewIDs) error { for _, ids := range newIDs { var oldIDID, newIDID int _, err := s.db.Exec(`INSERT INTO IDs domain,id VALUES (?,?)`, ids.NewID.Domain, ids.NewID.ID) if err != nil { - panic(err) + return err } rows, err := s.db.Query(`SELECT idid FROM IDs WHERE domain=? AND id=?`, ids.NewID.Domain, ids.NewID.ID) if err != nil && !errors.Is(err, sql.ErrNoRows) { - panic(err) + return err } if rows.Next() { rows.Scan(&newIDID) } else { - panic("Unable to insert New ID into database") + return errors.New("Unable to insert New ID into database") } rows.Close() rows, err = s.db.Query(`SELECT idid FROM IDs WHERE domain=? AND id=?`, ids.OldID.Domain, ids.OldID.ID) if err != nil && !errors.Is(err, sql.ErrNoRows) { - panic(err) + return err } if rows.Next() { rows.Scan(&oldIDID) @@ -382,16 +382,17 @@ func (s *sqliteStorage) AssociateIDs(newIDs []NewIDs) { } _, err = s.db.Exec(`INSERT INTO id_hash (hashid, id_id) SELECT hashid,? FROM id_hash where id_id=?`, newIDID, oldIDID) if err != nil { - panic(err) + return fmt.Errorf("Unable to associate IDs: %w", err) } } + return nil } func (s *sqliteStorage) GetIDs(id ID) IDList { var idid int rows, err := s.db.Query(`SELECT idid FROM IDs WHERE domain=? AND id=?`, id.Domain, id.ID) if err != nil && !errors.Is(err, sql.ErrNoRows) { - panic(err) + return nil } if rows.Next() { rows.Scan(&idid) diff --git a/vp-tree.go b/vp-tree.go index f65937f..faa0b9d 100644 --- a/vp-tree.go +++ b/vp-tree.go @@ -85,8 +85,8 @@ func (v *VPTree) EncodeHashes() (SavedHashes, error) { return SavedHashes{}, errors.New("Not Implemented") } -func (v *VPTree) AssociateIDs(newIDs []NewIDs) { - panic("Not Implemented") +func (v *VPTree) AssociateIDs(newIDs []NewIDs) error { + return errors.New("Not Implemented") } func (v *VPTree) GetIDs(id ID) IDList {