Fix tests

This commit is contained in:
Lunny Xiao 2021-08-07 20:43:56 +08:00
parent 25b3513489
commit de7b0da562
7 changed files with 83 additions and 19 deletions

View File

@ -573,7 +573,7 @@ func (db *dameng) SQLType(c *schemas.Column) string {
var res string
switch t := c.SQLType.Name; t {
case schemas.TinyInt, "BYTE":
res = "TINYINT"
return "TINYINT"
case schemas.SmallInt, schemas.MediumInt, schemas.Int, schemas.Integer:
return "INTEGER"
case schemas.BigInt,
@ -660,6 +660,12 @@ func (db *dameng) DropTableSQL(tableName string) (string, bool) {
return fmt.Sprintf("DROP TABLE %s", db.quoter.Quote(tableName)), false
}
// ModifyColumnSQL returns a SQL to modify SQL
func (db *dameng) ModifyColumnSQL(tableName string, col *schemas.Column) string {
s, _ := ColumnString(db.dialect, col, false)
return fmt.Sprintf("ALTER TABLE %s MODIFY %s", tableName, s)
}
func (db *dameng) CreateTableSQL(ctx context.Context, queryer core.Queryer, table *schemas.Table, tableName string) (string, bool, error) {
if tableName == "" {
tableName = table.Name
@ -675,6 +681,13 @@ func (db *dameng) CreateTableSQL(ctx context.Context, queryer core.Queryer, tabl
for i, colName := range table.ColumnsSeq() {
col := table.GetColumn(colName)
if col.SQLType.IsBool() && !col.DefaultIsEmpty {
if col.Default == "true" {
col.Default = "1"
} else if col.Default == "false" {
col.Default = "0"
}
}
s, _ := ColumnString(db, col, false)
b.WriteString(s)
if i != len(table.ColumnsSeq())-1 {
@ -792,6 +805,16 @@ func (d *dmClobScanner) Scan(data interface{}) error {
}
}
func addSingleQuote(name string) string {
if len(name) < 2 {
return name
}
if name[0] == '\'' && name[len(name)-1] == '\'' {
return name
}
return fmt.Sprintf("'%s'", name)
}
func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableName string) ([]string, map[string]*schemas.Column, error) {
s := `select column_name from user_cons_columns
where constraint_name = (select constraint_name from user_constraints
@ -931,7 +954,7 @@ func (db *dameng) GetColumns(queryer core.Queryer, ctx context.Context, tableNam
if col.SQLType.IsText() || col.SQLType.IsTime() {
if !col.DefaultIsEmpty {
col.Default = "'" + col.Default + "'"
col.Default = addSingleQuote(col.Default)
}
}
cols[col.Name] = col
@ -1102,6 +1125,9 @@ func (d *damengDriver) Scan(ctx *ScanContext, rows *core.Rows, types []*sql.Colu
case "CLOB", "TEXT":
scanResult = &dmClobScanner{}
replaced = true
case "TIMESTAMP":
scanResult = &sql.NullString{}
replaced = true
default:
scanResult = v
}
@ -1122,6 +1148,16 @@ func (d *damengDriver) Scan(ctx *ScanContext, rows *core.Rows, types []*sql.Colu
return err
}
default:
switch types[i].DatabaseTypeName() {
case "TIMESTAMP":
ns := t.(*sql.NullString)
if !ns.Valid {
return nil
}
s := ns.String
fields := strings.Split(s, "+")
return convert.Assign(vv[i], strings.Replace(fields[0], "T", " ", -1), ctx.DBLocation, ctx.UserLocation)
}
return fmt.Errorf("don't support convert %T to %T", t, vv[i])
}
}

View File

@ -45,6 +45,7 @@ const (
type DialectFeatures struct {
AutoincrMode int // 0 autoincrement column, 1 sequence
AliasKeyword string
}
// Dialect represents a kind of database

View File

@ -746,6 +746,11 @@ func TestInsertWhere(t *testing.T) {
i.Index = 1
assert.EqualValues(t, i, j)
if testEngine.Dialect().URI().DBType == schemas.DAMENG {
t.SkipNow()
return
}
inserted, err = testEngine.Table(new(InsertWhere)).Where("`repo_id`=?", 1).
SetExpr("`index`", "coalesce(MAX(`index`),0)+1").
Insert(map[string]interface{}{
@ -852,6 +857,11 @@ func TestInsertExpr2(t *testing.T) {
assert.EqualValues(t, 1, ie2.RepoId)
assert.EqualValues(t, true, ie2.IsTag)
if testEngine.Dialect().URI().DBType == schemas.DAMENG {
t.SkipNow()
return
}
inserted, err = testEngine.Table(new(InsertExprsRelease)).
SetExpr("is_draft", true).
SetExpr("num_commits", 0).

View File

@ -73,7 +73,7 @@ func TestCombineTransaction(t *testing.T) {
_, err = session.Where("`id` = ?", 0).Update(&user2)
assert.NoError(t, err)
_, err = session.Exec("delete from "+testEngine.TableName("userinfo", true)+" where `username` = ?", user2.Username)
_, err = session.Exec("delete from `"+testEngine.TableName("userinfo", true)+"` where `username` = ?", user2.Username)
assert.NoError(t, err)
err = session.Commit()

View File

@ -93,7 +93,12 @@ func TestUpdateLimit(t *testing.T) {
assert.NoError(t, err)
assert.EqualValues(t, 1, cnt)
cnt, err = testEngine.OrderBy("name desc").Limit(1).Update(&UpdateTable2{
if testEngine.Dialect().URI().DBType == schemas.DAMENG {
t.SkipNow()
return
}
cnt, err = testEngine.OrderBy("`name` desc").Limit(1).Update(&UpdateTable2{
Age: 30,
})
assert.NoError(t, err)
@ -345,11 +350,11 @@ func TestUpdate1(t *testing.T) {
userID := user.Uid
has, err := testEngine.ID(userID).
And("username = ?", user.Username).
And("height = ?", user.Height).
And("departname = ?", "").
And("detail_id = ?", 0).
And("is_man = ?", false).
And("`username` = ?", user.Username).
And("`height` = ?", user.Height).
And("`departname` = ?", "").
And("`detail_id` = ?", 0).
And("`is_man` = ?", false).
Get(&Userinfo{})
assert.NoError(t, err)
assert.True(t, has, "cannot insert properly")
@ -362,12 +367,12 @@ func TestUpdate1(t *testing.T) {
assert.EqualValues(t, 1, cnt, "update not returned 1")
has, err = testEngine.ID(userID).
And("username = ?", updatedUser.Username).
And("height IS NULL").
And("departname IS NULL").
And("is_man IS NULL").
And("created IS NULL").
And("detail_id = ?", 0).
And("`username` = ?", updatedUser.Username).
And("`height` IS NULL").
And("`departname` IS NULL").
And("`is_man` IS NULL").
And("`created` IS NULL").
And("`detail_id` = ?", 0).
Get(&Userinfo{})
assert.NoError(t, err)
assert.True(t, has, "cannot update with null properly")
@ -1166,7 +1171,7 @@ func TestUpdateExprs(t *testing.T) {
})
assert.NoError(t, err)
_, err = testEngine.SetExpr("num_issues", "num_issues+1").AllCols().Update(&UpdateExprs{
_, err = testEngine.SetExpr("num_issues", "`num_issues`+1").AllCols().Update(&UpdateExprs{
NumIssues: 3,
Name: "lunny xiao",
})
@ -1197,7 +1202,7 @@ func TestUpdateAlias(t *testing.T) {
})
assert.NoError(t, err)
_, err = testEngine.Alias("ua").Where("`ua`.`id` = ?", 1).Update(&UpdateAlias{
_, err = testEngine.Alias("ua").Where("ua.`id` = ?", 1).Update(&UpdateAlias{
NumIssues: 2,
Name: "lunny xiao",
})
@ -1257,6 +1262,11 @@ func TestUpdateExprs2(t *testing.T) {
}
func TestUpdateMap3(t *testing.T) {
if testEngine.Dialect().URI().DBType == schemas.DAMENG {
t.SkipNow()
return
}
assert.NoError(t, PrepareEngine())
type UpdateMapUser struct {

View File

@ -136,7 +136,10 @@ func (engine *Engine) row2mapStr(rows *core.Rows, types []*sql.ColumnType, field
scanResults[i] = &s
}
if err := rows.Scan(scanResults...); err != nil {
if err := engine.driver.Scan(&dialects.ScanContext{
DBLocation: engine.DatabaseTZ,
UserLocation: engine.TZLocation,
}, rows, types, scanResults...); err != nil {
return nil, err
}

View File

@ -278,7 +278,11 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
condBeanIsStruct := false
if len(condiBean) > 0 {
if c, ok := condiBean[0].(map[string]interface{}); ok {
autoCond = builder.Eq(c)
var eq = make(builder.Eq)
for k, v := range c {
eq[session.engine.Quote(k)] = v
}
autoCond = builder.Eq(eq)
} else {
ct := reflect.TypeOf(condiBean[0])
k := ct.Kind()