in cassandra-bigtable-migration-tools/cassandra-bigtable-proxy/bigtable/bigtable.go [551:604]
func (btc *BigtableClient) DeleteRowNew(ctx context.Context, deleteQueryData *translator.DeleteQueryMapping) (*message.RowsResult, error) {
otelgo.AddAnnotation(ctx, applyingDeleteMutation)
client, ok := btc.Clients[deleteQueryData.Keyspace]
if !ok {
return nil, fmt.Errorf("invalid keySpace - `%s`", deleteQueryData.Keyspace)
}
tbl := client.Open(deleteQueryData.Table)
mut := bigtable.NewMutation()
if len(deleteQueryData.SelectedColumns) > 0 {
for _, v := range deleteQueryData.SelectedColumns {
if v.ListIndex != "" { //handle list delete Items
index, err := strconv.Atoi(v.ListIndex)
if err != nil {
return nil, err
}
reqTimestamp, err := btc.getIndexOpTimestamp(ctx, deleteQueryData.Table, deleteQueryData.RowKey, v.Name, deleteQueryData.Keyspace, index)
if err != nil {
return nil, err
}
mut.DeleteCellsInColumn(v.Name, reqTimestamp)
} else if v.MapKey != "" { // Handle map delete Items
mut.DeleteCellsInColumn(v.Name, v.MapKey)
}
}
} else {
mut.DeleteRow()
}
if deleteQueryData.IfExists {
predicateFilter := bigtable.CellsPerRowLimitFilter(1)
conditionalMutation := bigtable.NewCondMutation(predicateFilter, mut, nil)
matched := true
if err := tbl.Apply(ctx, deleteQueryData.RowKey, conditionalMutation, bigtable.GetCondMutationResult(&matched)); err != nil {
return nil, err
}
if !matched {
return GenerateAppliedRowsResult(deleteQueryData.Keyspace, deleteQueryData.Table, false), nil
} else {
return GenerateAppliedRowsResult(deleteQueryData.Keyspace, deleteQueryData.Table, true), nil
}
} else {
if err := tbl.Apply(ctx, deleteQueryData.RowKey, mut); err != nil {
return nil, err
}
}
otelgo.AddAnnotation(ctx, deleteMutationApplied)
var response = message.RowsResult{
Metadata: &message.RowsMetadata{
LastContinuousPage: true,
},
}
return &response, nil
}