Skip to content

Commit 2d0e4ac

Browse files
authored
🐛 fix: update SQL query formatting and restore package import (#237)
1 parent 96792b4 commit 2d0e4ac

File tree

2 files changed

+33
-24
lines changed

2 files changed

+33
-24
lines changed

pkg/config/gormdb/gorm.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,16 @@ import (
1111
"log/slog"
1212
"os"
1313

14-
"github.com/mss-boot-io/mss-boot/pkg"
15-
1614
"github.com/casbin/casbin/v2"
1715
"github.com/casbin/casbin/v2/model"
1816
"github.com/casbin/casbin/v2/persist"
1917
gormadapter "github.com/casbin/gorm-adapter/v3"
2018
"gorm.io/gorm"
2119
"gorm.io/gorm/logger"
2220
"gorm.io/gorm/schema"
21+
22+
"github.com/mss-boot-io/mss-boot/pkg"
23+
"github.com/mss-boot-io/mss-boot/pkg/search/gorms"
2324
)
2425

2526
// DB gorm db
@@ -171,5 +172,6 @@ func (e *Database) Init() {
171172
Enforcer.EnableAutoSave(true)
172173
Enforcer.EnableAutoBuildRoleLinks(true)
173174
Enforcer.EnableLog(true)
175+
gorms.Driver = e.Driver
174176
}
175177
}

pkg/search/gorms/query.go

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,6 @@ func ResolveSearchQuery(driver string, q interface{}, condition Condition) {
4141
}
4242
var t *resolveSearchTag
4343

44-
//var sep = "`"
45-
//if driver == Postgres {
46-
// sep = "\""
47-
//}
48-
4944
for i := 0; i < qType.NumField(); i++ {
5045
tag, ok := qType.Field(i).Tag.Lookup(FromQueryTag)
5146
if !ok {
@@ -67,6 +62,11 @@ func ResolveSearchQuery(driver string, q interface{}, condition Condition) {
6762
}
6863

6964
func parseSQL(driver string, searchTag *resolveSearchTag, condition Condition, qValue reflect.Value, i int) {
65+
var sep = "`"
66+
if driver == Postgres {
67+
sep = "\""
68+
}
69+
7070
if driver == Dm {
7171
searchTag.Table = strings.ToUpper(searchTag.Table)
7272
searchTag.Column = strings.ToUpper(searchTag.Column)
@@ -76,55 +76,62 @@ func parseSQL(driver string, searchTag *resolveSearchTag, condition Condition, q
7676
iStr = "i"
7777
}
7878
if searchTag.Table != "" {
79-
searchTag.Table = fmt.Sprintf("`%s`.", searchTag.Table)
79+
searchTag.Table = fmt.Sprintf("%s%s%s.", sep, searchTag.Table, sep)
8080
}
81+
column := fmt.Sprintf("%s%s%s", sep, searchTag.Column, sep)
8182
switch searchTag.Type {
8283
case "left":
8384
//左关联
8485
join := condition.SetJoinOn(searchTag.Type, fmt.Sprintf(
85-
"left join `%s` on `%s`.`%s` = %s.`%s`",
86+
"left join %s%s%s on %s%s%s.%s%s%s = %s%s%s.%s%s%s",
87+
sep,
8688
searchTag.Join,
89+
sep, sep,
8790
searchTag.Join,
91+
sep, sep,
8892
searchTag.On[0],
93+
sep, sep,
8994
searchTag.Table,
95+
sep, sep,
9096
searchTag.On[1],
97+
sep,
9198
))
9299
ResolveSearchQuery(driver, qValue.Field(i).Interface(), join)
93100
case "exact", "iexact":
94-
condition.SetWhere(fmt.Sprintf("%s`%s` = ?", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).Interface()})
101+
condition.SetWhere(fmt.Sprintf("%s = ?", column), []interface{}{qValue.Field(i).Interface()})
95102
case "contains":
96-
condition.SetWhere(fmt.Sprintf("%s`%s` like ?", searchTag.Table, searchTag.Column), []interface{}{"%" + qValue.Field(i).String() + "%"})
103+
condition.SetWhere(fmt.Sprintf("%s like ?", column), []interface{}{"%" + qValue.Field(i).String() + "%"})
97104
case "icontains":
98-
condition.SetWhere(fmt.Sprintf("%s`%s` %slike ?", searchTag.Table, searchTag.Column, iStr), []interface{}{"%" + qValue.Field(i).String() + "%"})
105+
condition.SetWhere(fmt.Sprintf("%s %slike ?", column, iStr), []interface{}{"%" + qValue.Field(i).String() + "%"})
99106
case "gt":
100-
condition.SetWhere(fmt.Sprintf("%s`%s` > ?", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).Interface()})
107+
condition.SetWhere(fmt.Sprintf("%s > ?", column), []interface{}{qValue.Field(i).Interface()})
101108
case "gte":
102-
condition.SetWhere(fmt.Sprintf("%s`%s` >= ?", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).Interface()})
109+
condition.SetWhere(fmt.Sprintf("%s >= ?", column), []interface{}{qValue.Field(i).Interface()})
103110
case "lt":
104-
condition.SetWhere(fmt.Sprintf("%s`%s` < ?", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).Interface()})
111+
condition.SetWhere(fmt.Sprintf("%s < ?", column), []interface{}{qValue.Field(i).Interface()})
105112
case "lte":
106-
condition.SetWhere(fmt.Sprintf("%s`%s` <= ?", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).Interface()})
113+
condition.SetWhere(fmt.Sprintf("%s <= ?", column), []interface{}{qValue.Field(i).Interface()})
107114
case "startswith":
108-
condition.SetWhere(fmt.Sprintf("%s`%s` like ?", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).String() + "%"})
115+
condition.SetWhere(fmt.Sprintf("%s like ?", column), []interface{}{qValue.Field(i).String() + "%"})
109116
case "istartswith":
110-
condition.SetWhere(fmt.Sprintf("%s`%s` %slike ?", searchTag.Table, searchTag.Column, iStr), []interface{}{qValue.Field(i).String() + "%"})
117+
condition.SetWhere(fmt.Sprintf("%s %slike ?", column, iStr), []interface{}{qValue.Field(i).String() + "%"})
111118
case "endswith":
112-
condition.SetWhere(fmt.Sprintf("%s`%s` like ?", searchTag.Table, searchTag.Column), []interface{}{"%" + qValue.Field(i).String()})
119+
condition.SetWhere(fmt.Sprintf("%s like ?", column), []interface{}{"%" + qValue.Field(i).String()})
113120
case "iendswith":
114-
condition.SetWhere(fmt.Sprintf("%s`%s` %slike ?", searchTag.Table, searchTag.Column, iStr), []interface{}{"%" + qValue.Field(i).String()})
121+
condition.SetWhere(fmt.Sprintf("%s %slike ?", column, iStr), []interface{}{"%" + qValue.Field(i).String()})
115122
case "in":
116-
condition.SetWhere(fmt.Sprintf("%s`%s` in (?)", searchTag.Table, searchTag.Column), []interface{}{qValue.Field(i).Interface()})
123+
condition.SetWhere(fmt.Sprintf("%s in (?)", column), []interface{}{qValue.Field(i).Interface()})
117124
case "isnull":
118125
if !(qValue.Field(i).IsZero() && qValue.Field(i).IsNil()) {
119-
condition.SetWhere(fmt.Sprintf("%s`%s` isnull", searchTag.Table, searchTag.Column), make([]interface{}, 0))
126+
condition.SetWhere(fmt.Sprintf("%s isnull", column), make([]interface{}, 0))
120127
}
121128
case "between":
122-
condition.SetWhere(fmt.Sprintf("%s`%s` between ? and ?", searchTag.Table, searchTag.Column),
129+
condition.SetWhere(fmt.Sprintf("%s between ? and ?", column),
123130
[]interface{}{qValue.Field(i).Index(0).Interface(), qValue.Field(i).Index(1).Interface()})
124131
case "order":
125132
switch strings.ToLower(qValue.Field(i).String()) {
126133
case "desc", "asc":
127-
condition.SetOrder(fmt.Sprintf("%s`%s` %s", searchTag.Table, searchTag.Column, qValue.Field(i).String()))
134+
condition.SetOrder(fmt.Sprintf("%s %s", column, qValue.Field(i).String()))
128135
}
129136
}
130137
}

0 commit comments

Comments
 (0)