feat: optimized logic for upload service
This commit is contained in:
@ -821,7 +821,8 @@ func (w *ApplicationService) adaptorInputFileFields(ctx context.Context, workflo
|
||||
fileURI := strings.TrimPrefix(u.Path, "/opencoze")
|
||||
tagging, err := w.TosClient.GetObjectTagging(ctx, fileURI)
|
||||
if err != nil {
|
||||
return "", err
|
||||
logs.CtxWarnf(ctx, fmt.Sprintf("GetObjectTagging failed: %v", err))
|
||||
return input, nil
|
||||
}
|
||||
if fName, ok := tagging["filename"]; ok {
|
||||
query := u.Query()
|
||||
|
||||
@ -1208,8 +1208,10 @@ func (d databaseService) executeSelectSQL(ctx context.Context, req *ExecuteSQLRe
|
||||
}
|
||||
selectReq.Fields = fields
|
||||
}
|
||||
|
||||
var complexCond *rdb.ComplexCondition
|
||||
var (
|
||||
finallyComplexCond *rdb.ComplexCondition
|
||||
complexCond *rdb.ComplexCondition
|
||||
)
|
||||
var err error
|
||||
if req.Condition != nil {
|
||||
complexCond, err = convertCondition(ctx, req.Condition, fieldNameToPhysical, req.SQLParams)
|
||||
@ -1219,24 +1221,32 @@ func (d databaseService) executeSelectSQL(ctx context.Context, req *ExecuteSQLRe
|
||||
}
|
||||
|
||||
// add rw mode
|
||||
var extraCondition *rdb.ComplexCondition
|
||||
if tableInfo.RwMode == table.BotTableRWMode_LimitedReadWrite && req.UserID != "" {
|
||||
cond := &rdb.Condition{
|
||||
Field: database.DefaultUidColName,
|
||||
Operator: entity3.OperatorEqual,
|
||||
Value: req.UserID,
|
||||
}
|
||||
|
||||
if complexCond == nil {
|
||||
complexCond = &rdb.ComplexCondition{
|
||||
Conditions: []*rdb.Condition{cond},
|
||||
}
|
||||
} else {
|
||||
complexCond.Conditions = append(complexCond.Conditions, cond)
|
||||
extraCondition = &rdb.ComplexCondition{
|
||||
Conditions: []*rdb.Condition{cond},
|
||||
}
|
||||
}
|
||||
|
||||
if complexCond != nil {
|
||||
selectReq.Where = complexCond
|
||||
if extraCondition != nil {
|
||||
finallyComplexCond = &rdb.ComplexCondition{
|
||||
NestedConditions: []*rdb.ComplexCondition{
|
||||
complexCond,
|
||||
extraCondition,
|
||||
},
|
||||
Operator: entity3.AND,
|
||||
}
|
||||
} else {
|
||||
finallyComplexCond = complexCond
|
||||
}
|
||||
|
||||
if finallyComplexCond != nil {
|
||||
selectReq.Where = finallyComplexCond
|
||||
}
|
||||
|
||||
if len(req.OrderByList) > 0 {
|
||||
@ -1377,32 +1387,47 @@ func (d databaseService) executeUpdateSQL(ctx context.Context, req *ExecuteSQLRe
|
||||
}
|
||||
|
||||
condParams := req.SQLParams[index:]
|
||||
complexCond, err := convertCondition(ctx, req.Condition, fieldNameToPhysical, condParams)
|
||||
if err != nil {
|
||||
return -1, fmt.Errorf("convert condition failed: %v", err)
|
||||
var (
|
||||
finallyComplexCond *rdb.ComplexCondition
|
||||
complexCond *rdb.ComplexCondition
|
||||
)
|
||||
var err error
|
||||
if req.Condition != nil {
|
||||
complexCond, err = convertCondition(ctx, req.Condition, fieldNameToPhysical, condParams)
|
||||
if err != nil {
|
||||
return -1, fmt.Errorf("convert condition failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// add rw mode
|
||||
var extraCondition *rdb.ComplexCondition
|
||||
if tableInfo.RwMode == table.BotTableRWMode_LimitedReadWrite && req.UserID != "" {
|
||||
cond := &rdb.Condition{
|
||||
Field: database.DefaultUidColName,
|
||||
Operator: entity3.OperatorEqual,
|
||||
Value: req.UserID,
|
||||
}
|
||||
|
||||
if complexCond == nil {
|
||||
complexCond = &rdb.ComplexCondition{
|
||||
Conditions: []*rdb.Condition{cond},
|
||||
}
|
||||
} else {
|
||||
complexCond.Conditions = append(complexCond.Conditions, cond)
|
||||
extraCondition = &rdb.ComplexCondition{
|
||||
Conditions: []*rdb.Condition{cond},
|
||||
}
|
||||
}
|
||||
|
||||
if extraCondition != nil {
|
||||
finallyComplexCond = &rdb.ComplexCondition{
|
||||
NestedConditions: []*rdb.ComplexCondition{
|
||||
complexCond,
|
||||
extraCondition,
|
||||
},
|
||||
Operator: entity3.AND,
|
||||
}
|
||||
} else {
|
||||
finallyComplexCond = complexCond
|
||||
}
|
||||
|
||||
updateResp, err := d.rdb.UpdateData(ctx, &rdb.UpdateDataRequest{
|
||||
TableName: physicalTableName,
|
||||
Data: updateData,
|
||||
Where: complexCond,
|
||||
Where: finallyComplexCond,
|
||||
Limit: int64PtrToIntPtr(req.Limit),
|
||||
})
|
||||
if err != nil {
|
||||
@ -1417,31 +1442,46 @@ func (d databaseService) executeDeleteSQL(ctx context.Context, req *ExecuteSQLRe
|
||||
return -1, fmt.Errorf("missing delete condition")
|
||||
}
|
||||
|
||||
complexCond, err := convertCondition(ctx, req.Condition, fieldNameToPhysical, req.SQLParams)
|
||||
if err != nil {
|
||||
return -1, fmt.Errorf("convert condition failed: %v", err)
|
||||
var (
|
||||
finallyComplexCond *rdb.ComplexCondition
|
||||
complexCond *rdb.ComplexCondition
|
||||
)
|
||||
var err error
|
||||
if req.Condition != nil {
|
||||
complexCond, err = convertCondition(ctx, req.Condition, fieldNameToPhysical, req.SQLParams)
|
||||
if err != nil {
|
||||
return -1, fmt.Errorf("convert condition failed: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// add rw mode
|
||||
var extraCondition *rdb.ComplexCondition
|
||||
if tableInfo.RwMode == table.BotTableRWMode_LimitedReadWrite && req.UserID != "" {
|
||||
cond := &rdb.Condition{
|
||||
Field: database.DefaultUidColName,
|
||||
Operator: entity3.OperatorEqual,
|
||||
Value: req.UserID,
|
||||
}
|
||||
|
||||
if complexCond == nil {
|
||||
complexCond = &rdb.ComplexCondition{
|
||||
Conditions: []*rdb.Condition{cond},
|
||||
}
|
||||
} else {
|
||||
complexCond.Conditions = append(complexCond.Conditions, cond)
|
||||
extraCondition = &rdb.ComplexCondition{
|
||||
Conditions: []*rdb.Condition{cond},
|
||||
}
|
||||
}
|
||||
|
||||
if extraCondition != nil {
|
||||
finallyComplexCond = &rdb.ComplexCondition{
|
||||
NestedConditions: []*rdb.ComplexCondition{
|
||||
complexCond,
|
||||
extraCondition,
|
||||
},
|
||||
Operator: entity3.AND,
|
||||
}
|
||||
} else {
|
||||
finallyComplexCond = complexCond
|
||||
}
|
||||
|
||||
deleteResp, err := d.rdb.DeleteData(ctx, &rdb.DeleteDataRequest{
|
||||
TableName: physicalTableName,
|
||||
Where: complexCond,
|
||||
Where: finallyComplexCond,
|
||||
Limit: int64PtrToIntPtr(req.Limit),
|
||||
})
|
||||
if err != nil {
|
||||
|
||||
@ -18,10 +18,6 @@ package adaptor
|
||||
|
||||
import (
|
||||
"context"
|
||||
crossupload "github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload"
|
||||
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload/uploadmock"
|
||||
"github.com/coze-dev/coze-studio/backend/domain/upload/service"
|
||||
"github.com/coze-dev/coze-studio/backend/types/consts"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
@ -49,7 +45,10 @@ import (
|
||||
mockmodel "github.com/coze-dev/coze-studio/backend/crossdomain/contract/modelmgr/modelmock"
|
||||
crossplugin "github.com/coze-dev/coze-studio/backend/crossdomain/contract/plugin"
|
||||
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/plugin/pluginmock"
|
||||
crossupload "github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload"
|
||||
"github.com/coze-dev/coze-studio/backend/crossdomain/contract/upload/uploadmock"
|
||||
"github.com/coze-dev/coze-studio/backend/crossdomain/impl/code"
|
||||
"github.com/coze-dev/coze-studio/backend/domain/upload/service"
|
||||
userentity "github.com/coze-dev/coze-studio/backend/domain/user/entity"
|
||||
"github.com/coze-dev/coze-studio/backend/domain/workflow"
|
||||
"github.com/coze-dev/coze-studio/backend/domain/workflow/entity/vo"
|
||||
@ -61,6 +60,7 @@ import (
|
||||
"github.com/coze-dev/coze-studio/backend/internal/testutil"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/ctxcache"
|
||||
"github.com/coze-dev/coze-studio/backend/pkg/sonic"
|
||||
"github.com/coze-dev/coze-studio/backend/types/consts"
|
||||
)
|
||||
|
||||
func TestMain(m *testing.M) {
|
||||
|
||||
@ -194,7 +194,8 @@ func parseToFileNameAndFileExtension(ctx context.Context, fileURL string) (strin
|
||||
|
||||
fileExt, ok := response.Tagging["file_ext"]
|
||||
if !ok {
|
||||
return "", "", fmt.Errorf("failed to get file tagging file_ext")
|
||||
logs.CtxWarnf(ctx, "failed to get file tagging file ext")
|
||||
fileExt = strings.TrimPrefix(filepath.Ext(fileURI), ".")
|
||||
}
|
||||
if len(fileExt) == 0 {
|
||||
fileExt = strings.TrimPrefix(filepath.Ext(fileURI), ".")
|
||||
|
||||
@ -930,14 +930,23 @@ func (m *mysqlService) buildWhereClause(condition *rdb.ComplexCondition) (string
|
||||
if condition == nil {
|
||||
return "", nil, nil
|
||||
}
|
||||
|
||||
if condition.Operator == "" {
|
||||
condition.Operator = entity2.AND
|
||||
}
|
||||
if len(condition.NestedConditions) > 0 {
|
||||
return m.buildNestedConditions(condition)
|
||||
} else if len(condition.Conditions) > 0 {
|
||||
whereClauseString, values, err := m.buildWhereCondition(condition)
|
||||
return "WHERE " + whereClauseString, values, err
|
||||
} else {
|
||||
return "", nil, fmt.Errorf("condddd")
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (m *mysqlService) buildWhereCondition(condition *rdb.ComplexCondition) (string, []interface{}, error) {
|
||||
var whereClause strings.Builder
|
||||
values := make([]interface{}, 0)
|
||||
|
||||
for i, cond := range condition.Conditions {
|
||||
if i > 0 {
|
||||
whereClause.WriteString(fmt.Sprintf(" %s ", condition.Operator))
|
||||
@ -971,25 +980,35 @@ func (m *mysqlService) buildWhereClause(condition *rdb.ComplexCondition) (string
|
||||
values = append(values, cond.Value)
|
||||
}
|
||||
}
|
||||
|
||||
if len(condition.NestedConditions) > 0 {
|
||||
whereClause.WriteString(" AND (")
|
||||
for i, nested := range condition.NestedConditions {
|
||||
if i > 0 {
|
||||
whereClause.WriteString(fmt.Sprintf(" %s ", nested.Operator))
|
||||
}
|
||||
nestedClause, nestedValues, err := m.buildWhereClause(nested)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
whereClause.WriteString(nestedClause)
|
||||
values = append(values, nestedValues...)
|
||||
}
|
||||
whereClause.WriteString(")")
|
||||
}
|
||||
|
||||
if whereClause.Len() > 0 {
|
||||
return " WHERE " + whereClause.String(), values, nil
|
||||
return whereClause.String(), values, nil
|
||||
}
|
||||
return "", values, nil
|
||||
}
|
||||
|
||||
func (m *mysqlService) buildNestedConditions(condition *rdb.ComplexCondition) (string, []interface{}, error) {
|
||||
var whereClause strings.Builder
|
||||
values := make([]interface{}, 0)
|
||||
|
||||
whereClause.WriteString(" WHERE (")
|
||||
for i, nested := range condition.NestedConditions {
|
||||
if i > 0 {
|
||||
whereClause.WriteString(fmt.Sprintf(" %s ", nested.Operator))
|
||||
}
|
||||
nestedClause, nestedValues, err := m.buildWhereCondition(nested)
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
whereClause.WriteString(nestedClause)
|
||||
if i < len(condition.NestedConditions)-1 {
|
||||
whereClause.WriteString(" " + string(condition.Operator))
|
||||
}
|
||||
values = append(values, nestedValues...)
|
||||
}
|
||||
whereClause.WriteString(")")
|
||||
|
||||
if whereClause.Len() > 0 {
|
||||
return whereClause.String(), values, nil
|
||||
}
|
||||
return "", values, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user