61 lines
1.6 KiB
Go
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,
|
|
}
|
|
}
|