Skip to content

Commit

Permalink
table improve
Browse files Browse the repository at this point in the history
  • Loading branch information
fizzday committed Dec 5, 2019
1 parent 2d1842a commit 1f6d88b
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 15 deletions.
18 changes: 10 additions & 8 deletions binder.go
Expand Up @@ -119,12 +119,12 @@ func (o *Binder) BindParse(prefix string) error {
o.parseFields()
// 是否设置了表名
switch dstVal.Kind() {
case reflect.Ptr:
case reflect.Ptr,reflect.Struct:
if tn := dstVal.MethodByName("TableName"); tn.IsValid() {
BindName = tn.Call(nil)[0].String()
}
default:
return errors.New("传入的不是指针,如:var user User,传入 &user{}")
return errors.New("传入的对象有误,示例:var user User,传入 &user{}")
}
case reflect.Map: // map
o.SetBindType(OBJECT_MAP)
Expand Down Expand Up @@ -171,14 +171,16 @@ func (o *Binder) BindParse(prefix string) error {
o.parseFields()

// 是否设置了表名
if dstVal.Kind() != reflect.Ptr {
return errors.New("传入的不是指针,如:var user User,传入 &user{}")
}
if tn := br.MethodByName("TableName"); tn.IsValid() {
BindName = tn.Call(nil)[0].String()
switch dstVal.Kind() {
case reflect.Ptr,reflect.Struct:
if tn := br.MethodByName("TableName"); tn.IsValid() {
BindName = tn.Call(nil)[0].String()
}
default:
return errors.New("传入的对象有误,示例:var user User,传入 &user{}")
}
default:
return fmt.Errorf("table只接收 struct,[]struct,map[string]interface{},[]map[string]interface{}, 但是传入的是: %T", o.GetBindOrigin())
return fmt.Errorf("table只接收 struct,[]struct,map[string]interface{},[]map[string]interface{}的对象和地址, 但是传入的是: %T", o.GetBindOrigin())
}
// 是否设置了表名
if tn := dstVal.MethodByName("TableName"); tn.IsValid() {
Expand Down
21 changes: 16 additions & 5 deletions builder_default.go
Expand Up @@ -314,16 +314,27 @@ func (b *BuilderDefault) BuildJoin() (s string, err error) {

argsLength := len(args)
var prefix = b.IOrm.GetISession().GetIEngin().GetPrefix()
// 如果表名是 struct,则需要解析出表名
if argsLength > 1 {
// 只有长度大于2,才有可能使用对象.不然,就是个字符串
switch args[0].(type) {
case string:
break
default:
rl := reflect.ValueOf(args[0])
if tn := rl.MethodByName("TableName"); tn.IsValid() {
args[0] = tn.Call(nil)[0].String()
}
}
}
switch argsLength {
case 1: // join字符串 raw
//w = args[0].(string)
w = fmt.Sprintf("%s%s", prefix, args[0])
case 2: // join表 + 字符串
//w = args[0].(string) + " ON " + args[1].(string)
w = fmt.Sprintf("%s%s ON %s", prefix, args[0], args[1])
case 4: // join表 + (a字段+关系+a字段)
//w = args[0].(string) + " ON " + args[1].(string) + " " + args[2].(string) + " " + args[3].(string)

case 3: // join表 + (a字段=b字段)
w = fmt.Sprintf("%s%s ON %s = %s", prefix, args[0], args[1], args[2])
case 4: // join表 + (a字段+关系+b字段)
w = fmt.Sprintf("%s%s ON %s %s %s", prefix, args[0], args[1], args[2], args[3])
default:
err = errors.New("join format error")
Expand Down
2 changes: 1 addition & 1 deletion engin_test.go
Expand Up @@ -38,7 +38,7 @@ type Users struct {
Fi string `orm:"ignore"`
}

func (u *Users) TableName() string {
func (Users) TableName() string {
return "users"
}

Expand Down
2 changes: 1 addition & 1 deletion orm_query_test.go
Expand Up @@ -22,7 +22,7 @@ func TestOrm_BuildSql3(t *testing.T) {
var u = "age=age+1,num=num+1"
var wheres interface{}
wheres = [][]interface{}{{"a", ">", "b"}, {"a", "b"}}
sqlstr, a, b := db.Force().Table("users").Data(u).Where(wheres).BuildSql("update")
sqlstr, a, b := db.Force().Table(Users{}).Data(u).Where(wheres).BuildSql("update")

t.Log(sqlstr, a, b)
}
Expand Down

0 comments on commit 1f6d88b

Please sign in to comment.