fix: incorrect query when value is null
正在显示
1 个修改的文件
包含
14 行增加
和
1 行删除
@@ -141,7 +141,11 @@ func (c Condition) SetWhere(params QueryOptions, q *gorm.DB) { | @@ -141,7 +141,11 @@ func (c Condition) SetWhere(params QueryOptions, q *gorm.DB) { | ||
141 | } | 141 | } |
142 | if len(c.In) > 0 { | 142 | if len(c.In) > 0 { |
143 | if c.Field.SQLType == domain.Float.ToString() { | 143 | if c.Field.SQLType == domain.Float.ToString() { |
144 | - q.Where(fmt.Sprintf("%v in %v", c.CastType(c.Field.SQLName, domain.DECIMALV2.ToString()), c.InArgs(c.In))) | 144 | + if hasEmpty(c.In) { |
145 | + q.Where(fmt.Sprintf("((%v in %v) or (%v is null))", c.CastType(c.Field.SQLName, domain.DECIMALV2.ToString()), c.InArgs(c.In), c.Field.SQLName)) | ||
146 | + } else { | ||
147 | + q.Where(fmt.Sprintf("%v in %v", c.CastType(c.Field.SQLName, domain.DECIMALV2.ToString()), c.InArgs(c.In))) | ||
148 | + } | ||
145 | } else { | 149 | } else { |
146 | q.Where(fmt.Sprintf("%v in %v", c.CastType(c.FormatIfNull(params, c.Field), "string"), c.InArgs(c.In))) | 150 | q.Where(fmt.Sprintf("%v in %v", c.CastType(c.FormatIfNull(params, c.Field), "string"), c.InArgs(c.In))) |
147 | } | 151 | } |
@@ -222,6 +226,15 @@ func formatFiled(f *domain.Field) string { | @@ -222,6 +226,15 @@ func formatFiled(f *domain.Field) string { | ||
222 | return f.SQLName | 226 | return f.SQLName |
223 | } | 227 | } |
224 | 228 | ||
229 | +func hasEmpty(in []interface{}) bool { | ||
230 | + for _, arg := range in { | ||
231 | + if v, ok := arg.(string); ok && len(v) == 0 { | ||
232 | + return true | ||
233 | + } | ||
234 | + } | ||
235 | + return false | ||
236 | +} | ||
237 | + | ||
225 | func castType(sql, t string) string { | 238 | func castType(sql, t string) string { |
226 | return fmt.Sprintf("cast(%v as %v)", sql, t) | 239 | return fmt.Sprintf("cast(%v as %v)", sql, t) |
227 | } | 240 | } |
-
请 注册 或 登录 后发表评论