(t *testing.T)
| 358 | } |
| 359 | |
| 360 | func TestToSQL(t *testing.T) { |
| 361 | // By default DB.DryRun should false |
| 362 | if DB.DryRun { |
| 363 | t.Fatal("Failed expect DB.DryRun to be false") |
| 364 | } |
| 365 | |
| 366 | if DB.Dialector.Name() == "sqlserver" { |
| 367 | t.Skip("Skip SQL Server for this test, because it too difference with other dialects.") |
| 368 | } |
| 369 | |
| 370 | date, _ := time.ParseInLocation("2006-01-02", "2021-10-18", time.Local) |
| 371 | |
| 372 | // find |
| 373 | sql := DB.ToSQL(func(tx *gorm.DB) *gorm.DB { |
| 374 | return tx.Model(&User{}).Where("id = ?", 100).Limit(10).Order("age desc").Find(&[]User{}) |
| 375 | }) |
| 376 | assertEqualSQL(t, `SELECT * FROM "users" WHERE id = 100 AND "users"."deleted_at" IS NULL ORDER BY age desc LIMIT 10`, sql) |
| 377 | |
| 378 | // after model changed |
| 379 | if DB.Statement.DryRun || DB.DryRun { |
| 380 | t.Fatal("Failed expect DB.DryRun and DB.Statement.ToSQL to be false") |
| 381 | } |
| 382 | |
| 383 | if DB.Statement.SQL.String() != "" { |
| 384 | t.Fatal("Failed expect DB.Statement.SQL to be empty") |
| 385 | } |
| 386 | |
| 387 | // first |
| 388 | sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { |
| 389 | return tx.Model(&User{}).Where(&User{Name: "foo", Age: 20}).Limit(10).Offset(5).Order("name ASC").First(&User{}) |
| 390 | }) |
| 391 | assertEqualSQL(t, `SELECT * FROM "users" WHERE ("users"."name" = 'foo' AND "users"."age" = 20) AND "users"."deleted_at" IS NULL ORDER BY name ASC,"users"."id" LIMIT 1 OFFSET 5`, sql) |
| 392 | |
| 393 | // last and unscoped |
| 394 | sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { |
| 395 | return tx.Model(&User{}).Unscoped().Where(&User{Name: "bar", Age: 12}).Limit(10).Offset(5).Order("name ASC").Last(&User{}) |
| 396 | }) |
| 397 | assertEqualSQL(t, `SELECT * FROM "users" WHERE "users"."name" = 'bar' AND "users"."age" = 12 ORDER BY name ASC,"users"."id" DESC LIMIT 1 OFFSET 5`, sql) |
| 398 | |
| 399 | // create |
| 400 | user := &User{Name: "foo", Age: 20} |
| 401 | user.CreatedAt = date |
| 402 | user.UpdatedAt = date |
| 403 | sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { |
| 404 | return tx.Model(&User{}).Create(user) |
| 405 | }) |
| 406 | assertEqualSQL(t, `INSERT INTO "users" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") VALUES ('2021-10-18 00:00:00','2021-10-18 00:00:00',NULL,'foo',20,NULL,NULL,NULL,false) RETURNING "id"`, sql) |
| 407 | |
| 408 | // save |
| 409 | user = &User{Name: "foo", Age: 20} |
| 410 | user.CreatedAt = date |
| 411 | user.UpdatedAt = date |
| 412 | sql = DB.ToSQL(func(tx *gorm.DB) *gorm.DB { |
| 413 | return tx.Model(&User{}).Save(user) |
| 414 | }) |
| 415 | assertEqualSQL(t, `INSERT INTO "users" ("created_at","updated_at","deleted_at","name","age","birthday","company_id","manager_id","active") VALUES ('2021-10-18 00:00:00','2021-10-18 00:00:00',NULL,'foo',20,NULL,NULL,NULL,false) RETURNING "id"`, sql) |
| 416 | |
| 417 | // updates |
nothing calls this directly
no test coverage detected