diff --git a/session_delete_test.go b/session_delete_test.go index 93ac6501..7ac60639 100644 --- a/session_delete_test.go +++ b/session_delete_test.go @@ -240,90 +240,91 @@ func TestUnscopeDelete(t *testing.T) { } func TestSoftDeleted(t *testing.T) { - assert.NoError(t, prepareEngine()) - type YySoftDeleted struct { Id int64 `xorm:"pk"` Name string DeletedAt int64 `xorm:"not null default '0' comment('删除状态') deleted "` } - testEngine.SetSoftDeleteHandler(&DefaultSoftDeleteHandler{}) - defer testEngine.SetSoftDeleteHandler(nil) - err := testEngine.DropTables(&YySoftDeleted{}) + testSoftEngine, err := createEngine(dbType, connString) assert.NoError(t, err) - err = testEngine.CreateTables(&YySoftDeleted{}) + testSoftEngine.SetSoftDeleteHandler(&DefaultSoftDeleteHandler{}) + defer testSoftEngine.SetSoftDeleteHandler(nil) + err = testSoftEngine.DropTables(&YySoftDeleted{}) assert.NoError(t, err) - _, err = testEngine.InsertOne(&YySoftDeleted{Id: 1, Name: "4444"}) + err = testSoftEngine.CreateTables(&YySoftDeleted{}) assert.NoError(t, err) - _, err = testEngine.InsertOne(&YySoftDeleted{Id: 2, Name: "5555"}) + _, err = testSoftEngine.InsertOne(&YySoftDeleted{Id: 1, Name: "4444"}) assert.NoError(t, err) - _, err = testEngine.InsertOne(&YySoftDeleted{Id: 3, Name: "6666"}) + _, err = testSoftEngine.InsertOne(&YySoftDeleted{Id: 2, Name: "5555"}) + assert.NoError(t, err) + + _, err = testSoftEngine.InsertOne(&YySoftDeleted{Id: 3, Name: "6666"}) assert.NoError(t, err) // Test normal Find() var records1 []YySoftDeleted - err = testEngine.Where("`"+testEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").Find(&records1, &YySoftDeleted{}) + err = testSoftEngine.Where("`"+testSoftEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").Find(&records1, &YySoftDeleted{}) fmt.Printf("%+v", records1) assert.EqualValues(t, 3, len(records1)) // Test normal Get() record1 := &YySoftDeleted{} - has, err := testEngine.ID(1).Get(record1) + has, err := testSoftEngine.ID(1).Get(record1) assert.NoError(t, err) assert.True(t, has) // Test Delete() with deleted - affected, err := testEngine.ID(1).Delete(&YySoftDeleted{}) + affected, err := testSoftEngine.ID(1).Delete(&YySoftDeleted{}) assert.NoError(t, err) assert.EqualValues(t, 1, affected) - has, err = testEngine.ID(1).Get(&YySoftDeleted{}) + has, err = testSoftEngine.ID(1).Get(&YySoftDeleted{}) assert.NoError(t, err) assert.False(t, has) var records2 []YySoftDeleted - err = testEngine.Where("`" + testEngine.GetColumnMapper().Obj2Table("Id") + "` > 0").Find(&records2) + err = testSoftEngine.Where("`" + testSoftEngine.GetColumnMapper().Obj2Table("Id") + "` > 0").Find(&records2) assert.NoError(t, err) assert.EqualValues(t, 2, len(records2)) // Test no rows affected after Delete() again. - affected, err = testEngine.ID(1).Delete(&YySoftDeleted{}) + affected, err = testSoftEngine.ID(1).Delete(&YySoftDeleted{}) assert.NoError(t, err) assert.EqualValues(t, 0, affected) // Deleted.DeletedAt must not be updated. - affected, err = testEngine.ID(2).Update(&YySoftDeleted{Name: "23", DeletedAt: 1}) + affected, err = testSoftEngine.ID(2).Update(&YySoftDeleted{Name: "23", DeletedAt: 1}) assert.NoError(t, err) assert.EqualValues(t, 1, affected) record2 := &YySoftDeleted{} - has, err = testEngine.ID(2).Get(record2) + has, err = testSoftEngine.ID(2).Get(record2) assert.NoError(t, err) // fmt.Printf("%+v", reco) assert.True(t, record2.DeletedAt == 0) // Test find all records whatever `deleted`. var unscopedRecords1 []YySoftDeleted - err = testEngine.Unscoped().Where("`"+testEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").Find(&unscopedRecords1, &YySoftDeleted{}) + err = testSoftEngine.Unscoped().Where("`"+testSoftEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").Find(&unscopedRecords1, &YySoftDeleted{}) assert.NoError(t, err) assert.EqualValues(t, 3, len(unscopedRecords1)) // Delete() must really delete a record with Unscoped() - affected, err = testEngine.Unscoped().ID(1).Delete(&YySoftDeleted{}) + affected, err = testSoftEngine.Unscoped().ID(1).Delete(&YySoftDeleted{}) assert.NoError(t, err) assert.EqualValues(t, 1, affected) var unscopedRecords2 []YySoftDeleted - err = testEngine.Unscoped().Where("`"+testEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").Find(&unscopedRecords2, &YySoftDeleted{}) + err = testSoftEngine.Unscoped().Where("`"+testSoftEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").Find(&unscopedRecords2, &YySoftDeleted{}) assert.NoError(t, err) assert.EqualValues(t, 2, len(unscopedRecords2)) var records3 []YySoftDeleted - err = testEngine.Where("`"+testEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").And("`"+testEngine.GetColumnMapper().Obj2Table("Id")+"`> 1"). - Or("`"+testEngine.GetColumnMapper().Obj2Table("Id")+"` = ?", 3).Find(&records3) + err = testSoftEngine.Where("`"+testSoftEngine.GetColumnMapper().Obj2Table("Id")+"` > 0").And("`"+testSoftEngine.GetColumnMapper().Obj2Table("Id")+"`> 1"). + Or("`"+testSoftEngine.GetColumnMapper().Obj2Table("Id")+"` = ?", 3).Find(&records3) assert.NoError(t, err) assert.EqualValues(t, 2, len(records3)) diff --git a/xorm_test.go b/xorm_test.go index c0302df3..d2a0adf8 100644 --- a/xorm_test.go +++ b/xorm_test.go @@ -37,41 +37,40 @@ var ( ignoreSelectUpdate = flag.Bool("ignore_select_update", false, "ignore select update if implementation difference, only for tidb") ) -func createEngine(dbType, connStr string) error { - if testEngine == nil { - var err error +func createEngine(dbType, connStr string) (testEngine EngineInterface,err error) { + if testEngine == nil { if !*cluster { switch strings.ToLower(dbType) { case core.MSSQL: db, err := sql.Open(dbType, strings.Replace(connStr, "xorm_test", "master", -1)) if err != nil { - return err + return nil,err } if _, err = db.Exec("If(db_id(N'xorm_test') IS NULL) BEGIN CREATE DATABASE xorm_test; END;"); err != nil { - return fmt.Errorf("db.Exec: %v", err) + return nil,fmt.Errorf("db.Exec: %v", err) } db.Close() *ignoreSelectUpdate = true case core.POSTGRES: db, err := sql.Open(dbType, connStr) if err != nil { - return err + return nil,err } rows, err := db.Query(fmt.Sprintf("SELECT 1 FROM pg_database WHERE datname = 'xorm_test'")) if err != nil { - return fmt.Errorf("db.Query: %v", err) + return nil,fmt.Errorf("db.Query: %v", err) } defer rows.Close() if !rows.Next() { if _, err = db.Exec("CREATE DATABASE xorm_test"); err != nil { - return fmt.Errorf("CREATE DATABASE: %v", err) + return nil,fmt.Errorf("CREATE DATABASE: %v", err) } } if *schema != "" { if _, err = db.Exec("CREATE SCHEMA IF NOT EXISTS " + *schema); err != nil { - return fmt.Errorf("CREATE SCHEMA: %v", err) + return nil,fmt.Errorf("CREATE SCHEMA: %v", err) } } db.Close() @@ -79,10 +78,10 @@ func createEngine(dbType, connStr string) error { case core.MYSQL: db, err := sql.Open(dbType, strings.Replace(connStr, "xorm_test", "mysql", -1)) if err != nil { - return err + return nil,err } if _, err = db.Exec("CREATE DATABASE IF NOT EXISTS xorm_test"); err != nil { - return fmt.Errorf("db.Exec: %v", err) + return nil,fmt.Errorf("db.Exec: %v", err) } db.Close() default: @@ -97,7 +96,7 @@ func createEngine(dbType, connStr string) error { } } if err != nil { - return err + return nil,err } if *schema != "" { @@ -124,20 +123,23 @@ func createEngine(dbType, connStr string) error { tables, err := testEngine.DBMetas() if err != nil { - return err + return nil,err } var tableNames = make([]interface{}, 0, len(tables)) for _, table := range tables { tableNames = append(tableNames, table.Name) } if err = testEngine.DropTables(tableNames...); err != nil { - return err + return nil,err } - return nil + return testEngine,nil } func prepareEngine() error { - return createEngine(dbType, connString) + var err error + testEngine ,err = createEngine(dbType, connString) + + return err } func TestMain(m *testing.M) {