fix:回退公共query
This commit is contained in:
parent
c43556ebf7
commit
187f2a3016
24
lxDb/sql.go
24
lxDb/sql.go
@ -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
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user