This commit is contained in:
Lunny Xiao 2021-08-12 22:47:02 +08:00
parent 2f60b3be0b
commit 889333da7b
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
6 changed files with 58 additions and 38 deletions

View File

@ -34,8 +34,28 @@ func (db *db2) Init(uri *URI) error {
return db.Base.Init(db, uri) return db.Base.Init(db, uri)
} }
func (db *db2) Version(context.Context, core.Queryer) (*schemas.Version, error) { func (db *db2) Version(ctx context.Context, queryer core.Queryer) (*schemas.Version, error) {
return nil, fmt.Errorf("not implementation") rows, err := queryer.QueryContext(ctx, "SELECT service_level, fixpack_num FROM TABLE(sysproc.env_get_inst_info()) as INSTANCEINFO")
if err != nil {
return nil, err
}
defer rows.Close()
if rows.Next() {
var serviceLevel, fixpackNum string
if err := rows.Scan(&serviceLevel, &fixpackNum); err != nil {
return nil, err
}
parts := strings.Split(serviceLevel, " ")
return &schemas.Version{
Number: parts[1],
Level: fixpackNum,
Edition: parts[0],
}, nil
}
return nil, rows.Err()
} }
func (db *db2) Features() *DialectFeatures { func (db *db2) Features() *DialectFeatures {
@ -65,7 +85,7 @@ func (db *db2) SQLType(c *schemas.Column) string {
return res return res
case schemas.UnsignedBigInt: case schemas.UnsignedBigInt:
return schemas.BigInt return schemas.BigInt
case schemas.UnsignedInt: case schemas.UnsignedInt, schemas.BigInt:
return schemas.BigInt return schemas.BigInt
case schemas.Int, schemas.Integer: case schemas.Int, schemas.Integer:
return schemas.Integer return schemas.Integer

View File

@ -169,7 +169,7 @@ func TestDumpTables(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.NoError(t, sess.Commit()) assert.NoError(t, sess.Commit())
for _, tp := range []schemas.DBType{schemas.SQLITE, schemas.MYSQL, schemas.POSTGRES, schemas.MSSQL} { for _, tp := range []schemas.DBType{schemas.SQLITE, schemas.MYSQL, schemas.POSTGRES, schemas.MSSQL, schemas.DB2} {
name := fmt.Sprintf("dump_%v-table.sql", tp) name := fmt.Sprintf("dump_%v-table.sql", tp)
t.Run(name, func(t *testing.T) { t.Run(name, func(t *testing.T) {
assert.NoError(t, testEngine.(*xorm.Engine).DumpTablesToFile([]*schemas.Table{tb}, name, tp)) assert.NoError(t, testEngine.(*xorm.Engine).DumpTablesToFile([]*schemas.Table{tb}, name, tp))

View File

@ -215,7 +215,7 @@ func TestFindAndCount(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
var results []FindAndCount var results []FindAndCount
sess := testEngine.Where("name = ?", "test1") sess := testEngine.Where("`name` = ?", "test1")
conds := sess.Conds() conds := sess.Conds()
err = sess.Find(&results) err = sess.Find(&results)
assert.NoError(t, err) assert.NoError(t, err)

View File

@ -63,7 +63,7 @@ func TestSQLCount(t *testing.T) {
assertSync(t, new(UserinfoCount2), new(UserinfoBooks)) assertSync(t, new(UserinfoCount2), new(UserinfoBooks))
total, err := testEngine.SQL("SELECT count(id) FROM " + testEngine.TableName("userinfo_count2", true)). total, err := testEngine.SQL("SELECT count(`id`) FROM " + testEngine.Quote(testEngine.TableName("userinfo_count2", true))).
Count() Count()
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 0, total) assert.EqualValues(t, 0, total)
@ -89,7 +89,7 @@ func TestCountWithOthers(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
total, err := testEngine.OrderBy("id desc").Limit(1).Count(new(CountWithOthers)) total, err := testEngine.OrderBy("`id` desc").Limit(1).Count(new(CountWithOthers))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
} }
@ -118,11 +118,11 @@ func TestWithTableName(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
total, err := testEngine.OrderBy("id desc").Count(new(CountWithTableName)) total, err := testEngine.OrderBy("`id` desc").Count(new(CountWithTableName))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
total, err = testEngine.OrderBy("id desc").Count(CountWithTableName{}) total, err = testEngine.OrderBy("`id` desc").Count(CountWithTableName{})
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
} }
@ -146,7 +146,7 @@ func TestCountWithSelectCols(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
total, err = testEngine.Select("count(id)").Count(CountWithTableName{}) total, err = testEngine.Select("count(`id`)").Count(CountWithTableName{})
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, total) assert.EqualValues(t, 2, total)
} }
@ -166,7 +166,7 @@ func TestCountWithGroupBy(t *testing.T) {
}) })
assert.NoError(t, err) assert.NoError(t, err)
cnt, err := testEngine.GroupBy("name").Count(new(CountWithTableName)) cnt, err := testEngine.GroupBy("`name`").Count(new(CountWithTableName))
assert.NoError(t, err) assert.NoError(t, err)
assert.EqualValues(t, 2, cnt) assert.EqualValues(t, 2, cnt)
} }

View File

@ -48,19 +48,19 @@ func TestExistStruct(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
has, err = testEngine.Where("name = ?", "test1").Exist(&RecordExist{}) has, err = testEngine.Where("`name` = ?", "test1").Exist(&RecordExist{})
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.Where("name = ?", "test2").Exist(&RecordExist{}) has, err = testEngine.Where("`name` = ?", "test2").Exist(&RecordExist{})
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
has, err = testEngine.SQL("select * from "+testEngine.TableName("record_exist", true)+" where name = ?", "test1").Exist() has, err = testEngine.SQL("select * from "+testEngine.Quote(testEngine.TableName("record_exist", true))+" where `name` = ?", "test1").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.SQL("select * from "+testEngine.TableName("record_exist", true)+" where name = ?", "test2").Exist() has, err = testEngine.SQL("select * from "+testEngine.Quote(testEngine.TableName("record_exist", true))+" where `name` = ?", "test2").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
@ -68,11 +68,11 @@ func TestExistStruct(t *testing.T) {
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.Table("record_exist").Where("name = ?", "test1").Exist() has, err = testEngine.Table("record_exist").Where("`name` = ?", "test1").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
has, err = testEngine.Table("record_exist").Where("name = ?", "test2").Exist() has, err = testEngine.Table("record_exist").Where("`name` = ?", "test2").Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
@ -124,43 +124,43 @@ func TestExistStructForJoin(t *testing.T) {
defer session.Close() defer session.Close()
session.Table("number"). session.Table("number").
Join("INNER", "order_list", "order_list.id = number.lid"). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", "player.id = order_list.eid"). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("number.lid = ?", 1) Where("`number`.`lid` = ?", 1)
has, err := session.Exist() has, err := session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
session.Table("number"). session.Table("number").
Join("INNER", "order_list", "order_list.id = number.lid"). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", "player.id = order_list.eid"). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("number.lid = ?", 2) Where("`number`.`lid` = ?", 2)
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
session.Table("number"). session.Table("number").
Select("order_list.id"). Select("order_list.id").
Join("INNER", "order_list", "order_list.id = number.lid"). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", "player.id = order_list.eid"). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("order_list.id = ?", 1) Where("`order_list`.`id` = ?", 1)
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("INNER", "order_list", "order_list.id = number.lid"). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", "player.id = order_list.eid"). Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`").
Where("player.id = ?", 2) Where("`player`.`id` = ?", 2)
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.False(t, has) assert.False(t, has)
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("INNER", "order_list", "order_list.id = number.lid"). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", "player.id = order_list.eid") Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`")
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)
@ -174,15 +174,15 @@ func TestExistStructForJoin(t *testing.T) {
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("INNER", "order_list", "order_list.id = number.lid"). Join("INNER", "order_list", "`order_list`.`id` = `number`.`lid`").
Join("LEFT", "player", "player.id = order_list.eid") Join("LEFT", "player", "`player`.`id` = `order_list`.`eid`")
has, err = session.Exist() has, err = session.Exist()
assert.Error(t, err) assert.Error(t, err)
assert.False(t, has) assert.False(t, has)
session.Table("number"). session.Table("number").
Select("player.id"). Select("player.id").
Join("LEFT", "player", "player.id = number.lid") Join("LEFT", "player", "`player`.`id` = `number`.`lid`")
has, err = session.Exist() has, err = session.Exist()
assert.NoError(t, err) assert.NoError(t, err)
assert.True(t, has) assert.True(t, has)

View File

@ -56,8 +56,8 @@ func TestJoinLimit(t *testing.T) {
var salaries []Salary var salaries []Salary
err = testEngine.Table("salary"). err = testEngine.Table("salary").
Join("INNER", "check_list", "check_list.id = salary.lid"). Join("INNER", "check_list", "`check_list`.`id` = `salary`.`lid`").
Join("LEFT", "empsetting", "empsetting.id = check_list.eid"). Join("LEFT", "empsetting", "`empsetting`.`id` = `check_list`.`eid`").
Limit(10, 0). Limit(10, 0).
Find(&salaries) Find(&salaries)
assert.NoError(t, err) assert.NoError(t, err)
@ -69,10 +69,10 @@ func TestWhere(t *testing.T) {
assertSync(t, new(Userinfo)) assertSync(t, new(Userinfo))
users := make([]Userinfo, 0) users := make([]Userinfo, 0)
err := testEngine.Where("id > ?", 2).Find(&users) err := testEngine.Where("`id` > ?", 2).Find(&users)
assert.NoError(t, err) assert.NoError(t, err)
err = testEngine.Where("id > ?", 2).And("id < ?", 10).Find(&users) err = testEngine.Where("`id` > ?", 2).And("`id` < ?", 10).Find(&users)
assert.NoError(t, err) assert.NoError(t, err)
} }