futriis/pkg/types/types.go

99 lines
2.7 KiB
Go
Raw Permalink Normal View History

2026-02-23 22:48:31 +03:00
// /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{}