Files
srdb/table.go
bourdon 23843493b8 重构代码结构并添加完整功能
主要改动:
- 重构目录结构:合并子目录到根目录,简化项目结构
- 添加完整的查询 API:支持复杂条件查询、字段选择、游标模式
- 实现 LSM-Tree Compaction:7层结构、Score-based策略、后台异步合并
- 添加 Web UI:基于 Lit 的现代化管理界面,支持数据浏览和 Manifest 查看
- 完善文档:添加 README.md 和 examples/webui/README.md

新增功能:
- Query Builder:链式查询 API,支持 Eq/Lt/Gt/In/Between/Contains 等操作符
- Web UI 组件:srdb-app、srdb-table-list、srdb-data-view、srdb-manifest-view 等
- 列选择持久化:自动保存到 localStorage
- 刷新按钮:一键刷新当前视图
- 主题切换:深色/浅色主题支持

代码优化:
- 使用 Go 1.24 新特性:range 7、min()、maps.Copy()、slices.Sort()
- 统一组件命名:所有 Web Components 使用 srdb-* 前缀
- CSS 优化:提取共享样式,减少重复代码
- 清理遗留代码:删除未使用的方法和样式
2025-10-08 23:04:47 +08:00

142 lines
2.8 KiB
Go
Raw 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.

package srdb
import (
"os"
"path/filepath"
"time"
)
// Table 表
type Table struct {
name string // 表名
dir string // 表目录
schema *Schema // Schema
engine *Engine // Engine 实例
database *Database // 所属数据库
createdAt int64 // 创建时间
}
// createTable 创建新表
func createTable(name string, schema *Schema, db *Database) (*Table, error) {
// 创建表目录
tableDir := filepath.Join(db.dir, name)
err := os.MkdirAll(tableDir, 0755)
if err != nil {
os.RemoveAll(tableDir)
return nil, err
}
// 创建 EngineEngine 会自动保存 Schema 到文件)
engine, err := OpenEngine(&EngineOptions{
Dir: tableDir,
MemTableSize: DefaultMemTableSize,
Schema: schema,
})
if err != nil {
os.RemoveAll(tableDir)
return nil, err
}
table := &Table{
name: name,
dir: tableDir,
schema: schema,
engine: engine,
database: db,
createdAt: time.Now().Unix(),
}
return table, nil
}
// openTable 打开已存在的表
func openTable(name string, db *Database) (*Table, error) {
tableDir := filepath.Join(db.dir, name)
// 打开 EngineEngine 会自动从 schema.json 恢复 Schema
eng, err := OpenEngine(&EngineOptions{
Dir: tableDir,
MemTableSize: DefaultMemTableSize,
// Schema 不设置,让 Engine 自动从磁盘恢复
})
if err != nil {
return nil, err
}
// 从 Engine 获取 Schema
sch := eng.GetSchema()
table := &Table{
name: name,
dir: tableDir,
schema: sch,
engine: eng,
database: db,
}
return table, nil
}
// GetName 获取表名
func (t *Table) GetName() string {
return t.name
}
// GetSchema 获取 Schema
func (t *Table) GetSchema() *Schema {
return t.schema
}
// Insert 插入数据
func (t *Table) Insert(data map[string]any) error {
return t.engine.Insert(data)
}
// Get 查询数据
func (t *Table) Get(seq int64) (*SSTableRow, error) {
return t.engine.Get(seq)
}
// Query 创建查询构建器
func (t *Table) Query() *QueryBuilder {
return t.engine.Query()
}
// CreateIndex 创建索引
func (t *Table) CreateIndex(field string) error {
return t.engine.CreateIndex(field)
}
// DropIndex 删除索引
func (t *Table) DropIndex(field string) error {
return t.engine.DropIndex(field)
}
// ListIndexes 列出所有索引
func (t *Table) ListIndexes() []string {
return t.engine.ListIndexes()
}
// Stats 获取统计信息
func (t *Table) Stats() *TableStats {
return t.engine.Stats()
}
// GetEngine 获取底层 Engine
func (t *Table) GetEngine() *Engine {
return t.engine
}
// Close 关闭表
func (t *Table) Close() error {
if t.engine != nil {
return t.engine.Close()
}
return nil
}
// GetCreatedAt 获取表创建时间
func (t *Table) GetCreatedAt() int64 {
return t.createdAt
}