diff --git a/orm/cmd_utils.go b/orm/cmd_utils.go index 2811ad3a..602d102a 100644 --- a/orm/cmd_utils.go +++ b/orm/cmd_utils.go @@ -102,9 +102,10 @@ func getDbCreateSql(al *alias) (sqls []string) { } if fi.auto { - if al.Driver == DR_Postgres { + switch al.Driver { + case DR_Sqlite, DR_Postgres: column += T["auto"] - } else { + default: column += col + " " + T["auto"] } } else if fi.pk { diff --git a/orm/db_sqlite.go b/orm/db_sqlite.go index 20a90cde..46588125 100644 --- a/orm/db_sqlite.go +++ b/orm/db_sqlite.go @@ -20,7 +20,7 @@ var sqliteOperators = map[string]string{ } var sqliteTypes = map[string]string{ - "auto": "NOT NULL PRIMARY KEY AUTOINCREMENT", + "auto": "integer NOT NULL PRIMARY KEY AUTOINCREMENT", "pk": "NOT NULL PRIMARY KEY", "bool": "bool", "string": "varchar(%d)", diff --git a/orm/models.go b/orm/models.go index 112183c0..98d0aba3 100644 --- a/orm/models.go +++ b/orm/models.go @@ -20,7 +20,6 @@ var ( supportTag = map[string]int{ "-": 1, "null": 1, - "blank": 1, "index": 1, "unique": 1, "pk": 1, diff --git a/orm/models_boot.go b/orm/models_boot.go index 33afa701..61180914 100644 --- a/orm/models_boot.go +++ b/orm/models_boot.go @@ -42,7 +42,7 @@ func registerModel(model interface{}, prefix string) { if fi.name == "Id" { if fi.sf.Tag.Get(defaultStructTagName) == "" { switch fi.addrValue.Elem().Kind() { - case reflect.Int, reflect.Int64, reflect.Int32: + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint32, reflect.Uint64: fi.auto = true fi.pk = true info.fields.pk = fi diff --git a/orm/models_info_f.go b/orm/models_info_f.go index f3d91474..7316b612 100644 --- a/orm/models_info_f.go +++ b/orm/models_info_f.go @@ -93,7 +93,6 @@ type fieldInfo struct { auto bool pk bool null bool - blank bool index bool unique bool initial StrTo @@ -248,7 +247,6 @@ checkType: fi.fullName = mi.fullName + "." + sf.Name fi.null = attrs["null"] - fi.blank = attrs["blank"] fi.index = attrs["index"] fi.auto = attrs["auto"] fi.pk = attrs["pk"] @@ -257,7 +255,6 @@ checkType: switch fieldType { case RelManyToMany, RelReverseMany, RelReverseOne: fi.null = false - fi.blank = false fi.index = false fi.auto = false fi.pk = false @@ -360,22 +357,20 @@ checkType: if fi.auto { switch addrField.Elem().Kind() { - case reflect.Int, reflect.Int32, reflect.Int64: + case reflect.Int, reflect.Int32, reflect.Int64, reflect.Uint, reflect.Uint32, reflect.Uint64: default: - err = fmt.Errorf("auto primary key only support int, int32, int64, but found `%s`", addrField.Elem().Kind()) + err = fmt.Errorf("auto primary key only support int, int32, int64, uint, uint32, uint64 but found `%s`", addrField.Elem().Kind()) goto end } fi.pk = true } fi.null = false - fi.blank = false fi.index = false fi.unique = false } if fi.unique { - fi.blank = false fi.index = false } diff --git a/orm/models_test.go b/orm/models_test.go index 7794ffb0..9aafdf27 100644 --- a/orm/models_test.go +++ b/orm/models_test.go @@ -58,6 +58,11 @@ type DataNull struct { Decimal float64 `orm:"digits(8);decimals(4);null"` } +// only for mysql +type UserBig struct { + Id uint64 +} + type User struct { Id int UserName string `orm:"size(30);unique"` diff --git a/orm/orm_test.go b/orm/orm_test.go index 0346c1be..1eb8764c 100644 --- a/orm/orm_test.go +++ b/orm/orm_test.go @@ -196,6 +196,7 @@ func TestSyncDb(t *testing.T) { RegisterModel(new(Post)) RegisterModel(new(Tag)) RegisterModel(new(Comment)) + RegisterModel(new(UserBig)) BootStrap()