fix:回退公共query

This commit is contained in:
wangning 2025-08-23 19:41:43 +08:00
parent c43556ebf7
commit 187f2a3016

View File

@ -230,8 +230,7 @@ func SqlQuery(tx *gorm.DB, sql string, list interface{}, q *PaginationQuery, par
} else if strings.HasPrefix(where, " OR ") {
where = strings.Replace(where, " OR ", " WHERE ", 1)
builder.WriteString(where)
} else if where != "" {
builder.WriteString(" WHERE ")
} else {
builder.WriteString(where)
}
}
@ -261,14 +260,13 @@ func SqlQuery(tx *gorm.DB, sql string, list interface{}, q *PaginationQuery, par
if len(q.Summary) != 0 {
tx = tx.Offset(-1) // 需要去除offset, 否则结果可能为空, 注意: 设置0不起作用.
var summary = make(map[string]interface{})
//tx.Order("") // FIXME: 怎么去掉order by, sum是不需要order by的, 影响性能.
//tx.Select(q.SummarySql).Take(&summary) // 不适合rawsql?
// 安全构建汇总查询 - 使用参数化查询
summarySQL := "SELECT " + strings.Join(q.SummarySql, ", ") + " FROM (" + sql2 + ") ssss"
if err := tx.Raw(summarySQL, params...).Take(&summary).Error; err != nil {
return err
}
tx.Raw("SELECT "+strings.Join(q.SummarySql, ", ")+" FROM ("+sql2+") ssss", params...).Take(&summary)
// []byte 转 string. 不太合理, 应该返回int或float
for k, v := range summary {
if bs, ok := v.([]byte); ok {
summary[k] = string(bs)
@ -292,19 +290,17 @@ func SqlQuery(tx *gorm.DB, sql string, list interface{}, q *PaginationQuery, par
if q.Limit > 0 {
if q.Offset > 0 {
offset := (q.Offset - 1) * q.Limit
builder.WriteString(" LIMIT ?, ?")
params = append(params, offset, q.Limit)
s := fmt.Sprintf(" LIMIT %d, %d", offset, q.Limit)
builder.WriteString(s)
} else {
builder.WriteString(" LIMIT ?")
params = append(params, q.Limit)
s := fmt.Sprintf(" LIMIT %d", q.Limit)
builder.WriteString(s)
}
}
}
// 执行最终查询 - 使用参数化查询
if err := tx.Raw(builder.String(), params...).Find(list).Error; err != nil {
return err
}
tx.Raw(builder.String(), params...).Find(list)
return
}