diff --git a/go.mod b/go.mod index f194634f..bd380bee 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,13 @@ module gorm.io/playground -go 1.22.0 +go 1.23.0 toolchain go1.23.3 require ( gorm.io/driver/mysql v1.5.7 - gorm.io/driver/postgres v1.5.10 - gorm.io/driver/sqlite v1.5.6 + gorm.io/driver/postgres v1.5.11 + gorm.io/driver/sqlite v1.5.7 gorm.io/driver/sqlserver v1.5.4 gorm.io/gen v0.3.26 gorm.io/gorm v1.25.12 @@ -15,25 +15,25 @@ require ( require ( filippo.io/edwards25519 v1.1.0 // indirect - github.com/go-sql-driver/mysql v1.8.1 // indirect + github.com/go-sql-driver/mysql v1.9.0 // indirect github.com/golang-sql/civil v0.0.0-20220223132316-b832511892a9 // indirect github.com/golang-sql/sqlexp v0.1.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect - github.com/jackc/pgx/v5 v5.7.1 // indirect + github.com/jackc/pgx/v5 v5.7.2 // indirect github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/inflection v1.0.0 // indirect github.com/jinzhu/now v1.1.5 // indirect github.com/mattn/go-sqlite3 v1.14.24 // indirect - github.com/microsoft/go-mssqldb v1.7.2 // indirect - golang.org/x/crypto v0.29.0 // indirect - golang.org/x/mod v0.22.0 // indirect - golang.org/x/sync v0.9.0 // indirect - golang.org/x/sys v0.27.0 // indirect - golang.org/x/text v0.20.0 // indirect - golang.org/x/tools v0.27.0 // indirect - gorm.io/datatypes v1.2.4 // indirect + github.com/microsoft/go-mssqldb v1.8.0 // indirect + golang.org/x/crypto v0.36.0 // indirect + golang.org/x/mod v0.24.0 // indirect + golang.org/x/sync v0.12.0 // indirect + golang.org/x/sys v0.31.0 // indirect + golang.org/x/text v0.23.0 // indirect + golang.org/x/tools v0.31.0 // indirect + gorm.io/datatypes v1.2.5 // indirect gorm.io/hints v1.1.2 // indirect gorm.io/plugin/dbresolver v1.5.3 // indirect ) diff --git a/main_test.go b/main_test.go index 60a388f7..872e1d70 100644 --- a/main_test.go +++ b/main_test.go @@ -2,6 +2,8 @@ package main import ( "testing" + + "gorm.io/gorm" ) // GORM_REPO: https://github.com/go-gorm/gorm.git @@ -18,3 +20,49 @@ func TestGORM(t *testing.T) { t.Errorf("Failed, got error: %v", err) } } + +func TestIncorrectRowsAffected(t *testing.T) { + user := User{Name: "jinzhu2", Age: 25, Active: true} + DB.Create(&user) + user = User{Name: "jinzhu3", Age: 25, Active: true} + DB.Create(&user) + user = User{Name: "jinzhu4", Age: 25, Active: true} + DB.Create(&user) + + condition := gorm.Expr("users.age = ? AND active = ?", 25, true) + res := DB.Exec(`UPDATE users SET birthday = '2025-03-07' WHERE ?`, condition) + t.Logf("res.RowsAffected - Expected = 3, Actual = %d", res.RowsAffected) + if res.RowsAffected != 3 { + t.Fail() + } + condition2 := gorm.Expr("users.age = ? AND active = ? AND company_id IS NULL", 25, true) + res2 := DB.Exec(`UPDATE users SET birthday = '2025-03-07' WHERE ?`, condition2) + t.Logf("res.RowsAffected - Expected = 3, Actual = %d", res2.RowsAffected) + if res2.RowsAffected != 3 { + t.Fail() + } + DB.Exec(`DELETE FROM users WHERE age = 25`) +} + +func TestIncorrectRowsAffectedReversed(t *testing.T) { + user := User{Name: "jinzhu2", Age: 25, Active: true} + DB.Create(&user) + user = User{Name: "jinzhu3", Age: 25, Active: true} + DB.Create(&user) + user = User{Name: "jinzhu4", Age: 25, Active: true} + DB.Create(&user) + + condition2 := gorm.Expr("users.age = ? AND active = ? AND company_id IS NULL", 25, true) + res2 := DB.Exec(`UPDATE users SET birthday = '2025-03-07' WHERE ?`, condition2) + t.Logf("res.RowsAffected - Expected = 3, Actual = %d", res2.RowsAffected) + if res2.RowsAffected != 3 { + t.Fail() + } + condition := gorm.Expr("users.age = ? AND active = ?", 25, true) + res := DB.Exec(`UPDATE users SET birthday = '2025-03-07' WHERE ?`, condition) + t.Logf("res.RowsAffected - Expected = 3, Actual = %d", res.RowsAffected) + if res.RowsAffected != 3 { + t.Fail() + } + DB.Exec(`DELETE FROM users WHERE age = 25`) +}