重构:清理项目结构和完善文档

- 添加完整的 DOCS.md 文档(1376 行)
- 更新 README.md,增强项目说明
- 清理临时示例和测试数据
- 删除诊断工具(已完成测试)
- 为 webui 示例准备测试数据
- 优化 .gitignore 配置
- 增强 Query 和 Schema 功能
- 改进 SSTable 编码处理
This commit is contained in:
2025-10-10 16:38:19 +08:00
parent 8d750505fb
commit 7d2bb4745c
76 changed files with 1865 additions and 3587 deletions

View File

@@ -52,6 +52,10 @@ const (
// 时间类型
Time // time.Time 时间戳
Duration // time.Duration 时间间隔
// 复杂类型
Object // map[string]xxx、struct{}、*struct{}
Array // 切片类型 []xxx
)
func (t FieldType) String() string {
@@ -94,6 +98,10 @@ func (t FieldType) String() string {
return "time"
case Duration:
return "duration"
case Object:
return "object"
case Array:
return "array"
default:
return "unknown"
}
@@ -370,6 +378,18 @@ func goTypeToFieldType(typ reflect.Type) (FieldType, error) {
return String, nil
case reflect.Bool:
return Bool, nil
case reflect.Map:
// map[string]xxx → Object
if typ.Key().Kind() != reflect.String {
return 0, fmt.Errorf("map key must be string, got %s", typ.Key().Kind())
}
return Object, nil
case reflect.Struct:
// struct{} → Object (排除特殊类型 time.Time、decimal.Decimal 等已在前面处理)
return Object, nil
case reflect.Slice:
// []xxx → Array
return Array, nil
default:
return 0, fmt.Errorf("unsupported type: %s", typ.Kind())
}
@@ -665,6 +685,32 @@ func (s *Schema) validateType(typ FieldType, value any) error {
return fmt.Errorf("expected duration type, got %T", value)
}
// Object 类型
case Object:
v := reflect.ValueOf(value)
kind := v.Kind()
if kind == reflect.Map {
// map[string]xxx
if v.Type().Key().Kind() != reflect.String {
return fmt.Errorf("expected map[string]xxx, got %T", value)
}
return nil
} else if kind == reflect.Struct {
// struct{}
return nil
} else if kind == reflect.Ptr && v.Elem().Kind() == reflect.Struct {
// *struct{}
return nil
}
return fmt.Errorf("expected object type (map[string]xxx, struct{} or *struct{}), got %T", value)
// Array 类型
case Array:
if reflect.ValueOf(value).Kind() != reflect.Slice {
return fmt.Errorf("expected slice type, got %T", value)
}
return nil
default:
return fmt.Errorf("unknown field type: %v", typ)
}
@@ -751,6 +797,24 @@ func convertValue(value any, targetType FieldType) (any, error) {
case Duration:
return convertToDuration(value)
// Object 类型
case Object:
// Object 类型不需要转换,直接返回
v := reflect.ValueOf(value)
kind := v.Kind()
if kind == reflect.Map || kind == reflect.Struct || (kind == reflect.Ptr && v.Elem().Kind() == reflect.Struct) {
return value, nil
}
return nil, fmt.Errorf("cannot convert %T to object", value)
// Array 类型
case Array:
// Array 类型不需要转换,直接返回
if reflect.ValueOf(value).Kind() == reflect.Slice {
return value, nil
}
return nil, fmt.Errorf("cannot convert %T to array", value)
default:
return nil, fmt.Errorf("unsupported type: %v", targetType)
}