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  }