From 92821210e9ffac7341b4fe478b408726e00b5b46 Mon Sep 17 00:00:00 2001 From: Seth Shelnutt Date: Fri, 6 May 2016 08:41:13 -0400 Subject: [PATCH] Only set autoincrement if the tag is used. --- dialect_mysql.go | 8 ++++---- dialect_postgres.go | 4 ++-- dialect_sqlite3.go | 11 ++++++----- model.go | 2 +- 4 files changed, 13 insertions(+), 12 deletions(-) diff --git a/dialect_mysql.go b/dialect_mysql.go index f62bbe35..c22d6fd3 100644 --- a/dialect_mysql.go +++ b/dialect_mysql.go @@ -32,28 +32,28 @@ func (mysql) DataTypeOf(field *StructField) string { case reflect.Bool: sqlType = "boolean" 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" sqlType = "int AUTO_INCREMENT" } else { sqlType = "int" } 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" sqlType = "int unsigned AUTO_INCREMENT" } else { sqlType = "int unsigned" } 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" sqlType = "bigint AUTO_INCREMENT" } else { sqlType = "bigint" } 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" sqlType = "bigint unsigned AUTO_INCREMENT" } else { diff --git a/dialect_postgres.go b/dialect_postgres.go index 0c17d28e..c6ee4f6a 100644 --- a/dialect_postgres.go +++ b/dialect_postgres.go @@ -31,14 +31,14 @@ func (postgres) DataTypeOf(field *StructField) string { case reflect.Bool: sqlType = "boolean" 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" sqlType = "serial" } else { sqlType = "integer" } 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" sqlType = "bigserial" } else { diff --git a/dialect_sqlite3.go b/dialect_sqlite3.go index 79adf6d2..31b19229 100644 --- a/dialect_sqlite3.go +++ b/dialect_sqlite3.go @@ -29,18 +29,19 @@ func (sqlite3) DataTypeOf(field *StructField) string { case reflect.Bool: sqlType = "bool" case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uintptr: + sqlType = "integer" if field.IsPrimaryKey { - field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" - sqlType = "integer primary key autoincrement" - } else { - sqlType = "integer" + sqlType += "primary key" + } + if _, ok := field.TagSettings["AUTO_INCREMENT"]; ok { + sqlType += "autoincrement" } case reflect.Int64, reflect.Uint64: + sqlType = "bigint" if field.IsPrimaryKey { field.TagSettings["AUTO_INCREMENT"] = "AUTO_INCREMENT" sqlType = "integer primary key autoincrement" } else { - sqlType = "bigint" } case reflect.Float32, reflect.Float64: sqlType = "real" diff --git a/model.go b/model.go index f37ff7ea..db0e8c0e 100644 --- a/model.go +++ b/model.go @@ -7,7 +7,7 @@ import "time" // gorm.Model // } type Model struct { - ID uint `gorm:"primary_key"` + ID uint `gorm:"primary_key;AUTO_INCREMENT"` CreatedAt time.Time UpdatedAt time.Time DeletedAt *time.Time `sql:"index"`