// DecodeRecordKey decodes the key and gets the tableID, handle and columnID. func DecodeRecordKey(key kv.Key) (tableID int64, handle int64, columnID int64, err error) { k := key if !key.HasPrefix(TablePrefix) { return 0, 0, 0, errors.Errorf("invalid record key - %q", k) } key = key[len(TablePrefix):] key, tableID, err = codec.DecodeInt(key) if err != nil { return 0, 0, 0, errors.Trace(err) } if !key.HasPrefix(recordPrefixSep) { return 0, 0, 0, errors.Errorf("invalid record key - %q", k) } key = key[len(recordPrefixSep):] key, handle, err = codec.DecodeInt(key) if err != nil { return 0, 0, 0, errors.Trace(err) } if len(key) == 0 { return } key, columnID, err = codec.DecodeInt(key) if err != nil { return 0, 0, 0, errors.Trace(err) } return }
// DecodeRowKey decodes the key and gets the handle. func DecodeRowKey(key kv.Key) (handle int64, err error) { k := key if !key.HasPrefix(tablePrefix) { return 0, errInvalidRecordKey.Gen("invalid record key - %q", k) } key = key[len(tablePrefix):] // Table ID is not needed. key, _, err = codec.DecodeInt(key) if err != nil { return 0, errors.Trace(err) } if !key.HasPrefix(recordPrefixSep) { return 0, errInvalidRecordKey.Gen("invalid record key - %q", k) } key = key[len(recordPrefixSep):] key, handle, err = codec.DecodeInt(key) if err != nil { return 0, errors.Trace(err) } return }