251 lines
5.5 KiB
Go
251 lines
5.5 KiB
Go
package ydb
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
"github.com/stretchr/testify/assert"
|
|
"xorm.io/builder"
|
|
"xorm.io/xorm/internal/statements"
|
|
"xorm.io/xorm/schemas"
|
|
)
|
|
|
|
func TestUpdateMap(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDataQueryEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
loc := engine.GetTZLocation()
|
|
|
|
users := []map[string]interface{}{}
|
|
|
|
for i := 0; i < 20; i++ {
|
|
users = append(users, map[string]interface{}{
|
|
"name": fmt.Sprintf("Dat - %d", i),
|
|
"age": uint32(22 + i),
|
|
"user_id": sql.NullInt64{Int64: int64(i + 1), Valid: true},
|
|
"number": uuid.NewString(),
|
|
})
|
|
}
|
|
_, err = engine.Table((&Users{}).TableName()).Insert(users)
|
|
assert.NoError(t, err)
|
|
|
|
_, err = engine.
|
|
Table((&Users{}).TableName()).
|
|
Where(builder.Between{
|
|
Col: "user_id",
|
|
LessVal: sql.NullInt64{Int64: 1, Valid: true},
|
|
MoreVal: sql.NullInt64{Int64: 5, Valid: true},
|
|
}).
|
|
Update(map[string]interface{}{
|
|
"name": "datbeohbbh",
|
|
"age": uint32(22),
|
|
"updated_at": time.Now().In(loc),
|
|
})
|
|
assert.NoError(t, err)
|
|
|
|
_, err = engine.
|
|
Table((&Users{}).TableName()).
|
|
Update(map[string]interface{}{
|
|
"name": "datbeohbbh - test",
|
|
"updated_at": time.Now().In(loc),
|
|
}, &Users{
|
|
Account: Account{UserID: sql.NullInt64{Int64: 6, Valid: true}},
|
|
})
|
|
assert.NoError(t, err)
|
|
|
|
_, err = engine.
|
|
Table((&Users{}).TableName()).
|
|
ID(schemas.PK{
|
|
sql.NullInt64{Int64: 7, Valid: true},
|
|
users[6]["number"].(string),
|
|
}).
|
|
Update(map[string]interface{}{
|
|
"name": "datbeohbbh - test - 2",
|
|
"updated_at": time.Now().In(loc),
|
|
})
|
|
assert.Error(t, err)
|
|
assert.True(t, statements.IsIDConditionWithNoTableErr(err))
|
|
|
|
_, err = engine.
|
|
Table((&Users{}).TableName()).
|
|
Where("user_id = ? AND number = ?",
|
|
sql.NullInt64{Int64: 7, Valid: true},
|
|
users[6]["number"].(string)).
|
|
Update(map[string]interface{}{
|
|
"name": "datbeohbbh - test - 2",
|
|
"updated_at": time.Now().In(loc),
|
|
})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestUpdateIn(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDefaultEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
_, err = engine.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
userIds := []sql.NullInt64{}
|
|
for i := 0; i < 10; i++ {
|
|
userIds = append(userIds, sql.NullInt64{
|
|
Int64: int64(i),
|
|
Valid: true,
|
|
})
|
|
}
|
|
_, err = engine.In("user_id", userIds).Update(&Users{
|
|
Name: "datbeohbbh",
|
|
Age: uint32(22),
|
|
})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestUpdateStruct(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDefaultEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
_, err = engine.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
user := Users{
|
|
Name: "datbeohbbh",
|
|
Age: uint32(22),
|
|
}
|
|
_, err = engine.
|
|
ID(schemas.PK{
|
|
sql.NullInt64{Int64: 0, Valid: true},
|
|
users[0].Number,
|
|
}).
|
|
Update(&user)
|
|
assert.NoError(t, err)
|
|
|
|
_, err = engine.Update(&user, &Users{
|
|
Account: Account{
|
|
Number: users[0].Number,
|
|
},
|
|
})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestUpdateIncrDecr(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDefaultEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
_, err = engine.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
userIncr := Users{
|
|
Name: "datbeohbbh - incr",
|
|
}
|
|
|
|
_, err = engine.
|
|
ID(schemas.PK{
|
|
sql.NullInt64{Int64: 0, Valid: true},
|
|
users[0].Number,
|
|
}).
|
|
Incr("age", uint32(10)).
|
|
Update(&userIncr)
|
|
assert.NoError(t, err)
|
|
|
|
userDecr := Users{
|
|
Name: "datbeohbbh - decr",
|
|
}
|
|
_, err = engine.
|
|
ID(schemas.PK{
|
|
sql.NullInt64{Int64: 1, Valid: true},
|
|
users[1].Number,
|
|
}).
|
|
Decr("age", uint32(10)).
|
|
Update(&userDecr)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestUpdateMapCondition(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDefaultEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
_, err = engine.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
user := Users{
|
|
Name: "datbeohbbh",
|
|
}
|
|
|
|
_, err = engine.Update(&user, map[string]interface{}{
|
|
"user_id": sql.NullInt64{Int64: 0, Valid: true},
|
|
"number": users[0].Number,
|
|
})
|
|
assert.NoError(t, err)
|
|
|
|
ret := Users{}
|
|
has, err := engine.ID(schemas.PK{
|
|
sql.NullInt64{Int64: 0, Valid: true},
|
|
users[0].Number,
|
|
}).Get(&ret)
|
|
|
|
assert.NoError(t, err)
|
|
assert.True(t, has)
|
|
assert.Equal(t, user.Name, ret.Name)
|
|
}
|
|
|
|
func TestUpdateExprs(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDefaultEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
_, err = engine.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
user := Users{
|
|
Name: "datbeohbbh",
|
|
}
|
|
|
|
_, err = engine.
|
|
SetExpr("age", uint32(0)).
|
|
// AllCols().
|
|
Update(&user)
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
func TestUpdateExprs2(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDefaultEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
_, err = engine.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
_, err = engine.
|
|
SetExpr("age", uint32(20)).
|
|
SetExpr("name", "\"test\"").
|
|
Where(builder.Gte{
|
|
"user_id": sql.NullInt64{Int64: 5, Valid: true},
|
|
}).
|
|
Where(builder.Lt{
|
|
"user_id": sql.NullInt64{Int64: 10, Valid: true},
|
|
}).
|
|
And("age > ?", uint32(22)).
|
|
Update(new(Users))
|
|
assert.NoError(t, err)
|
|
}
|