github.com/weaviate/weaviate@v1.24.6/adapters/handlers/grpc/v1/batch_delete.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package v1 13 14 import ( 15 "fmt" 16 "math/big" 17 "strings" 18 19 "github.com/weaviate/weaviate/entities/filters" 20 "github.com/weaviate/weaviate/entities/schema" 21 pb "github.com/weaviate/weaviate/grpc/generated/protocol/v1" 22 "github.com/weaviate/weaviate/usecases/objects" 23 ) 24 25 func batchDeleteParamsFromProto(req *pb.BatchDeleteRequest, scheme schema.Schema) (objects.BatchDeleteParams, error) { 26 params := objects.BatchDeleteParams{} 27 28 // make sure collection exists 29 _, err := schema.GetClassByName(scheme.Objects, req.Collection) 30 if err != nil { 31 return objects.BatchDeleteParams{}, err 32 } 33 34 params.ClassName = schema.ClassName(req.Collection) 35 36 if req.Verbose { 37 params.Output = "verbose" 38 } else { 39 params.Output = "minimal" 40 } 41 42 params.DryRun = req.DryRun 43 44 if req.Filters == nil { 45 return objects.BatchDeleteParams{}, fmt.Errorf("no filters in batch delete request") 46 } 47 48 clause, err := extractFilters(req.Filters, scheme, req.Collection) 49 if err != nil { 50 return objects.BatchDeleteParams{}, err 51 } 52 filter := &filters.LocalFilter{Root: &clause} 53 if err := filters.ValidateFilters(scheme, filter); err != nil { 54 return objects.BatchDeleteParams{}, err 55 } 56 params.Filters = filter 57 58 return params, nil 59 } 60 61 func batchDeleteReplyFromObjects(response objects.BatchDeleteResult, verbose bool) (*pb.BatchDeleteReply, error) { 62 var successful, failed int64 63 64 var objs []*pb.BatchDeleteObject 65 if verbose { 66 objs = make([]*pb.BatchDeleteObject, 0, len(response.Objects)) 67 } 68 for _, obj := range response.Objects { 69 if obj.Err == nil { 70 successful += 1 71 } else { 72 failed += 1 73 } 74 if verbose { 75 hexInteger, success := new(big.Int).SetString(strings.Replace(obj.UUID.String(), "-", "", -1), 16) 76 if !success { 77 return nil, fmt.Errorf("failed to parse hex string to integer") 78 } 79 errorString := "" 80 if obj.Err != nil { 81 errorString = obj.Err.Error() 82 } 83 84 resultObj := &pb.BatchDeleteObject{ 85 Uuid: hexInteger.Bytes(), 86 Successful: obj.Err == nil, 87 Error: &errorString, 88 } 89 objs = append(objs, resultObj) 90 } 91 } 92 reply := &pb.BatchDeleteReply{ 93 Successful: successful, 94 Failed: failed, 95 Matches: response.Matches, 96 Objects: objs, 97 } 98 99 return reply, nil 100 }