feat: 迁移 Admin Repository 到 MySQL 8 (#79)
This commit is contained in:
+10
-11
@@ -163,15 +163,15 @@ type PddProductRow struct {
|
||||
SkuCount int
|
||||
}
|
||||
|
||||
// 规格数交给 SQLite 算,不要把整个 skus_json 读进 Go 再数——
|
||||
// 规格数交给 MySQL 算,不要把整个 skus_json 读进 Go 再数——
|
||||
// 列表页几十上百行,每行都反序列化一遍纯属浪费。
|
||||
//
|
||||
// json_valid 那层判断不能省:skus_json 万一存进了坏数据,
|
||||
// json_array_length 会让**整条查询报错**,页面直接打不开。
|
||||
// JSON_VALID 那层判断不能省:skus_json 万一存进了坏数据,
|
||||
// JSON_LENGTH 会让**整条查询报错**,页面直接打不开。
|
||||
const pddSkuCountExpr = `
|
||||
CASE WHEN skus_json IS NULL OR skus_json = '' OR NOT json_valid(skus_json)
|
||||
CASE WHEN skus_json IS NULL OR skus_json = '' OR NOT JSON_VALID(skus_json)
|
||||
THEN -1
|
||||
ELSE COALESCE(json_array_length(skus_json, '$.skus'), -1)
|
||||
ELSE COALESCE(JSON_LENGTH(skus_json, '$.skus'), -1)
|
||||
END`
|
||||
|
||||
// pddListFilter 统一生成 PDD 列表和总数查询的筛选条件。
|
||||
@@ -181,7 +181,7 @@ func pddListFilter(keyword string, status model.CollectStatus) (string, []any) {
|
||||
args := make([]any, 0, 3)
|
||||
if keyword = strings.TrimSpace(keyword); keyword != "" {
|
||||
pattern := "%" + escapeLike(keyword) + "%"
|
||||
where += ` AND (goods_id LIKE ? ESCAPE '\' OR url LIKE ? ESCAPE '\')`
|
||||
where += ` AND (goods_id LIKE ? ESCAPE '!' OR url LIKE ? ESCAPE '!')`
|
||||
args = append(args, pattern, pattern)
|
||||
}
|
||||
if status != "" {
|
||||
@@ -230,12 +230,11 @@ func ListPddProducts(q Execer, keyword string, status model.CollectStatus, limit
|
||||
return list, total, nil
|
||||
}
|
||||
|
||||
// escapeLike 把 LIKE 的三个特殊字符转义掉,配合 ESCAPE '\' 使用。
|
||||
// 反斜杠必须第一个换,否则会把后面刚加的反斜杠又转义一遍。
|
||||
// escapeLike 把 LIKE 的三个特殊字符转义掉,配合 ESCAPE '!' 使用。
|
||||
func escapeLike(s string) string {
|
||||
s = strings.ReplaceAll(s, `\`, `\\`)
|
||||
s = strings.ReplaceAll(s, `%`, `\%`)
|
||||
s = strings.ReplaceAll(s, `_`, `\_`)
|
||||
s = strings.ReplaceAll(s, `!`, `!!`)
|
||||
s = strings.ReplaceAll(s, `%`, `!%`)
|
||||
s = strings.ReplaceAll(s, `_`, `!_`)
|
||||
return s
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user