futriis/pkg/types/types.go

99 lines
2.7 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// /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{}