|
7 | 7 | "bytes" |
8 | 8 | "context" |
9 | 9 | "fmt" |
| 10 | + "regexp" |
10 | 11 | "strconv" |
11 | 12 | "strings" |
12 | 13 |
|
@@ -213,23 +214,25 @@ func (s *SpansCkDaoImpl) formatAggregationExpression(ctx context.Context, dimens |
213 | 214 | } |
214 | 215 |
|
215 | 216 | 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 |
221 | 223 | } |
222 | 224 |
|
223 | 225 | func (s *SpansCkDaoImpl) buildSql(ctx context.Context, param *QueryParam) (*gorm.DB, error) { |
224 | 226 | db := s.newSession(ctx) |
225 | 227 | var tableQueries []*gorm.DB |
226 | 228 | for _, table := range param.Tables { |
227 | 229 | 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, |
233 | 236 | }) |
234 | 237 | if err != nil { |
235 | 238 | return nil, err |
@@ -265,9 +268,9 @@ func (s *SpansCkDaoImpl) buildSingleSql(ctx context.Context, param *buildSqlPara |
265 | 268 | return nil, err |
266 | 269 | } |
267 | 270 | 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), |
271 | 274 | ) |
272 | 275 | sqlQuery = param.db. |
273 | 276 | Table(param.spanTable).Select(queryColumns). |
@@ -370,11 +373,11 @@ func (s *SpansCkDaoImpl) buildFieldCondition(ctx context.Context, db *gorm.DB, f |
370 | 373 | } |
371 | 374 | queryChain = queryChain.Where(fmt.Sprintf("%s like ?", filter.FieldName), fmt.Sprintf("%%%v%%", fieldValues[0])) |
372 | 375 | 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: |
378 | 381 | if len(fieldValues) != 1 { |
379 | 382 | return nil, fmt.Errorf("filter field %s should have one value", filter.FieldName) |
380 | 383 | } |
@@ -680,6 +683,7 @@ var validColumnRegex = regexp.MustCompile(`^[a-zA-Z_][a-zA-Z0-9_.]*$`) |
680 | 683 | func isSafeColumnName(name string) bool { |
681 | 684 | return validColumnRegex.MatchString(name) |
682 | 685 | } |
| 686 | + |
683 | 687 | var ( |
684 | 688 | defSuperFieldsMap = map[string]bool{ |
685 | 689 | loop_span.SpanFieldStartTime: true, |
|
0 commit comments