Merge f83842b48e0e3cc2480e987b76135087d3554d58 into 0fd2fd66d539b47e89b60afcf9f1799252da307b

This commit is contained in:
Seth Shelnutt 2016-05-09 14:43:41 +00:00
commit 20e4bc304e
9 changed files with 27 additions and 24 deletions

View File

@ -8,7 +8,7 @@ import (
) )
type CustomizeColumn struct { type CustomizeColumn struct {
ID int64 `gorm:"column:mapped_id; primary_key:yes"` ID int64 `gorm:"column:mapped_id; primary_key:yes; AUTO_INCREMENT"`
Name string `gorm:"column:mapped_name"` Name string `gorm:"column:mapped_name"`
Date time.Time `gorm:"column:mapped_time"` Date time.Time `gorm:"column:mapped_time"`
} }
@ -67,12 +67,12 @@ func TestCustomColumnAndIgnoredFieldClash(t *testing.T) {
} }
type CustomizePerson struct { type CustomizePerson struct {
IdPerson string `gorm:"column:idPerson;primary_key:true"` IdPerson string `gorm:"column:idPerson;primary_key:true;AUTO_INCREMENT"`
Accounts []CustomizeAccount `gorm:"many2many:PersonAccount;associationforeignkey:idAccount;foreignkey:idPerson"` Accounts []CustomizeAccount `gorm:"many2many:PersonAccount;associationforeignkey:idAccount;foreignkey:idPerson"`
} }
type CustomizeAccount struct { type CustomizeAccount struct {
IdAccount string `gorm:"column:idAccount;primary_key:true"` IdAccount string `gorm:"column:idAccount;primary_key:true;AUTO_INCREMENT"`
Name string Name string
} }

View File

@ -32,28 +32,28 @@ func (mysql) DataTypeOf(field *StructField) string {
case reflect.Bool: case reflect.Bool:
sqlType = "boolean" sqlType = "boolean"
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32: case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32:
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok || field.IsPrimaryKey { if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "int AUTO_INCREMENT" sqlType = "int AUTO_INCREMENT"
} else { } else {
sqlType = "int" sqlType = "int"
} }
case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr: case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr:
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok || field.IsPrimaryKey { if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "int unsigned AUTO_INCREMENT" sqlType = "int unsigned AUTO_INCREMENT"
} else { } else {
sqlType = "int unsigned" sqlType = "int unsigned"
} }
case reflect.Int64: case reflect.Int64:
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok || field.IsPrimaryKey { if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "bigint AUTO_INCREMENT" sqlType = "bigint AUTO_INCREMENT"
} else { } else {
sqlType = "bigint" sqlType = "bigint"
} }
case reflect.Uint64: case reflect.Uint64:
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok || field.IsPrimaryKey { if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "bigint unsigned AUTO_INCREMENT" sqlType = "bigint unsigned AUTO_INCREMENT"
} else { } else {

View File

@ -31,14 +31,14 @@ func (postgres) DataTypeOf(field *StructField) string {
case reflect.Bool: case reflect.Bool:
sqlType = "boolean" sqlType = "boolean"
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr: case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr:
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok || field.IsPrimaryKey { if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "serial" sqlType = "serial"
} else { } else {
sqlType = "integer" sqlType = "integer"
} }
case reflect.Int64, reflect.Uint64: case reflect.Int64, reflect.Uint64:
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok || field.IsPrimaryKey { if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "bigserial" sqlType = "bigserial"
} else { } else {

View File

@ -29,18 +29,21 @@ func (sqlite3) DataTypeOf(field *StructField) string {
case reflect.Bool: case reflect.Bool:
sqlType = "bool" sqlType = "bool"
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr: case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr:
if field.IsPrimaryKey {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT"
sqlType = "integer primary key autoincrement"
} else {
sqlType = "integer" sqlType = "integer"
if field.IsPrimaryKey {
sqlType += " primary key"
}
if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
sqlType += " autoincrement"
} }
case reflect.Int64, reflect.Uint64: case reflect.Int64, reflect.Uint64:
sqlType = "bigint"
if field.IsPrimaryKey { if field.IsPrimaryKey {
field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok {
sqlType = "integer primary key autoincrement" sqlType = "integer primary key autoincrement"
} else { } else {
sqlType = "bigint" sqlType += "integer primary key"
}
} }
case reflect.Float32, reflect.Float64: case reflect.Float32, reflect.Float64:
sqlType = "real" sqlType = "real"

View File

@ -68,7 +68,7 @@ func OpenTestConnection() (db *gorm.DB, err error) {
func TestStringPrimaryKey(t *testing.T) { func TestStringPrimaryKey(t *testing.T) {
type UUIDStruct struct { type UUIDStruct struct {
ID string `gorm:"primary_key"` ID string `gorm:"primary_key;AUTO_INCREMENT"`
Name string Name string
} }
DB.AutoMigrate(&UUIDStruct{}) DB.AutoMigrate(&UUIDStruct{})

View File

@ -130,7 +130,7 @@ func (i *Num) Scan(src interface{}) error {
} }
type Animal struct { type Animal struct {
Counter uint64 `gorm:"primary_key:yes"` Counter uint64 `gorm:"primary_key:yes;AUTO_INCREMENT"`
Name string `sql:"DEFAULT:'galeone'"` Name string `sql:"DEFAULT:'galeone'"`
From string //test reserved sql keyword as field name From string //test reserved sql keyword as field name
Age time.Time `sql:"DEFAULT:current_timestamp"` Age time.Time `sql:"DEFAULT:current_timestamp"`

View File

@ -7,7 +7,7 @@ import "time"
// gorm.Model // gorm.Model
// } // }
type Model struct { type Model struct {
ID uint `gorm:"primary_key"` ID uint `gorm:"primary_key;AUTO_INCREMENT"`
CreatedAt time.Time CreatedAt time.Time
UpdatedAt time.Time UpdatedAt time.Time
DeletedAt *time.Time `sql:"index"` DeletedAt *time.Time `sql:"index"`

View File

@ -8,7 +8,7 @@ import (
) )
type Blog struct { type Blog struct {
ID uint `gorm:"primary_key"` ID uint `gorm:"primary_key;AUTO_INCREMENT"`
Locale string `gorm:"primary_key"` Locale string `gorm:"primary_key"`
Subject string Subject string
Body string Body string
@ -18,7 +18,7 @@ type Blog struct {
} }
type Tag struct { type Tag struct {
ID uint `gorm:"primary_key"` ID uint `gorm:"primary_key;AUTO_INCREMENT"`
Locale string `gorm:"primary_key"` Locale string `gorm:"primary_key"`
Value string Value string
Blogs []*Blog `gorm:"many2many:blogs_tags"` Blogs []*Blog `gorm:"many2many:blogs_tags"`

View File

@ -734,12 +734,12 @@ func TestManyToManyPreloadWithMultiPrimaryKeys(t *testing.T) {
type ( type (
Level1 struct { Level1 struct {
ID uint `gorm:"primary_key;"` ID uint `gorm:"primary_key;AUTO_INCREMENT"`
LanguageCode string `gorm:"primary_key"` LanguageCode string `gorm:"primary_key"`
Value string Value string
} }
Level2 struct { Level2 struct {
ID uint `gorm:"primary_key;"` ID uint `gorm:"primary_key;AUTO_INCREMENT"`
LanguageCode string `gorm:"primary_key"` LanguageCode string `gorm:"primary_key"`
Value string Value string
Level1s []Level1 `gorm:"many2many:levels;"` Level1s []Level1 `gorm:"many2many:levels;"`