before merge to main

This commit is contained in:
2026-03-04 16:29:24 +06:00
parent 0481cde1c3
commit 491ccbea89
21 changed files with 6776 additions and 47 deletions

View File

@@ -0,0 +1,74 @@
// Пример использования KeyOrder в опциях коллекции — встроенная сортировка ключей при сериализации.
package main
import (
"fmt"
"log"
"os"
"time"
"linedb/pkg/linedb"
)
// Item — структура для вставки (LineDB поддерживает struct и map)
type Item struct {
Name string `json:"name"`
Value int `json:"value"`
Active bool `json:"active"`
Atime string `json:"atime"`
}
func main() {
os.RemoveAll("./data")
// KeyOrder в опциях коллекции — при задании используется кастомная сериализация с порядком ключей
initOptions := &linedb.LineDbInitOptions{
CacheSize: 100,
CacheTTL: time.Minute,
DBFolder: "./data",
Collections: []linedb.JSONLFileOptions{
{
CollectionName: "items",
AllocSize: 256,
KeyOrder: []linedb.KeyOrder{
{Key: "id", Order: 0},
{Key: "atime", Order: -1},
},
},
},
}
db := linedb.NewLineDb(nil)
if err := db.Init(false, initOptions); err != nil {
log.Fatalf("Init failed: %v", err)
}
defer db.Close()
opts := linedb.LineDbAdapterOptions{}
// Инсерты: map и структуры (LineDB принимает оба)
items := []any{
map[string]any{"Value": 42, "Name": "Test", "Active": true, "atime": "2024-01-01"},
map[string]any{"Active": false, "Name": "Alice", "Value": 100, "atime": "2024-01-02"},
map[string]any{"Name": "Bob", "Value": 0, "Active": true, "atime": "2024-01-03"},
Item{Name: "Charlie", Value: 7, Active: true, Atime: "2024-01-04"},
Item{Name: "Diana", Value: 99, Active: false, Atime: "2024-01-05"},
}
if err := db.Insert(items, "items", opts); err != nil {
log.Fatalf("Insert failed: %v", err)
}
// Read
all, err := db.Read("items", opts)
if err != nil {
log.Fatalf("Read failed: %v", err)
}
fmt.Printf("Records: %d\n", len(all))
for _, r := range all {
fmt.Printf(" %+v\n", r)
}
raw, _ := os.ReadFile("./data/items.jsonl")
fmt.Printf("\nRaw file:\n%s\n", string(raw))
}