add NotIn and more tests for tag (#665)
This commit is contained in:
parent
60c6346a77
commit
4524e40dda
|
@ -692,6 +692,13 @@ func (engine *Engine) In(column string, args ...interface{}) *Session {
|
||||||
return session.In(column, args...)
|
return session.In(column, args...)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotIn will generate "column NOT IN (?, ?)"
|
||||||
|
func (engine *Engine) NotIn(column string, args ...interface{}) *Session {
|
||||||
|
session := engine.NewSession()
|
||||||
|
session.isAutoClose = true
|
||||||
|
return session.NotIn(column, args...)
|
||||||
|
}
|
||||||
|
|
||||||
// Incr provides a update string like "column = column + ?"
|
// Incr provides a update string like "column = column + ?"
|
||||||
func (engine *Engine) Incr(column string, arg ...interface{}) *Session {
|
func (engine *Engine) Incr(column string, arg ...interface{}) *Session {
|
||||||
session := engine.NewSession()
|
session := engine.NewSession()
|
||||||
|
|
|
@ -83,6 +83,11 @@ func TestBuilder(t *testing.T) {
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
assert.EqualValues(t, 1, len(conds), "records should exist")
|
assert.EqualValues(t, 1, len(conds), "records should exist")
|
||||||
|
|
||||||
|
conds = make([]Condition, 0)
|
||||||
|
err = testEngine.NotIn("col_name", "col1", "col2").Find(&conds)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 0, len(conds), "records should not exist")
|
||||||
|
|
||||||
// complex condtions
|
// complex condtions
|
||||||
var where = builder.NewCond()
|
var where = builder.NewCond()
|
||||||
if true {
|
if true {
|
||||||
|
|
134
tag_test.go
134
tag_test.go
|
@ -110,48 +110,62 @@ func TestStrangeName(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
type CreatedUpdated struct {
|
func TestCreatedUpdated(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type CreatedUpdated struct {
|
||||||
Id int64
|
Id int64
|
||||||
Name string
|
Name string
|
||||||
Value float64 `xorm:"numeric"`
|
Value float64 `xorm:"numeric"`
|
||||||
Created time.Time `xorm:"created"`
|
Created time.Time `xorm:"created"`
|
||||||
Created2 time.Time `xorm:"created"`
|
Created2 time.Time `xorm:"created"`
|
||||||
Updated time.Time `xorm:"updated"`
|
Updated time.Time `xorm:"updated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCreatedUpdated(t *testing.T) {
|
|
||||||
assert.NoError(t, prepareEngine())
|
|
||||||
|
|
||||||
err := testEngine.Sync(&CreatedUpdated{})
|
err := testEngine.Sync(&CreatedUpdated{})
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
c := &CreatedUpdated{Name: "test"}
|
c := &CreatedUpdated{Name: "test"}
|
||||||
_, err = testEngine.Insert(c)
|
_, err = testEngine.Insert(c)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
c2 := new(CreatedUpdated)
|
c2 := new(CreatedUpdated)
|
||||||
has, err := testEngine.Id(c.Id).Get(c2)
|
has, err := testEngine.Id(c.Id).Get(c2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if !has {
|
assert.True(t, has)
|
||||||
panic(errors.New("no id"))
|
|
||||||
}
|
|
||||||
|
|
||||||
c2.Value -= 1
|
c2.Value -= 1
|
||||||
_, err = testEngine.Id(c2.Id).Update(c2)
|
_, err = testEngine.Id(c2.Id).Update(c2)
|
||||||
if err != nil {
|
assert.NoError(t, err)
|
||||||
t.Error(err)
|
}
|
||||||
panic(err)
|
|
||||||
|
func TestCreatedUpdatedInt64(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type CreatedUpdatedInt64 struct {
|
||||||
|
Id int64
|
||||||
|
Name string
|
||||||
|
Value float64 `xorm:"numeric"`
|
||||||
|
Created int64 `xorm:"created"`
|
||||||
|
Created2 int64 `xorm:"created"`
|
||||||
|
Updated int64 `xorm:"updated"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assertSync(t, &CreatedUpdatedInt64{})
|
||||||
|
|
||||||
|
c := &CreatedUpdatedInt64{Name: "test"}
|
||||||
|
_, err := testEngine.Insert(c)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
|
||||||
|
c2 := new(CreatedUpdatedInt64)
|
||||||
|
has, err := testEngine.ID(c.Id).Get(c2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
|
||||||
|
c2.Value -= 1
|
||||||
|
_, err = testEngine.ID(c2.Id).Update(c2)
|
||||||
|
assert.NoError(t, err)
|
||||||
}
|
}
|
||||||
|
|
||||||
type Lowercase struct {
|
type Lowercase struct {
|
||||||
|
@ -270,3 +284,77 @@ func TestTagComment(t *testing.T) {
|
||||||
assert.EqualValues(t, 1, len(tables[0].Columns()))
|
assert.EqualValues(t, 1, len(tables[0].Columns()))
|
||||||
assert.EqualValues(t, "主键", tables[0].Columns()[0].Comment)
|
assert.EqualValues(t, "主键", tables[0].Columns()[0].Comment)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTagDefault(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type DefaultStruct struct {
|
||||||
|
Id int64
|
||||||
|
Name string
|
||||||
|
Age int `xorm:"default(10)"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(DefaultStruct))
|
||||||
|
|
||||||
|
cnt, err := testEngine.Omit("age").Insert(&DefaultStruct{
|
||||||
|
Name: "test",
|
||||||
|
Age: 20,
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
var s DefaultStruct
|
||||||
|
has, err := testEngine.ID(1).Get(&s)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
assert.EqualValues(t, 10, s.Age)
|
||||||
|
assert.EqualValues(t, "test", s.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTagsDirection(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type OnlyFromDBStruct struct {
|
||||||
|
Id int64
|
||||||
|
Name string
|
||||||
|
Uuid string `xorm:"<- default '1'"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(OnlyFromDBStruct))
|
||||||
|
|
||||||
|
cnt, err := testEngine.Insert(&OnlyFromDBStruct{
|
||||||
|
Name: "test",
|
||||||
|
Uuid: "2",
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
var s OnlyFromDBStruct
|
||||||
|
has, err := testEngine.ID(1).Get(&s)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
assert.EqualValues(t, "1", s.Uuid)
|
||||||
|
assert.EqualValues(t, "test", s.Name)
|
||||||
|
|
||||||
|
type OnlyToDBStruct struct {
|
||||||
|
Id int64
|
||||||
|
Name string
|
||||||
|
Uuid string `xorm:"->"`
|
||||||
|
}
|
||||||
|
|
||||||
|
assertSync(t, new(OnlyToDBStruct))
|
||||||
|
|
||||||
|
cnt, err = testEngine.Insert(&OnlyToDBStruct{
|
||||||
|
Name: "test",
|
||||||
|
Uuid: "2",
|
||||||
|
})
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 1, cnt)
|
||||||
|
|
||||||
|
var s2 OnlyToDBStruct
|
||||||
|
has, err = testEngine.ID(1).Get(&s2)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.True(t, has)
|
||||||
|
assert.EqualValues(t, "", s2.Uuid)
|
||||||
|
assert.EqualValues(t, "test", s2.Name)
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue