// SetColValue implements table.Table SetColValue interface. func SetColValue(rm kv.RetrieverMutator, key []byte, data types.Datum) error { v, err := EncodeValue(data) if err != nil { return errors.Trace(err) } if err := rm.Set(key, v); err != nil { return errors.Trace(err) } return nil }
// SetColValue implements table.Table SetColValue interface. func (t *Table) SetColValue(rm kv.RetrieverMutator, key []byte, data interface{}) error { v, err := t.EncodeValue(data) if err != nil { return errors.Trace(err) } if err := rm.Set(key, v); err != nil { return errors.Trace(err) } return nil }
// Create creates a new entry in the kvIndex data. // If the index is unique and there is an existing entry with the same key, Create will return ErrKeyExists. func (c *index) Create(rm kv.RetrieverMutator, indexedValues []types.Datum, h int64) error { key, distinct, err := c.GenIndexKey(indexedValues, h) if err != nil { return errors.Trace(err) } if !distinct { // TODO: reconsider value err = rm.Set(key, []byte("timestamp?")) return errors.Trace(err) } _, err = rm.Get(key) if kv.IsErrNotFound(err) { err = rm.Set(key, encodeHandle(h)) return errors.Trace(err) } return errors.Trace(kv.ErrKeyExists) }
// Create creates a new entry in the kvIndex data. // If the index is unique and there is an existing entry with the same key, // Create will return the existing entry's handle as the first return value, ErrKeyExists as the second return value. func (c *index) Create(rm kv.RetrieverMutator, indexedValues []types.Datum, h int64) (int64, error) { key, distinct, err := c.GenIndexKey(indexedValues, h) if err != nil { return 0, errors.Trace(err) } if !distinct { // non-unique index doesn't need store value, write a '0' to reduce space err = rm.Set(key, []byte{'0'}) return 0, errors.Trace(err) } value, err := rm.Get(key) if kv.IsErrNotFound(err) { err = rm.Set(key, encodeHandle(h)) return 0, errors.Trace(err) } handle, err := decodeHandle(value) if err != nil { return 0, errors.Trace(err) } return handle, errors.Trace(kv.ErrKeyExists) }