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