Skip to content

Commit eecaef2

Browse files
committed
feat(backend): fix
1 parent 83ca0fc commit eecaef2

File tree

2 files changed

+41
-29
lines changed

2 files changed

+41
-29
lines changed

backend/modules/observability/infra/repo/ck/spans.go

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import (
77
"bytes"
88
"context"
99
"fmt"
10+
"regexp"
1011
"strconv"
1112
"strings"
1213

@@ -213,23 +214,25 @@ func (s *SpansCkDaoImpl) formatAggregationExpression(ctx context.Context, dimens
213214
}
214215

215216
type buildSqlParam struct {
216-
spanTable string
217-
annoTable string
218-
queryParam *QueryParam
219-
db *gorm.DB
220-
omitColumns []string
217+
spanTable string
218+
annoTable string
219+
queryParam *QueryParam
220+
db *gorm.DB
221+
selectColumns []string
222+
omitColumns []string
221223
}
222224

223225
func (s *SpansCkDaoImpl) buildSql(ctx context.Context, param *QueryParam) (*gorm.DB, error) {
224226
db := s.newSession(ctx)
225227
var tableQueries []*gorm.DB
226228
for _, table := range param.Tables {
227229
query, err := s.buildSingleSql(ctx, &buildSqlParam{
228-
spanTable: table,
229-
annoTable: param.AnnoTableMap[table],
230-
queryParam: param,
231-
db: db,
232-
omitColumns: param.OmitColumns,
230+
spanTable: table,
231+
annoTable: param.AnnoTableMap[table],
232+
queryParam: param,
233+
db: db,
234+
selectColumns: param.SelectColumns,
235+
omitColumns: param.OmitColumns,
233236
})
234237
if err != nil {
235238
return nil, err
@@ -265,9 +268,9 @@ func (s *SpansCkDaoImpl) buildSingleSql(ctx context.Context, param *buildSqlPara
265268
return nil, err
266269
}
267270
queryColumns := lo.Ternary(
268-
len(param.SelectColumns) == 0,
269-
getColumnStr(spanColumns, param.OmitColumns),
270-
getColumnStr(param.SelectColumns, param.OmitColumns),
271+
len(param.selectColumns) == 0,
272+
getColumnStr(spanColumns, param.omitColumns),
273+
getColumnStr(param.selectColumns, param.omitColumns),
271274
)
272275
sqlQuery = param.db.
273276
Table(param.spanTable).Select(queryColumns).
@@ -370,11 +373,11 @@ func (s *SpansCkDaoImpl) buildFieldCondition(ctx context.Context, db *gorm.DB, f
370373
}
371374
queryChain = queryChain.Where(fmt.Sprintf("%s like ?", filter.FieldName), fmt.Sprintf("%%%v%%", fieldValues[0]))
372375
case loop_span.QueryTypeEnumNotMatch:
373-
if len(fieldValues) != 1 {
374-
return nil, fmt.Errorf("filter field %s should have one value", filter.FieldName)
375-
}
376-
queryChain = queryChain.Where(fmt.Sprintf("%s NOT like ?", fieldName), fmt.Sprintf("%%%v%%", fieldValues[0]))
377-
case loop_span.QueryTypeEnumEq:
376+
if len(fieldValues) != 1 {
377+
return nil, fmt.Errorf("filter field %s should have one value", filter.FieldName)
378+
}
379+
queryChain = queryChain.Where(fmt.Sprintf("%s NOT like ?", filter.FieldName), fmt.Sprintf("%%%v%%", fieldValues[0]))
380+
case loop_span.QueryTypeEnumEq:
378381
if len(fieldValues) != 1 {
379382
return nil, fmt.Errorf("filter field %s should have one value", filter.FieldName)
380383
}
@@ -680,6 +683,7 @@ var validColumnRegex = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_.]*$`)
680683
func isSafeColumnName(name string) bool {
681684
return validColumnRegex.MatchString(name)
682685
}
686+
683687
var (
684688
defSuperFieldsMap = map[string]bool{
685689
loop_span.SpanFieldStartTime: true,

backend/modules/observability/infra/repo/ck/spans_test.go

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -391,7 +391,7 @@ func TestBuildSql(t *testing.T) {
391391
},
392392
},
393393
},
394-
expectedSql: "SELECT * FROM `observability_spans` WHERE span_id in (SELECT span_id FROM `observability_annotations` WHERE (annotation_type = 'manual_feedback' AND key = 'abc' AND value_string IN ('123')) AND deleted_at = 0 AND start_time >= 1 AND start_time <= 2 SETTINGS final = 1) AND start_time >= 1 AND start_time <= 2 LIMIT 100",
394+
expectedSql: "SELECT start_time, logid, span_id, trace_id, parent_id, duration, psm, call_type, space_id, span_type, span_name, method, status_code, input, output, object_storage, system_tags_string, system_tags_long, system_tags_float, tags_string, tags_long, tags_bool, tags_float, tags_byte, reserve_create_time, logic_delete_date FROM `observability_spans` WHERE span_id in (SELECT span_id FROM `observability_annotations` WHERE (annotation_type = 'manual_feedback' AND key = 'abc' AND value_string IN ('123')) AND deleted_at = 0 AND start_time >= 1 AND start_time <= 2 SETTINGS final = 1) AND start_time >= 1 AND start_time <= 2 LIMIT 100",
395395
},
396396
}
397397
for _, tc := range testCases {
@@ -584,11 +584,15 @@ func TestQueryTypeEnumNotMatchSqlExceptionCases(t *testing.T) {
584584

585585
for _, tc := range testCases {
586586
t.Run(tc.name, func(t *testing.T) {
587-
qDb, err := new(SpansCkDaoImpl).buildSingleSql(context.Background(), db, "observability_spans", &QueryParam{
588-
StartTime: 1,
589-
EndTime: 2,
590-
Filters: tc.filter,
591-
Limit: 100,
587+
qDb, err := new(SpansCkDaoImpl).buildSingleSql(context.Background(), &buildSqlParam{
588+
spanTable: "observability_spans",
589+
queryParam: &QueryParam{
590+
StartTime: 1,
591+
EndTime: 2,
592+
Filters: tc.filter,
593+
Limit: 100,
594+
},
595+
db: db,
592596
})
593597

594598
if tc.shouldError {
@@ -731,11 +735,15 @@ func TestQueryTypeEnumNotMatchComplexScenarios(t *testing.T) {
731735

732736
for _, tc := range testCases {
733737
t.Run(tc.name, func(t *testing.T) {
734-
qDb, err := new(SpansCkDaoImpl).buildSingleSql(context.Background(), db, "observability_spans", &QueryParam{
735-
StartTime: 1,
736-
EndTime: 2,
737-
Filters: tc.filter,
738-
Limit: 100,
738+
qDb, err := new(SpansCkDaoImpl).buildSingleSql(context.Background(), &buildSqlParam{
739+
spanTable: "observability_spans",
740+
queryParam: &QueryParam{
741+
StartTime: 1,
742+
EndTime: 2,
743+
Filters: tc.filter,
744+
Limit: 100,
745+
},
746+
db: db,
739747
})
740748
assert.NoError(t, err, "Unexpected error for test case: %s", tc.name)
741749
sql := qDb.ToSQL(func(tx *gorm.DB) *gorm.DB {

0 commit comments

Comments
 (0)