diff --git a/backend/application/workflow/workflow.go b/backend/application/workflow/workflow.go index b3a7c153e..ffa9455c3 100644 --- a/backend/application/workflow/workflow.go +++ b/backend/application/workflow/workflow.go @@ -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() diff --git a/backend/domain/memory/database/service/database_impl.go b/backend/domain/memory/database/service/database_impl.go index 72020942e..f5810d0c6 100644 --- a/backend/domain/memory/database/service/database_impl.go +++ b/backend/domain/memory/database/service/database_impl.go @@ -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 { diff --git a/backend/domain/workflow/internal/canvas/adaptor/canvas_test.go b/backend/domain/workflow/internal/canvas/adaptor/canvas_test.go index e663679e9..52fee5146 100644 --- a/backend/domain/workflow/internal/canvas/adaptor/canvas_test.go +++ b/backend/domain/workflow/internal/canvas/adaptor/canvas_test.go @@ -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) { diff --git a/backend/domain/workflow/internal/nodes/knowledge/knowledge_indexer.go b/backend/domain/workflow/internal/nodes/knowledge/knowledge_indexer.go index 30a346693..d01c27aa0 100644 --- a/backend/domain/workflow/internal/nodes/knowledge/knowledge_indexer.go +++ b/backend/domain/workflow/internal/nodes/knowledge/knowledge_indexer.go @@ -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), ".") diff --git a/backend/infra/impl/rdb/mysql.go b/backend/infra/impl/rdb/mysql.go index 93d419def..06fc07406 100644 --- a/backend/infra/impl/rdb/mysql.go +++ b/backend/infra/impl/rdb/mysql.go @@ -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 }