// Del deletes one or more keys. // // A new result will be appended to the batch and each key will have a // corresponding row in the returned Result. // // key can be either a byte slice, a string, a fmt.Stringer or an // encoding.BinaryMarshaler. func (b *Batch) Del(keys ...interface{}) { var calls []proto.Call for _, key := range keys { k, err := marshalKey(key) if err != nil { b.initResult(0, len(keys), err) return } calls = append(calls, proto.DeleteCall(proto.Key(k))) } b.calls = append(b.calls, calls...) b.initResult(len(calls), len(calls), nil) }
// DelStruct deletes the specified columns from the structured table identified // by obj. The primary key columns within obj are used to identify which row to // modify. The obj type must have previously been bound to a table using // BindModel. If columns is empty the entire row is deleted. // // TODO(pmattis): If "obj" is a pointer, should we clear the columns in "obj" // that are being deleted? func (b *Batch) DelStruct(obj interface{}, columns ...string) { v := reflect.Indirect(reflect.ValueOf(obj)) m, err := b.DB.getModel(v.Type(), false) if err != nil { b.initResult(0, 0, err) return } primaryKey, err := m.encodePrimaryKey(v) if err != nil { b.initResult(0, 0, err) return } if len(columns) == 0 { columns = m.otherColumnNames } else { lowerStrings(columns) } var calls []proto.Call for _, colName := range columns { col, ok := m.columnsByName[colName] if !ok { b.initResult(0, 0, fmt.Errorf("%s: unable to find field %s", m.name, colName)) return } key := m.encodeColumnKey(primaryKey, col.ID) if log.V(2) { log.Infof("Del %q", key) } calls = append(calls, proto.DeleteCall(key)) } b.calls = append(b.calls, calls...) b.initResult(len(calls), len(calls), nil) }