// package rec_meta -- мета-информация записи KV-хранилища. package rec_meta import ( "gitp78su.ipnodns.ru/svi/kern/v4/d0" "gitp78su.ipnodns.ru/svi/kern/v4/d2/lsi/store_ent/rec_key" ) // IRecMeta -- интерфейс мета-информации записи KV-хранилища. type IRecMeta interface { // Vers -- версия записи Vers() int64 // Operation -- тип операции над записью Operation() *d0.LTxt // CreatedAt -- дата создания записи CreatedAt() *d0.LTime // UpdateAt -- дата последнего обновления UpdateAt() *d0.MTime } // RecMeta -- мета-информация записи KV-хранилища. // // Вся информация о записи хранится в JSON-строке, без форматирования // для того, что можно было файл индексов бакета писать построчно. // Даже если ключ содержит пробелы или экранированное форматирование // JSON их экранирует внутри. type RecMeta struct { Key_ rec_key.ARecKey `json:"key"` // Ключ Vers_ int64 `json:"vers"` // Версия записи Operation_ *d0.LTxt `json:"operation"` // Тип операции над записью createdAt_ *d0.LTime `voc:"created_at"` // Дата создания записи updateAt_ *d0.MTime `voc:"update_at"` // Дата последнего обновления // Хеш мета-информации записи (вместе с значением, но без этого поля разумеется) Sha_ *d0.LTxt `json:"sha"` Offset_ int64 `json:"-"` // Смещение в файле, игнорируется при записи } // NewRecMeta -- создание новой мета-информации записи KV-хранилища. func NewRecMeta(key rec_key.IRecKeyFix) *RecMeta { d0.If(key == nil).Hassert("NewRecMeta: key==nil") sf := &RecMeta{ Key_: key.Get(), Vers_: 1, Operation_: d0.LetTxt("create"), createdAt_: d0.LetTimeAuto(), updateAt_: d0.MutTimeAuto(), } _ = IRecMeta(sf) return sf } // Key -- ключ записи. // func (sf *RecMeta) Key() rec_key.IRecKeyFix { return rec_key.NewRecKey(sf.Key_) } // Vers -- версия записи. // func (sf *RecMeta) Vers() int64 { return sf.Vers_ } // Operation -- тип операции над записью. // func (sf *RecMeta) Operation() *d0.LTxt { return sf.Operation_ } // CreatedAt -- дата создания записи. // func (sf *RecMeta) CreatedAt() *d0.LTime { return sf.createdAt_ } // UpdateAt -- дата последнего обновления. // func (sf *RecMeta) UpdateAt() *d0.MTime { return sf.updateAt_ }