mirror of
https://github.com/go-eagle/eagle.git
synced 2025-10-06 00:57:10 +08:00
83 lines
1.7 KiB
Go
83 lines
1.7 KiB
Go
package model
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
)
|
|
|
|
// NullType 空字节类型
|
|
type NullType byte
|
|
|
|
const (
|
|
_ NullType = iota
|
|
// IsNull the same as `is null`
|
|
IsNull
|
|
// IsNotNull the same as `is not null`
|
|
IsNotNull
|
|
)
|
|
|
|
// WhereBuild sql build where
|
|
// see: https://github.com/jinzhu/gorm/issues/2055
|
|
func WhereBuild(where map[string]interface{}) (whereSQL string, vals []interface{}, err error) {
|
|
for k, v := range where {
|
|
ks := strings.Split(k, " ")
|
|
if len(ks) > 2 {
|
|
return "", nil, fmt.Errorf("Error in query condition: %s. ", k)
|
|
}
|
|
|
|
if whereSQL != "" {
|
|
whereSQL += " AND "
|
|
}
|
|
|
|
fmt.Println(strings.Join(ks, ","))
|
|
switch len(ks) {
|
|
case 1:
|
|
//fmt.Println(reflect.TypeOf(v))
|
|
switch v := v.(type) {
|
|
case NullType:
|
|
fmt.Println()
|
|
if v == IsNotNull {
|
|
whereSQL += fmt.Sprint(k, " IS NOT NULL")
|
|
} else {
|
|
whereSQL += fmt.Sprint(k, " IS NULL")
|
|
}
|
|
default:
|
|
whereSQL += fmt.Sprint(k, "=?")
|
|
vals = append(vals, v)
|
|
}
|
|
case 2:
|
|
k = ks[0]
|
|
switch ks[1] {
|
|
case "=":
|
|
whereSQL += fmt.Sprint(k, "=?")
|
|
vals = append(vals, v)
|
|
case ">":
|
|
whereSQL += fmt.Sprint(k, ">?")
|
|
vals = append(vals, v)
|
|
case ">=":
|
|
whereSQL += fmt.Sprint(k, ">=?")
|
|
vals = append(vals, v)
|
|
case "<":
|
|
whereSQL += fmt.Sprint(k, "<?")
|
|
vals = append(vals, v)
|
|
case "<=":
|
|
whereSQL += fmt.Sprint(k, "<=?")
|
|
vals = append(vals, v)
|
|
case "!=":
|
|
whereSQL += fmt.Sprint(k, "!=?")
|
|
vals = append(vals, v)
|
|
case "<>":
|
|
whereSQL += fmt.Sprint(k, "!=?")
|
|
vals = append(vals, v)
|
|
case "in":
|
|
whereSQL += fmt.Sprint(k, " in (?)")
|
|
vals = append(vals, v)
|
|
case "like":
|
|
whereSQL += fmt.Sprint(k, " like ?")
|
|
vals = append(vals, v)
|
|
}
|
|
}
|
|
}
|
|
return
|
|
}
|