rec_meta.go 3.2 KB

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