rec_meta.go 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. // package rec_meta -- мета-информация записи KV-хранилища.
  2. package rec_meta
  3. import (
  4. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/core_spec"
  5. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/helpers"
  6. "gitp78su.ipnodns.ru/svi/kern/v4/lev0/voc/etime"
  7. "gitp78su.ipnodns.ru/svi/kern/v4/lev2/lsi/store_ent/rec_key"
  8. )
  9. var (
  10. hassert = helpers.Hassert
  11. )
  12. // IRecMeta -- интерфейс мета-информации записи KV-хранилища.
  13. type IRecMeta interface {
  14. // Vers -- версия записи
  15. Vers() int64
  16. // Operation -- тип операции над записью
  17. Operation() string
  18. // CreatedAt -- дата создания записи
  19. CreatedAt() core_spec.ITime
  20. // UpdateAt -- дата последнего обновления
  21. UpdateAt() core_spec.ITimeMut
  22. }
  23. // RecMeta -- мета-информация записи KV-хранилища.
  24. //
  25. // Вся информация о записи хранится в JSON-строке, без форматирования
  26. // для того, что можно было файл индексов бакета писать построчно.
  27. // Даже если ключ содержит пробелы или экранированное форматирование
  28. // JSON их экранирует внутри.
  29. type RecMeta struct {
  30. Key_ rec_key.ARecKey `json:"key"` // Ключ
  31. Vers_ int64 `json:"vers"` // Версия записи
  32. Operation_ string `json:"operation"` // Тип операции над записью
  33. createdAt_ core_spec.ITime `voc:"created_at"` // Дата создания записи
  34. updateAt_ core_spec.ITimeMut `voc:"update_at"` // Дата последнего обновления
  35. // Хеш мета-информации записи (вместе с значением, но без этого поля разумеется)
  36. Sha_ string `json:"sha"`
  37. Offset_ int64 `json:"-"` // Смещение в файле, игнорируется при записи
  38. }
  39. // NewRecMeta -- создание новой мета-информации записи KV-хранилища.
  40. func NewRecMeta(key rec_key.IRecKeyFix) *RecMeta {
  41. hassert(key != nil, "NewRecMeta: key==nil")
  42. sf := &RecMeta{
  43. Key_: key.Get(),
  44. Vers_: 1,
  45. Operation_: "create",
  46. createdAt_: etime.NewETimeAuto(),
  47. updateAt_: etime.NewETimeAutoMut(),
  48. }
  49. _ = IRecMeta(sf)
  50. return sf
  51. }
  52. // Key -- ключ записи.
  53. //
  54. //go:fix inline
  55. func (sf *RecMeta) Key() rec_key.IRecKeyFix {
  56. return rec_key.NewRecKey(sf.Key_)
  57. }
  58. // Vers -- версия записи.
  59. //
  60. //go:fix inline
  61. func (sf *RecMeta) Vers() int64 {
  62. return sf.Vers_
  63. }
  64. // Operation -- тип операции над записью.
  65. //
  66. //go:fix inline
  67. func (sf *RecMeta) Operation() string {
  68. return sf.Operation_
  69. }
  70. // CreatedAt -- дата создания записи.
  71. //
  72. //go:fix inline
  73. func (sf *RecMeta) CreatedAt() core_spec.ITime {
  74. return sf.createdAt_
  75. }
  76. // UpdateAt -- дата последнего обновления.
  77. //
  78. //go:fix inline
  79. func (sf *RecMeta) UpdateAt() core_spec.ITimeMut {
  80. return sf.updateAt_
  81. }