Skip to content

Commit 0b89575

Browse files
waterdrinkiwanghc
authored andcommitted
Merge branch 'rewrite-sql-on-2505' of https://github.com/actiontech/sqle-ee into rewrite-sql-on-2505
1 parent ec192fd commit 0b89575

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

sqle/model/rule.go

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,11 +339,37 @@ func (s *Storage) GetRuleTemplateDetailByNameAndProjectIds(projectIds []string,
339339
if err == gorm.ErrRecordNotFound {
340340
return t, false, nil
341341
}
342+
343+
// GORM 的 .Preload() 在对关联字段添加条件时,是通过 额外查询 加载子表数据。 它不会对主表(RuleList)做联动过滤,只是关联加载数据,如果子查询没命中,就导致该字段是 nil。
344+
// 清洗无效数据,避免后续 nil 指针
345+
t.RuleList = filterValidRuleList(t.RuleList)
346+
t.CustomRuleList = filterValidCustomRuleList(t.CustomRuleList)
347+
342348
t.RuleList = filterRulesByTag(t.RuleList, tags)
343349
t.CustomRuleList = filterCustomRulesByTag(t.CustomRuleList, tags)
344350
return t, true, errors.New(errors.ConnectStorageError, err)
345351
}
346352

353+
func filterValidRuleList(list []RuleTemplateRule) []RuleTemplateRule {
354+
result := make([]RuleTemplateRule, 0, len(list))
355+
for _, item := range list {
356+
if item.Rule != nil {
357+
result = append(result, item)
358+
}
359+
}
360+
return result
361+
}
362+
363+
func filterValidCustomRuleList(list []RuleTemplateCustomRule) []RuleTemplateCustomRule {
364+
result := make([]RuleTemplateCustomRule, 0, len(list))
365+
for _, item := range list {
366+
if item.CustomRule != nil {
367+
result = append(result, item)
368+
}
369+
}
370+
return result
371+
}
372+
347373
func filterRulesByTag(ruleTemplateRules []RuleTemplateRule, tags string) []RuleTemplateRule {
348374
if tags == "" {
349375
return ruleTemplateRules

0 commit comments

Comments
 (0)