Fix decoding hashes
This commit is contained in:
parent
f560b7f428
commit
da54b3a454
14
BasicMap.go
14
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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
||||
|
15
sqlite.go
15
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)
|
||||
|
@ -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 {
|
||||
|
Loading…
Reference in New Issue
Block a user