feat: manually mirror opencoze's code from bytedance

Change-Id: I09a73aadda978ad9511264a756b2ce51f5761adf
This commit is contained in:
fanlv
2025-07-20 17:36:12 +08:00
commit 890153324f
14811 changed files with 1923430 additions and 0 deletions

View File

@@ -0,0 +1,76 @@
/*
* 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 convertor
import (
"fmt"
"github.com/coze-dev/coze-studio/backend/api/model/table"
"github.com/coze-dev/coze-studio/backend/infra/contract/rdb/entity"
)
func ConvertResultSetToString(resultSet *entity.ResultSet, physicalToFieldName map[string]string, physicalToFieldType map[string]table.FieldItemType) []map[string]string {
records := make([]map[string]string, 0, len(resultSet.Rows))
for _, row := range resultSet.Rows {
record := make(map[string]string)
for physicalName, value := range row {
if logicalName, exists := physicalToFieldName[physicalName]; exists {
if value == nil {
record[logicalName] = ""
} else {
fieldType, hasType := physicalToFieldType[physicalName]
if hasType {
convertedValue := ConvertDBValueToString(value, fieldType)
record[logicalName] = convertedValue
} else {
record[logicalName] = fmt.Sprintf("%v", value)
}
}
} else {
if value == nil {
record[physicalName] = ""
} else {
record[physicalName] = ConvertSystemFieldToString(physicalName, value)
}
}
}
records = append(records, record)
}
return records
}
func ConvertResultSet(resultSet *entity.ResultSet, physicalToFieldName map[string]string, physicalToFieldType map[string]table.FieldItemType) []map[string]any {
records := make([]map[string]any, 0, len(resultSet.Rows))
for _, row := range resultSet.Rows {
record := make(map[string]any)
for physicalName, value := range row {
if logicalName, exists := physicalToFieldName[physicalName]; exists {
record[logicalName] = value
} else {
record[physicalName] = value
}
}
records = append(records, record)
}
return records
}

View File

@@ -0,0 +1,218 @@
/*
* 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 convertor
import (
"fmt"
"strconv"
"time"
"github.com/coze-dev/coze-studio/backend/api/model/crossdomain/database"
"github.com/coze-dev/coze-studio/backend/api/model/table"
"github.com/coze-dev/coze-studio/backend/infra/contract/rdb/entity"
)
const (
TimeFormat = "2006-01-02 15:04:05"
)
func SwitchToDataType(itemType table.FieldItemType) entity.DataType {
switch itemType {
case table.FieldItemType_Text:
return entity.TypeVarchar
case table.FieldItemType_Number:
return entity.TypeBigInt
case table.FieldItemType_Date:
return entity.TypeTimestamp
case table.FieldItemType_Float:
return entity.TypeDouble
case table.FieldItemType_Boolean:
return entity.TypeBoolean
default:
// 默认使用 VARCHAR
return entity.TypeVarchar
}
}
// ConvertValueByType converts a string value to the specified type.
func ConvertValueByType(value string, fieldType table.FieldItemType) (interface{}, error) {
if value == "" {
return nil, nil
}
switch fieldType {
case table.FieldItemType_Number:
intVal, err := strconv.ParseInt(value, 10, 64)
if err != nil {
return 0, fmt.Errorf("cannot convert %s to number", value)
}
return intVal, nil
case table.FieldItemType_Float:
if floatVal, err := strconv.ParseFloat(value, 64); err == nil {
return floatVal, nil
}
return 0.0, fmt.Errorf("cannot convert %s to float", value)
case table.FieldItemType_Boolean:
if boolVal, err := strconv.ParseBool(value); err == nil {
return boolVal, nil
}
// if err, try 0/1
if value == "0" {
return false, nil
}
if value == "1" {
return true, nil
}
return false, fmt.Errorf("cannot convert %s to boolean", value)
case table.FieldItemType_Date:
t, err := time.Parse(TimeFormat, value) // database use this format
if err != nil {
return "", fmt.Errorf("cannot convert %s to date", value)
}
return t, nil
case table.FieldItemType_Text:
return value, nil
default:
return value, nil
}
}
// ConvertDBValueToString converts a database value to a string.
func ConvertDBValueToString(value interface{}, fieldType table.FieldItemType) string {
switch fieldType {
case table.FieldItemType_Text:
if byteArray, ok := value.([]uint8); ok {
return string(byteArray)
}
case table.FieldItemType_Number:
switch v := value.(type) {
case int64:
return strconv.FormatInt(v, 10)
case []uint8:
return string(v)
}
case table.FieldItemType_Float:
switch v := value.(type) {
case float64:
return strconv.FormatFloat(v, 'f', -1, 64)
case []uint8:
return string(v)
}
case table.FieldItemType_Boolean:
switch v := value.(type) {
case bool:
return strconv.FormatBool(v)
case int64:
return strconv.FormatBool(v != 0)
case []uint8:
boolStr := string(v)
if boolStr == "1" || boolStr == "true" {
return "true"
}
return "false"
}
case table.FieldItemType_Date:
switch v := value.(type) {
case time.Time:
return v.Format(TimeFormat)
case []uint8:
return string(v)
}
}
return fmt.Sprintf("%v", value)
}
// ConvertSystemFieldToString converts a system field value to a string.
func ConvertSystemFieldToString(fieldName string, value interface{}) string {
switch fieldName {
case database.DefaultIDColName:
if intVal, ok := value.(int64); ok {
return strconv.FormatInt(intVal, 10)
}
case database.DefaultUidColName, database.DefaultCidColName:
if byteArray, ok := value.([]uint8); ok {
return string(byteArray)
}
case database.DefaultCreateTimeColName:
switch v := value.(type) {
case time.Time:
return v.Format(TimeFormat)
case []uint8:
// 尝试解析字符串表示的时间
return string(v)
}
}
return fmt.Sprintf("%v", value)
}
func ConvertLogicOperator(logic database.Logic) entity.LogicalOperator {
switch logic {
case database.Logic_And:
return entity.AND
case database.Logic_Or:
return entity.OR
default:
return entity.AND // 默认使用AND
}
}
func ConvertOperator(op database.Operation) entity.Operator {
switch op {
case database.Operation_EQUAL:
return entity.OperatorEqual
case database.Operation_NOT_EQUAL:
return entity.OperatorNotEqual
case database.Operation_GREATER_THAN:
return entity.OperatorGreater
case database.Operation_GREATER_EQUAL:
return entity.OperatorGreaterEqual
case database.Operation_LESS_THAN:
return entity.OperatorLess
case database.Operation_LESS_EQUAL:
return entity.OperatorLessEqual
case database.Operation_IN:
return entity.OperatorIn
case database.Operation_NOT_IN:
return entity.OperatorNotIn
case database.Operation_LIKE:
return entity.OperatorLike
case database.Operation_NOT_LIKE:
return entity.OperatorNotLike
case database.Operation_IS_NULL:
return entity.OperatorIsNull
case database.Operation_IS_NOT_NULL:
return entity.OperatorIsNotNull
default:
return entity.OperatorEqual
}
}