Commit c81bbf98 authored by slene's avatar slene

orm now use a filed named `Id` as default auto primary key, you can ignore `orm:"auto"` setting

parent f02b286a
...@@ -32,8 +32,26 @@ func registerModel(model interface{}) { ...@@ -32,8 +32,26 @@ func registerModel(model interface{}) {
} }
if info.fields.pk == nil { if info.fields.pk == nil {
fmt.Printf("<orm.RegisterModel> `%s` need a primary key field\n", name) outFor:
os.Exit(2) for _, fi := range info.fields.fieldsDB {
if fi.name == "Id" {
if fi.sf.Tag.Get(defaultStructTagName) == "" {
switch fi.addrValue.Elem().Kind() {
case reflect.Int, reflect.Int64, reflect.Int32:
fi.auto = true
fi.pk = true
info.fields.pk = fi
break outFor
}
}
}
}
if info.fields.pk == nil {
fmt.Printf("<orm.RegisterModel> `%s` need a primary key field\n", name)
os.Exit(2)
}
} }
info.table = table info.table = table
......
...@@ -89,7 +89,7 @@ type fieldInfo struct { ...@@ -89,7 +89,7 @@ type fieldInfo struct {
fullName string fullName string
column string column string
addrValue reflect.Value addrValue reflect.Value
sf *reflect.StructField sf reflect.StructField
auto bool auto bool
pk bool pk bool
null bool null bool
...@@ -244,7 +244,7 @@ checkType: ...@@ -244,7 +244,7 @@ checkType:
fi.name = sf.Name fi.name = sf.Name
fi.column = getColumnName(fieldType, addrField, sf, tags["column"]) fi.column = getColumnName(fieldType, addrField, sf, tags["column"])
fi.addrValue = addrField fi.addrValue = addrField
fi.sf = &sf fi.sf = sf
fi.fullName = mi.fullName + "." + sf.Name fi.fullName = mi.fullName + "." + sf.Name
fi.null = attrs["null"] fi.null = attrs["null"]
...@@ -358,6 +358,14 @@ checkType: ...@@ -358,6 +358,14 @@ checkType:
if fi.auto || fi.pk { if fi.auto || fi.pk {
if fi.auto { if fi.auto {
switch addrField.Elem().Kind() {
case reflect.Int, reflect.Int32, reflect.Int64:
default:
err = fmt.Errorf("auto primary key only support int, int32, int64, but found `%s`", addrField.Elem().Kind())
goto end
}
fi.pk = true fi.pk = true
} }
fi.null = false fi.null = false
......
...@@ -13,10 +13,10 @@ import ( ...@@ -13,10 +13,10 @@ import (
) )
type Data struct { type Data struct {
Id int `orm:"auto"` Id int
Boolean bool Boolean bool
Char string `orm:"size(50)"` Char string `orm:size(50)`
Text string Text string `orm:"type(text)"`
Date time.Time `orm:"type(date)"` Date time.Time `orm:"type(date)"`
DateTime time.Time DateTime time.Time
Byte byte Byte byte
...@@ -37,10 +37,10 @@ type Data struct { ...@@ -37,10 +37,10 @@ type Data struct {
} }
type DataNull struct { type DataNull struct {
Id int `orm:"auto"` Id int
Boolean bool `orm:"null"` Boolean bool `orm:"null"`
Char string `orm:"size(50);null"` Char string `orm:"size(50);null"`
Text string `orm:"null"` Text string `orm:"type(text);null"`
Date time.Time `orm:"type(date);null"` Date time.Time `orm:"type(date);null"`
DateTime time.Time `orm:"null"` DateTime time.Time `orm:"null"`
Byte byte `orm:"null"` Byte byte `orm:"null"`
...@@ -61,7 +61,7 @@ type DataNull struct { ...@@ -61,7 +61,7 @@ type DataNull struct {
} }
type User struct { type User struct {
Id int `orm:"auto"` Id int
UserName string `orm:"size(30);unique"` UserName string `orm:"size(30);unique"`
Email string `orm:"size(100)"` Email string `orm:"size(100)"`
Password string `orm:"size(100)"` Password string `orm:"size(100)"`
...@@ -81,10 +81,10 @@ func NewUser() *User { ...@@ -81,10 +81,10 @@ func NewUser() *User {
} }
type Profile struct { type Profile struct {
Id int `orm:"auto"` Id int
Age int16 `` Age int16
Money float64 `` Money float64
User *User `orm:"reverse(one)" json:"-"` User *User `orm:"reverse(one)" json:"-"`
} }
func (u *Profile) TableName() string { func (u *Profile) TableName() string {
...@@ -97,8 +97,8 @@ func NewProfile() *Profile { ...@@ -97,8 +97,8 @@ func NewProfile() *Profile {
} }
type Post struct { type Post struct {
Id int `orm:"auto"` Id int
User *User `orm:"rel(fk)"` // User *User `orm:"rel(fk)"`
Title string `orm:"size(60)"` Title string `orm:"size(60)"`
Content string `` Content string ``
Created time.Time `orm:"auto_now_add"` Created time.Time `orm:"auto_now_add"`
...@@ -112,7 +112,7 @@ func NewPost() *Post { ...@@ -112,7 +112,7 @@ func NewPost() *Post {
} }
type Tag struct { type Tag struct {
Id int `orm:"auto"` Id int
Name string `orm:"size(30)"` Name string `orm:"size(30)"`
Posts []*Post `orm:"reverse(many)" json:"-"` Posts []*Post `orm:"reverse(many)" json:"-"`
} }
...@@ -123,7 +123,7 @@ func NewTag() *Tag { ...@@ -123,7 +123,7 @@ func NewTag() *Tag {
} }
type Comment struct { type Comment struct {
Id int `orm:"auto"` Id int
Post *Post `orm:"rel(fk)"` Post *Post `orm:"rel(fk)"`
Content string `` Content string ``
Parent *Comment `orm:"null;rel(fk)"` Parent *Comment `orm:"null;rel(fk)"`
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment