@@ -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
6964func 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