// /futriis/pkg/types/types.go // Пакет types определяет основные типы данных для СУБД futriis package types import ( "sync" ) // Tuple представляет кортеж - аналог записи в таблице // Содержит набор полей в формате ключ-значение type Tuple struct { ID string `msgpack:"id"` Fields map[string]interface{} `msgpack:"fields"` } // NewTuple создаёт новый кортеж с указанным ID func NewTuple(id string) *Tuple { return &Tuple{ ID: id, Fields: make(map[string]interface{}), } } // Slice представляет слайс - аналог таблицы в РСУБД // Содержит коллекцию кортежей type Slice struct { Name string `msgpack:"name"` Tuples map[string]*Tuple `msgpack:"tuples"` mu sync.RWMutex // Mutex для безопасного доступа, но не блокирующий wait-free операции } // NewSlice создаёт новый слайс с указанным именем func NewSlice(name string) *Slice { return &Slice{ Name: name, Tuples: make(map[string]*Tuple), } } // Lock блокирует слайс для записи func (s *Slice) Lock() { s.mu.Lock() } // Unlock разблокирует слайс после записи func (s *Slice) Unlock() { s.mu.Unlock() } // RLock блокирует слайс для чтения func (s *Slice) RLock() { s.mu.RLock() } // RUnlock разблокирует слайс после чтения func (s *Slice) RUnlock() { s.mu.RUnlock() } // Tapple представляет таппл - аналог базы данных в РСУБД // Содержит коллекцию слайсов (таблиц) type Tapple struct { Name string `msgpack:"name"` Slices map[string]*Slice `msgpack:"slices"` mu sync.RWMutex // Mutex для безопасного доступа } // NewTapple создаёт новый таппл с указанным именем func NewTapple(name string) *Tapple { return &Tapple{ Name: name, Slices: make(map[string]*Slice), } } // Lock блокирует таппл для записи func (t *Tapple) Lock() { t.mu.Lock() } // Unlock разблокирует таппл после записи func (t *Tapple) Unlock() { t.mu.Unlock() } // RLock блокирует таппл для чтения func (t *Tapple) RLock() { t.mu.RLock() } // RUnlock разблокирует таппл после чтения func (t *Tapple) RUnlock() { t.mu.RUnlock() } // Value представляет значение любого типа, поддерживаемого MessagePack type Value interface{}