Spaces:
Running
Running
| // _ _ | |
| // __ _____ __ ___ ___ __ _| |_ ___ | |
| // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ | |
| // \ V V / __/ (_| |\ V /| | (_| | || __/ | |
| // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| | |
| // | |
| // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. | |
| // | |
| // CONTACT: [email protected] | |
| // | |
| package objects | |
| import ( | |
| "context" | |
| "fmt" | |
| "github.com/go-openapi/strfmt" | |
| "github.com/weaviate/weaviate/entities/additional" | |
| "github.com/weaviate/weaviate/entities/models" | |
| "github.com/weaviate/weaviate/entities/search" | |
| ) | |
| func (m *Manager) updateRefVector(ctx context.Context, principal *models.Principal, | |
| className string, id strfmt.UUID, tenant string, | |
| ) error { | |
| if m.modulesProvider.UsingRef2Vec(className) { | |
| parent, err := m.vectorRepo.Object(ctx, className, id, | |
| search.SelectProperties{}, additional.Properties{}, nil, tenant) | |
| if err != nil { | |
| return fmt.Errorf("find parent '%s/%s': %w", | |
| className, id, err) | |
| } | |
| obj := parent.Object() | |
| class, err := m.schemaManager.GetClass(ctx, principal, className) | |
| if err != nil { | |
| return err | |
| } | |
| if err := m.modulesProvider.UpdateVector( | |
| ctx, obj, class, nil, m.findObject, m.logger); err != nil { | |
| return fmt.Errorf("calculate ref vector for '%s/%s': %w", | |
| className, id, err) | |
| } | |
| if err := m.vectorRepo.PutObject(ctx, obj, obj.Vector, nil); err != nil { | |
| return fmt.Errorf("put object: %w", err) | |
| } | |
| return nil | |
| } | |
| // nothing to do | |
| return nil | |
| } | |
| // TODO: remove this method and just pass m.vectorRepo.Object to | |
| // m.modulesProvider.UpdateVector when m.vectorRepo.ObjectByID | |
| // is finally removed | |
| func (m *Manager) findObject(ctx context.Context, class string, | |
| id strfmt.UUID, props search.SelectProperties, addl additional.Properties, | |
| tenant string, | |
| ) (*search.Result, error) { | |
| // to support backwards compat | |
| if class == "" { | |
| return m.vectorRepo.ObjectByID(ctx, id, props, addl, tenant) | |
| } | |
| return m.vectorRepo.Object(ctx, class, id, props, addl, nil, tenant) | |
| } | |
| // TODO: remove this method and just pass b.vectorRepo.Object to | |
| // b.modulesProvider.UpdateVector when b.vectorRepo.ObjectByID | |
| // is finally removed | |
| func (b *BatchManager) findObject(ctx context.Context, class string, | |
| id strfmt.UUID, props search.SelectProperties, addl additional.Properties, | |
| tenant string, | |
| ) (*search.Result, error) { | |
| // to support backwards compat | |
| if class == "" { | |
| return b.vectorRepo.ObjectByID(ctx, id, props, addl, tenant) | |
| } | |
| return b.vectorRepo.Object(ctx, class, id, props, addl, nil, tenant) | |
| } | |