coze-studio/backend/infra/contract/document/table.go

156 lines
3.6 KiB
Go

/*
* Copyright 2025 coze-dev Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package document
import (
"strconv"
"time"
"github.com/coze-dev/coze-studio/backend/pkg/lang/ptr"
)
type TableSchema struct {
Name string
Comment string
Columns []*Column
}
type Column struct {
ID int64
Name string
Type TableColumnType
Description string
Nullable bool
IsPrimary bool
Sequence int // sort number
}
type TableColumnType int
const (
TableColumnTypeUnknown TableColumnType = 0
TableColumnTypeString TableColumnType = 1
TableColumnTypeInteger TableColumnType = 2
TableColumnTypeTime TableColumnType = 3
TableColumnTypeNumber TableColumnType = 4
TableColumnTypeBoolean TableColumnType = 5
TableColumnTypeImage TableColumnType = 6
)
func (t TableColumnType) String() string {
switch t {
case TableColumnTypeString:
return "varchar"
case TableColumnTypeInteger:
return "bigint"
case TableColumnTypeTime:
return "timestamp"
case TableColumnTypeNumber:
return "double"
case TableColumnTypeBoolean:
return "boolean"
case TableColumnTypeImage:
return "image"
default:
return "unknown"
}
}
type ColumnData struct {
ColumnID int64
ColumnName string
Type TableColumnType
ValString *string
ValInteger *int64
ValTime *time.Time
ValNumber *float64
ValBoolean *bool
ValImage *string // base64 / url
}
func (d *ColumnData) GetValue() interface{} {
switch d.Type {
case TableColumnTypeString:
return d.ValString
case TableColumnTypeInteger:
return d.ValInteger
case TableColumnTypeTime:
return d.ValTime
case TableColumnTypeNumber:
return d.ValNumber
case TableColumnTypeBoolean:
return d.ValBoolean
case TableColumnTypeImage:
return d.ValImage
default:
return nil
}
}
func (d *ColumnData) GetStringValue() string {
switch d.Type {
case TableColumnTypeString:
return ptr.From(d.ValString)
case TableColumnTypeInteger:
return strconv.FormatInt(ptr.From(d.ValInteger), 10)
case TableColumnTypeTime:
return ptr.From(d.ValTime).Format(time.DateTime)
case TableColumnTypeNumber:
return strconv.FormatFloat(ptr.From(d.ValNumber), 'f', 20, 64)
case TableColumnTypeBoolean:
return strconv.FormatBool(ptr.From(d.ValBoolean))
case TableColumnTypeImage:
return ptr.From(d.ValImage)
default:
return ptr.From(d.ValString)
}
}
func (d *ColumnData) GetNullableStringValue() string {
switch d.Type {
case TableColumnTypeString:
return ptr.From(d.ValString)
case TableColumnTypeInteger:
if d.ValInteger == nil {
return ""
}
return strconv.FormatInt(ptr.From(d.ValInteger), 10)
case TableColumnTypeTime:
if d.ValTime == nil {
return ""
}
return ptr.From(d.ValTime).Format(time.DateTime)
case TableColumnTypeNumber:
if d.ValNumber == nil {
return ""
}
return strconv.FormatFloat(ptr.From(d.ValNumber), 'f', 20, 64)
case TableColumnTypeBoolean:
if d.ValBoolean == nil {
return ""
}
return strconv.FormatBool(ptr.From(d.ValBoolean))
case TableColumnTypeImage:
if d.ValImage == nil {
return ""
}
return ptr.From(d.ValImage)
default:
return ptr.From(d.ValString)
}
}