213 lines
4.8 KiB
Go
213 lines
4.8 KiB
Go
package ydb
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"math/rand"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"xorm.io/xorm/schemas"
|
|
)
|
|
|
|
func TestIntPK(t *testing.T) {
|
|
type Int64PK struct {
|
|
Uuid int64 `xorm:"pk"`
|
|
}
|
|
|
|
type Int32PK struct {
|
|
Uuid int32 `xorm:"pk"`
|
|
}
|
|
|
|
assert.NoError(t, PrepareScheme(&Int64PK{}, &Int32PK{}))
|
|
|
|
engine, err := enginePool.GetDataQueryEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
for i := 0; i < 10; i++ {
|
|
_, err = session.Insert(&Int64PK{Uuid: int64(i)})
|
|
assert.NoError(t, err)
|
|
|
|
_, err = session.Insert(&Int32PK{Uuid: int32(i)})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
var uuidsInt64 []int64
|
|
err = session.
|
|
Table(engine.GetTableMapper().Obj2Table("Int64PK")).
|
|
Cols("uuid").
|
|
Find(&uuidsInt64)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 10, len(uuidsInt64))
|
|
|
|
var uuidsInt32 []int32
|
|
err = session.
|
|
Table(engine.GetTableMapper().Obj2Table("Int32PK")).
|
|
Cols("uuid").
|
|
Find(&uuidsInt32)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 10, len(uuidsInt32))
|
|
|
|
for i := 0; i < 10; i++ {
|
|
assert.Equal(t, int64(i), uuidsInt64[i])
|
|
assert.Equal(t, int32(i), uuidsInt32[i])
|
|
}
|
|
}
|
|
|
|
func TestUintPK(t *testing.T) {
|
|
type Uint8PK struct {
|
|
Uuid uint8 `xorm:"pk"`
|
|
}
|
|
|
|
type Uint32PK struct {
|
|
Uuid uint32 `xorm:"pk"`
|
|
}
|
|
|
|
type Uint64PK struct {
|
|
Uuid uint64 `xorm:"pk"`
|
|
}
|
|
|
|
assert.NoError(t, PrepareScheme(&Uint8PK{}, &Uint32PK{}, &Uint64PK{}))
|
|
|
|
engine, err := enginePool.GetDataQueryEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
for i := 0; i < 10; i++ {
|
|
_, err = session.Insert(&Uint8PK{Uuid: uint8(i)})
|
|
assert.NoError(t, err)
|
|
|
|
_, err = session.Insert(&Uint64PK{Uuid: uint64(i)})
|
|
assert.NoError(t, err)
|
|
|
|
_, err = session.Insert(&Uint32PK{Uuid: uint32(i)})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
var uuidsUint64 []uint64
|
|
err = session.
|
|
Table(engine.GetTableMapper().Obj2Table("Uint64PK")).
|
|
Cols("uuid").
|
|
Find(&uuidsUint64)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 10, len(uuidsUint64))
|
|
|
|
var uuidsUint32 []uint32
|
|
err = session.
|
|
Table(engine.GetTableMapper().Obj2Table("Uint32PK")).
|
|
Cols("uuid").
|
|
Find(&uuidsUint32)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 10, len(uuidsUint32))
|
|
|
|
var uuidsUint8 []uint8
|
|
err = session.
|
|
Table(engine.GetTableMapper().Obj2Table("Uint8PK")).
|
|
Cols("uuid").
|
|
Find(&uuidsUint8)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, 10, len(uuidsUint32))
|
|
|
|
for i := 0; i < 10; i++ {
|
|
assert.Equal(t, uint64(i), uuidsUint64[i])
|
|
assert.Equal(t, uint32(i), uuidsUint32[i])
|
|
assert.Equal(t, uint8(i), uuidsUint8[i])
|
|
}
|
|
}
|
|
|
|
func TestStringPK(t *testing.T) {
|
|
type CustomString string
|
|
type StringPK struct {
|
|
Uuid CustomString `xorm:"pk"`
|
|
}
|
|
|
|
engine, err := enginePool.GetScriptQueryEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
tbName := engine.GetTableMapper().Obj2Table("StringPK")
|
|
|
|
assert.NoError(t, engine.NewSession().DropTable(tbName))
|
|
assert.NoError(t, engine.Sync(&StringPK{}))
|
|
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
for i := 0; i < 10; i++ {
|
|
_, err = session.Insert(&StringPK{Uuid: CustomString(fmt.Sprintf("pk_%d", i))})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
id := rand.Int31n(10)
|
|
var data StringPK
|
|
has, err := session.ID(schemas.PK{fmt.Sprintf("pk_%d", id)}).Get(&data)
|
|
assert.NoError(t, err)
|
|
assert.True(t, has)
|
|
assert.EqualValues(t, fmt.Sprintf("pk_%d", id), data.Uuid)
|
|
}
|
|
|
|
func TestBytePK(t *testing.T) {
|
|
type BytePK struct {
|
|
Uuid []byte `xorm:"pk"`
|
|
}
|
|
|
|
engine, err := enginePool.GetScriptQueryEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
tbName := engine.GetTableMapper().Obj2Table("BytePK")
|
|
|
|
assert.NoError(t, engine.NewSession().DropTable(tbName))
|
|
assert.NoError(t, engine.Sync(&BytePK{}))
|
|
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
for i := 0; i < 10; i++ {
|
|
_, err = session.Insert(&BytePK{Uuid: []byte(fmt.Sprintf("pk_%d", i))})
|
|
assert.NoError(t, err)
|
|
}
|
|
|
|
id := rand.Int31n(10)
|
|
var data BytePK
|
|
has, err := session.ID(schemas.PK{[]byte(fmt.Sprintf("pk_%d", id))}).Get(&data)
|
|
assert.NoError(t, err)
|
|
assert.True(t, has)
|
|
assert.EqualValues(t, []byte(fmt.Sprintf("pk_%d", id)), data.Uuid)
|
|
}
|
|
|
|
func TestCompositePK(t *testing.T) {
|
|
assert.NoError(t, PrepareScheme(&Users{}))
|
|
engine, err := enginePool.GetDataQueryEngine()
|
|
assert.NoError(t, err)
|
|
assert.NotNil(t, engine)
|
|
|
|
users := getUsersData()
|
|
|
|
session := engine.NewSession()
|
|
defer session.Close()
|
|
|
|
_, err = session.Insert(&users)
|
|
assert.NoError(t, err)
|
|
|
|
for i, user := range users {
|
|
var data Users
|
|
_, err = session.ID(schemas.PK{
|
|
sql.NullInt64{Int64: int64(i), Valid: true},
|
|
user.Number,
|
|
}).Get(&data)
|
|
assert.NoError(t, err)
|
|
assert.Equal(t, user.Name, data.Name)
|
|
assert.Equal(t, user.Age, data.Age)
|
|
assert.Equal(t, user.UserID, data.UserID)
|
|
assert.Equal(t, user.Number, data.Number)
|
|
}
|
|
}
|