Files
condflow/utils.go
T

61 lines
1.6 KiB
Go

package condflow
import (
"reflect"
"git.fsdpf.net/go/req"
)
// getDuckDBType 将 Go reflect.Kind 转换为 DuckDB 类型
func kindToDuckDBType(kind reflect.Kind) string {
switch kind {
case reflect.Bool:
return "BOOLEAN"
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32:
return "INTEGER"
case reflect.Int64:
return "BIGINT"
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32:
return "UINTEGER"
case reflect.Uint64:
return "UBIGINT"
case reflect.Float32:
return "FLOAT"
case reflect.Float64:
return "DOUBLE"
case reflect.String:
return "VARCHAR"
case reflect.Slice, reflect.Array:
return "JSON" // 数组类型使用 JSON
case reflect.Map, reflect.Struct:
return "JSON" // 复杂类型使用 JSON
case reflect.Ptr, reflect.Interface:
return "VARCHAR" // 指针和接口类型默认使用 VARCHAR
default:
return "VARCHAR" // 默认使用 VARCHAR
}
}
// kindToSQLite3Type 将 Go reflect.Kind 转换为 SQLite3 类型
func kindToSQLite3Type(kind reflect.Kind) string {
switch kind {
case reflect.Bool,
reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
return "INTEGER"
case reflect.Float32, reflect.Float64:
return "REAL"
case reflect.Slice, reflect.Array, reflect.Map, reflect.Struct:
return "TEXT" // SQLite3 无 JSON 类型,复杂类型序列化后存为 TEXT
default:
return "TEXT"
}
}
func toActionContext(c FlowContext, res req.Resource) Context {
return &context{
FlowContext: c,
res: res,
}
}