156 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			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 // 排序编号
 | 
						|
}
 | 
						|
 | 
						|
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)
 | 
						|
	}
 | 
						|
}
 |