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 // 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)
 | |
| 	}
 | |
| }
 |