fix default value
This commit is contained in:
parent
d6963b7d42
commit
dbecc42529
|
@ -345,10 +345,10 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column
|
||||||
|
|
||||||
if colDefault != nil {
|
if colDefault != nil {
|
||||||
col.Default = *colDefault
|
col.Default = *colDefault
|
||||||
if col.Default == "" {
|
col.DefaultIsEmpty = false
|
||||||
|
} else {
|
||||||
col.DefaultIsEmpty = true
|
col.DefaultIsEmpty = true
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
cts := strings.Split(colType, "(")
|
cts := strings.Split(colType, "(")
|
||||||
colName := cts[0]
|
colName := cts[0]
|
||||||
|
@ -411,13 +411,11 @@ func (db *mysql) GetColumns(tableName string) ([]string, map[string]*core.Column
|
||||||
col.IsAutoIncrement = true
|
col.IsAutoIncrement = true
|
||||||
}
|
}
|
||||||
|
|
||||||
if col.SQLType.IsText() || col.SQLType.IsTime() {
|
if !col.DefaultIsEmpty {
|
||||||
if col.Default != "" {
|
if col.SQLType.IsText() {
|
||||||
|
col.Default = "'" + col.Default + "'"
|
||||||
|
} else if col.SQLType.IsTime() && col.Default != "CURRENT_TIMESTAMP" {
|
||||||
col.Default = "'" + col.Default + "'"
|
col.Default = "'" + col.Default + "'"
|
||||||
} else {
|
|
||||||
if col.DefaultIsEmpty {
|
|
||||||
col.Default = "''"
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cols[col.Name] = col
|
cols[col.Name] = col
|
||||||
|
|
|
@ -344,9 +344,6 @@ func (db *sqlite3) GetColumns(tableName string) ([]string, map[string]*core.Colu
|
||||||
col.DefaultIsEmpty = false
|
col.DefaultIsEmpty = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if !col.SQLType.IsNumeric() && !col.DefaultIsEmpty {
|
|
||||||
col.Default = "'" + col.Default + "'"
|
|
||||||
}
|
|
||||||
cols[col.Name] = col
|
cols[col.Name] = col
|
||||||
colSeq = append(colSeq, col.Name)
|
colSeq = append(colSeq, col.Name)
|
||||||
}
|
}
|
||||||
|
|
11
engine.go
11
engine.go
|
@ -907,8 +907,15 @@ func (engine *Engine) mapType(v reflect.Value) (*core.Table, error) {
|
||||||
fieldType := fieldValue.Type()
|
fieldType := fieldValue.Type()
|
||||||
|
|
||||||
if ormTagStr != "" {
|
if ormTagStr != "" {
|
||||||
col = &core.Column{FieldName: t.Field(i).Name, Nullable: true, IsPrimaryKey: false,
|
col = &core.Column{
|
||||||
IsAutoIncrement: false, MapType: core.TWOSIDES, Indexes: make(map[string]int)}
|
FieldName: t.Field(i).Name,
|
||||||
|
Nullable: true,
|
||||||
|
IsPrimaryKey: false,
|
||||||
|
IsAutoIncrement: false,
|
||||||
|
MapType: core.TWOSIDES,
|
||||||
|
Indexes: make(map[string]int),
|
||||||
|
DefaultIsEmpty: true,
|
||||||
|
}
|
||||||
tags := splitTag(ormTagStr)
|
tags := splitTag(ormTagStr)
|
||||||
|
|
||||||
if len(tags) > 0 {
|
if len(tags) > 0 {
|
||||||
|
|
1
tag.go
1
tag.go
|
@ -125,6 +125,7 @@ func DefaultTagHandler(ctx *tagContext) error {
|
||||||
ctx.col.Default = ctx.nextTag
|
ctx.col.Default = ctx.nextTag
|
||||||
ctx.ignoreNext = true
|
ctx.ignoreNext = true
|
||||||
}
|
}
|
||||||
|
ctx.col.DefaultIsEmpty = false
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
224
tag_test.go
224
tag_test.go
|
@ -5,7 +5,6 @@
|
||||||
package xorm
|
package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -27,58 +26,27 @@ func TestCreatedAndUpdated(t *testing.T) {
|
||||||
|
|
||||||
u := new(UserCU)
|
u := new(UserCU)
|
||||||
err := testEngine.DropTables(u)
|
err := testEngine.DropTables(u)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(u)
|
err = testEngine.CreateTables(u)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
u.Name = "sss"
|
u.Name = "sss"
|
||||||
cnt, err := testEngine.Insert(u)
|
cnt, err := testEngine.Insert(u)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.EqualValues(t, 1, cnt)
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if cnt != 1 {
|
|
||||||
err = errors.New("insert not returned 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
u.Name = "xxx"
|
u.Name = "xxx"
|
||||||
cnt, err = testEngine.ID(u.Id).Update(u)
|
cnt, err = testEngine.ID(u.Id).Update(u)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.EqualValues(t, 1, cnt)
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if cnt != 1 {
|
|
||||||
err = errors.New("update not returned 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
u.Id = 0
|
u.Id = 0
|
||||||
u.Created = time.Now().Add(-time.Hour * 24 * 365)
|
u.Created = time.Now().Add(-time.Hour * 24 * 365)
|
||||||
u.Updated = u.Created
|
u.Updated = u.Created
|
||||||
fmt.Println(u)
|
|
||||||
cnt, err = testEngine.NoAutoTime().Insert(u)
|
cnt, err = testEngine.NoAutoTime().Insert(u)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.EqualValues(t, 1, cnt)
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if cnt != 1 {
|
|
||||||
err = errors.New("insert not returned 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type StrangeName struct {
|
type StrangeName struct {
|
||||||
|
@ -90,25 +58,17 @@ func TestStrangeName(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
err := testEngine.DropTables(new(StrangeName))
|
err := testEngine.DropTables(new(StrangeName))
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = testEngine.CreateTables(new(StrangeName))
|
err = testEngine.CreateTables(new(StrangeName))
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
_, err = testEngine.Insert(&StrangeName{Name: "sfsfdsfds"})
|
_, err = testEngine.Insert(&StrangeName{Name: "sfsfdsfds"})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
beans := make([]StrangeName, 0)
|
beans := make([]StrangeName, 0)
|
||||||
err = testEngine.Find(&beans)
|
err = testEngine.Find(&beans)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreatedUpdated(t *testing.T) {
|
func TestCreatedUpdated(t *testing.T) {
|
||||||
|
@ -179,29 +139,17 @@ func TestLowerCase(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
err := testEngine.Sync2(&Lowercase{})
|
err := testEngine.Sync2(&Lowercase{})
|
||||||
_, err = testEngine.Where("(id) > 0").Delete(&Lowercase{})
|
assert.NoError(t, err)
|
||||||
if err != nil {
|
_, err = testEngine.Where("id > 0").Delete(&Lowercase{})
|
||||||
t.Error(err)
|
assert.NoError(t, err)
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
_, err = testEngine.Insert(&Lowercase{ended: 1})
|
_, err = testEngine.Insert(&Lowercase{ended: 1})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
ls := make([]Lowercase, 0)
|
ls := make([]Lowercase, 0)
|
||||||
err = testEngine.Find(&ls)
|
err = testEngine.Find(&ls)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
assert.EqualValues(t, 1, len(ls))
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if len(ls) != 1 {
|
|
||||||
err = errors.New("should be 1")
|
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestAutoIncrTag(t *testing.T) {
|
func TestAutoIncrTag(t *testing.T) {
|
||||||
|
@ -297,6 +245,24 @@ func TestTagDefault(t *testing.T) {
|
||||||
|
|
||||||
assertSync(t, new(DefaultStruct))
|
assertSync(t, new(DefaultStruct))
|
||||||
|
|
||||||
|
tables, err := testEngine.DBMetas()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var defaultVal string
|
||||||
|
var isDefaultExist bool
|
||||||
|
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct")
|
||||||
|
for _, table := range tables {
|
||||||
|
if table.Name == tableName {
|
||||||
|
col := table.GetColumn("age")
|
||||||
|
assert.NotNil(t, col)
|
||||||
|
defaultVal = col.Default
|
||||||
|
isDefaultExist = !col.DefaultIsEmpty
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(t, isDefaultExist)
|
||||||
|
assert.EqualValues(t, "10", defaultVal)
|
||||||
|
|
||||||
cnt, err := testEngine.Omit("age").Insert(&DefaultStruct{
|
cnt, err := testEngine.Omit("age").Insert(&DefaultStruct{
|
||||||
Name: "test",
|
Name: "test",
|
||||||
Age: 20,
|
Age: 20,
|
||||||
|
@ -312,6 +278,122 @@ func TestTagDefault(t *testing.T) {
|
||||||
assert.EqualValues(t, "test", s.Name)
|
assert.EqualValues(t, "test", s.Name)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTagDefault2(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type DefaultStruct2 struct {
|
||||||
|
Id int64
|
||||||
|
Name string
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(DefaultStruct2))
|
||||||
|
|
||||||
|
tables, err := testEngine.DBMetas()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var defaultVal string
|
||||||
|
var isDefaultExist bool
|
||||||
|
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct2")
|
||||||
|
for _, table := range tables {
|
||||||
|
if table.Name == tableName {
|
||||||
|
col := table.GetColumn("name")
|
||||||
|
assert.NotNil(t, col)
|
||||||
|
defaultVal = col.Default
|
||||||
|
isDefaultExist = !col.DefaultIsEmpty
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.False(t, isDefaultExist, fmt.Sprintf("default value is --%v--", defaultVal))
|
||||||
|
assert.EqualValues(t, "", defaultVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTagDefault3(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type DefaultStruct3 struct {
|
||||||
|
Id int64
|
||||||
|
Name string `xorm:"default('myname')"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(DefaultStruct3))
|
||||||
|
|
||||||
|
tables, err := testEngine.DBMetas()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var defaultVal string
|
||||||
|
var isDefaultExist bool
|
||||||
|
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct3")
|
||||||
|
for _, table := range tables {
|
||||||
|
if table.Name == tableName {
|
||||||
|
col := table.GetColumn("name")
|
||||||
|
assert.NotNil(t, col)
|
||||||
|
defaultVal = col.Default
|
||||||
|
isDefaultExist = !col.DefaultIsEmpty
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(t, isDefaultExist)
|
||||||
|
assert.EqualValues(t, "'myname'", defaultVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTagDefault4(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type DefaultStruct4 struct {
|
||||||
|
Id int64
|
||||||
|
Created time.Time `xorm:"default(CURRENT_TIMESTAMP)"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(DefaultStruct4))
|
||||||
|
|
||||||
|
tables, err := testEngine.DBMetas()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var defaultVal string
|
||||||
|
var isDefaultExist bool
|
||||||
|
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct4")
|
||||||
|
for _, table := range tables {
|
||||||
|
if table.Name == tableName {
|
||||||
|
col := table.GetColumn("created")
|
||||||
|
assert.NotNil(t, col)
|
||||||
|
defaultVal = col.Default
|
||||||
|
isDefaultExist = !col.DefaultIsEmpty
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(t, isDefaultExist)
|
||||||
|
assert.EqualValues(t, "CURRENT_TIMESTAMP", defaultVal)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTagDefault5(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type DefaultStruct4 struct {
|
||||||
|
Id int64
|
||||||
|
Created time.Time `xorm:"default('2006-01-02 15:04:05')"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(DefaultStruct4))
|
||||||
|
|
||||||
|
tables, err := testEngine.DBMetas()
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
var defaultVal string
|
||||||
|
var isDefaultExist bool
|
||||||
|
tableName := testEngine.GetColumnMapper().Obj2Table("DefaultStruct4")
|
||||||
|
for _, table := range tables {
|
||||||
|
if table.Name == tableName {
|
||||||
|
col := table.GetColumn("created")
|
||||||
|
assert.NotNil(t, col)
|
||||||
|
defaultVal = col.Default
|
||||||
|
isDefaultExist = !col.DefaultIsEmpty
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert.True(t, isDefaultExist)
|
||||||
|
assert.EqualValues(t, "'2006-01-02 15:04:05'", defaultVal)
|
||||||
|
}
|
||||||
|
|
||||||
func TestTagsDirection(t *testing.T) {
|
func TestTagsDirection(t *testing.T) {
|
||||||
assert.NoError(t, prepareEngine())
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue