github.com/gogf/gf@v1.16.9/database/gdb/gdb_z_mysql_model_test.go (about) 1 // Copyright GoFrame Author(https://goframe.org). All Rights Reserved. 2 // 3 // This Source Code Form is subject to the terms of the MIT License. 4 // If a copy of the MIT was not distributed with this file, 5 // You can obtain one at https://github.com/gogf/gf. 6 7 package gdb_test 8 9 import ( 10 "context" 11 "database/sql" 12 "fmt" 13 "testing" 14 "time" 15 16 "github.com/gogf/gf/container/garray" 17 "github.com/gogf/gf/container/gmap" 18 "github.com/gogf/gf/debug/gdebug" 19 "github.com/gogf/gf/encoding/gparser" 20 "github.com/gogf/gf/os/gfile" 21 "github.com/gogf/gf/util/gutil" 22 23 "github.com/gogf/gf/database/gdb" 24 25 "github.com/gogf/gf/frame/g" 26 "github.com/gogf/gf/os/gtime" 27 "github.com/gogf/gf/test/gtest" 28 ) 29 30 func Test_Model_Insert(t *testing.T) { 31 table := createTable() 32 defer dropTable(table) 33 gtest.C(t, func(t *gtest.T) { 34 user := db.Model(table) 35 result, err := user.Data(g.Map{ 36 "id": 1, 37 "uid": 1, 38 "passport": "t1", 39 "password": "25d55ad283aa400af464c76d713c07ad", 40 "nickname": "name_1", 41 "create_time": gtime.Now().String(), 42 }).Insert() 43 t.AssertNil(err) 44 n, _ := result.LastInsertId() 45 t.Assert(n, 1) 46 47 result, err = db.Model(table).Data(g.Map{ 48 "id": "2", 49 "uid": "2", 50 "passport": "t2", 51 "password": "25d55ad283aa400af464c76d713c07ad", 52 "nickname": "name_2", 53 "create_time": gtime.Now().String(), 54 }).Insert() 55 t.AssertNil(err) 56 n, _ = result.RowsAffected() 57 t.Assert(n, 1) 58 59 type User struct { 60 Id int `gconv:"id"` 61 Uid int `gconv:"uid"` 62 Passport string `json:"passport"` 63 Password string `gconv:"password"` 64 Nickname string `gconv:"nickname"` 65 CreateTime *gtime.Time `json:"create_time"` 66 } 67 // Model inserting. 68 result, err = db.Model(table).Data(User{ 69 Id: 3, 70 Uid: 3, 71 Passport: "t3", 72 Password: "25d55ad283aa400af464c76d713c07ad", 73 Nickname: "name_3", 74 }).Insert() 75 t.AssertNil(err) 76 n, _ = result.RowsAffected() 77 t.Assert(n, 1) 78 value, err := db.Model(table).Fields("passport").Where("id=3").Value() 79 t.AssertNil(err) 80 t.Assert(value.String(), "t3") 81 82 result, err = db.Model(table).Data(&User{ 83 Id: 4, 84 Uid: 4, 85 Passport: "t4", 86 Password: "25d55ad283aa400af464c76d713c07ad", 87 Nickname: "T4", 88 CreateTime: gtime.Now(), 89 }).Insert() 90 t.AssertNil(err) 91 n, _ = result.RowsAffected() 92 t.Assert(n, 1) 93 value, err = db.Model(table).Fields("passport").Where("id=4").Value() 94 t.AssertNil(err) 95 t.Assert(value.String(), "t4") 96 97 result, err = db.Model(table).Where("id>?", 1).Delete() 98 t.AssertNil(err) 99 n, _ = result.RowsAffected() 100 t.Assert(n, 3) 101 }) 102 } 103 104 // Fix issue: https://github.com/gogf/gf/issues/819 105 func Test_Model_Insert_WithStructAndSliceAttribute(t *testing.T) { 106 table := createTable() 107 defer dropTable(table) 108 gtest.C(t, func(t *gtest.T) { 109 type Password struct { 110 Salt string `json:"salt"` 111 Pass string `json:"pass"` 112 } 113 data := g.Map{ 114 "id": 1, 115 "passport": "t1", 116 "password": &Password{"123", "456"}, 117 "nickname": []string{"A", "B", "C"}, 118 "create_time": gtime.Now().String(), 119 } 120 _, err := db.Model(table).Data(data).Insert() 121 t.AssertNil(err) 122 123 one, err := db.Model(table).One("id", 1) 124 t.AssertNil(err) 125 t.Assert(one["passport"], data["passport"]) 126 t.Assert(one["create_time"], data["create_time"]) 127 t.Assert(one["nickname"], gparser.MustToJson(data["nickname"])) 128 }) 129 } 130 131 func Test_Model_Insert_KeyFieldNameMapping(t *testing.T) { 132 table := createTable() 133 defer dropTable(table) 134 135 gtest.C(t, func(t *gtest.T) { 136 type User struct { 137 Id int 138 Passport string 139 Password string 140 Nickname string 141 CreateTime string 142 } 143 data := User{ 144 Id: 1, 145 Passport: "user_1", 146 Password: "pass_1", 147 Nickname: "name_1", 148 CreateTime: "2020-10-10 12:00:01", 149 } 150 _, err := db.Model(table).Data(data).Insert() 151 t.AssertNil(err) 152 153 one, err := db.Model(table).FindOne(1) 154 t.AssertNil(err) 155 t.Assert(one["passport"], data.Passport) 156 t.Assert(one["create_time"], data.CreateTime) 157 t.Assert(one["nickname"], data.Nickname) 158 }) 159 } 160 161 func Test_Model_Update_KeyFieldNameMapping(t *testing.T) { 162 table := createInitTable() 163 defer dropTable(table) 164 165 gtest.C(t, func(t *gtest.T) { 166 type User struct { 167 Id int 168 Passport string 169 Password string 170 Nickname string 171 CreateTime string 172 } 173 data := User{ 174 Id: 1, 175 Passport: "user_10", 176 Password: "pass_10", 177 Nickname: "name_10", 178 CreateTime: "2020-10-10 12:00:01", 179 } 180 _, err := db.Model(table).Data(data).WherePri(1).Update() 181 t.AssertNil(err) 182 183 one, err := db.Model(table).FindOne(1) 184 t.AssertNil(err) 185 t.Assert(one["passport"], data.Passport) 186 t.Assert(one["create_time"], data.CreateTime) 187 t.Assert(one["nickname"], data.Nickname) 188 }) 189 } 190 191 func Test_Model_Insert_Time(t *testing.T) { 192 table := createTable() 193 defer dropTable(table) 194 gtest.C(t, func(t *gtest.T) { 195 data := g.Map{ 196 "id": 1, 197 "passport": "t1", 198 "password": "p1", 199 "nickname": "n1", 200 "create_time": "2020-10-10 20:09:18.334", 201 } 202 _, err := db.Model(table).Data(data).Insert() 203 t.AssertNil(err) 204 205 one, err := db.Model(table).One("id", 1) 206 t.AssertNil(err) 207 t.Assert(one["passport"], data["passport"]) 208 t.Assert(one["create_time"], "2020-10-10 20:09:18") 209 t.Assert(one["nickname"], data["nickname"]) 210 }) 211 } 212 213 func Test_Model_BatchInsertWithArrayStruct(t *testing.T) { 214 table := createTable() 215 defer dropTable(table) 216 gtest.C(t, func(t *gtest.T) { 217 user := db.Model(table) 218 array := garray.New() 219 for i := 1; i <= TableSize; i++ { 220 array.Append(g.Map{ 221 "id": i, 222 "uid": i, 223 "passport": fmt.Sprintf("t%d", i), 224 "password": "25d55ad283aa400af464c76d713c07ad", 225 "nickname": fmt.Sprintf("name_%d", i), 226 "create_time": gtime.Now().String(), 227 }) 228 } 229 230 result, err := user.Data(array).Insert() 231 t.AssertNil(err) 232 n, _ := result.LastInsertId() 233 t.Assert(n, TableSize) 234 }) 235 } 236 237 func Test_Model_InsertIgnore(t *testing.T) { 238 table := createInitTable() 239 defer dropTable(table) 240 gtest.C(t, func(t *gtest.T) { 241 _, err := db.Model(table).Data(g.Map{ 242 "id": 1, 243 "uid": 1, 244 "passport": "t1", 245 "password": "25d55ad283aa400af464c76d713c07ad", 246 "nickname": "name_1", 247 "create_time": gtime.Now().String(), 248 }).Insert() 249 t.AssertNE(err, nil) 250 }) 251 gtest.C(t, func(t *gtest.T) { 252 _, err := db.Model(table).Data(g.Map{ 253 "id": 1, 254 "uid": 1, 255 "passport": "t1", 256 "password": "25d55ad283aa400af464c76d713c07ad", 257 "nickname": "name_1", 258 "create_time": gtime.Now().String(), 259 }).InsertIgnore() 260 t.AssertNil(err) 261 }) 262 } 263 264 func Test_Model_Batch(t *testing.T) { 265 // batch insert 266 gtest.C(t, func(t *gtest.T) { 267 table := createTable() 268 defer dropTable(table) 269 result, err := db.Model(table).Data(g.List{ 270 { 271 "id": 2, 272 "uid": 2, 273 "passport": "t2", 274 "password": "25d55ad283aa400af464c76d713c07ad", 275 "nickname": "name_2", 276 "create_time": gtime.Now().String(), 277 }, 278 { 279 "id": 3, 280 "uid": 3, 281 "passport": "t3", 282 "password": "25d55ad283aa400af464c76d713c07ad", 283 "nickname": "name_3", 284 "create_time": gtime.Now().String(), 285 }, 286 }).Batch(1).Insert() 287 if err != nil { 288 gtest.Error(err) 289 } 290 n, _ := result.RowsAffected() 291 t.Assert(n, 2) 292 }) 293 294 // batch insert, retrieving last insert auto-increment id. 295 gtest.C(t, func(t *gtest.T) { 296 table := createTable() 297 defer dropTable(table) 298 result, err := db.Model(table).Data(g.List{ 299 {"passport": "t1"}, 300 {"passport": "t2"}, 301 {"passport": "t3"}, 302 {"passport": "t4"}, 303 {"passport": "t5"}, 304 }).Batch(2).Insert() 305 if err != nil { 306 gtest.Error(err) 307 } 308 n, _ := result.RowsAffected() 309 t.Assert(n, 5) 310 }) 311 312 // batch save 313 gtest.C(t, func(t *gtest.T) { 314 table := createInitTable() 315 defer dropTable(table) 316 result, err := db.Model(table).All() 317 t.AssertNil(err) 318 t.Assert(len(result), TableSize) 319 for _, v := range result { 320 v["nickname"].Set(v["nickname"].String() + v["id"].String()) 321 } 322 r, e := db.Model(table).Data(result).Save() 323 t.Assert(e, nil) 324 n, e := r.RowsAffected() 325 t.Assert(e, nil) 326 t.Assert(n, TableSize*2) 327 }) 328 329 // batch replace 330 gtest.C(t, func(t *gtest.T) { 331 table := createInitTable() 332 defer dropTable(table) 333 result, err := db.Model(table).All() 334 t.AssertNil(err) 335 t.Assert(len(result), TableSize) 336 for _, v := range result { 337 v["nickname"].Set(v["nickname"].String() + v["id"].String()) 338 } 339 r, e := db.Model(table).Data(result).Replace() 340 t.Assert(e, nil) 341 n, e := r.RowsAffected() 342 t.Assert(e, nil) 343 t.Assert(n, TableSize*2) 344 }) 345 } 346 347 func Test_Model_Replace(t *testing.T) { 348 table := createTable() 349 defer dropTable(table) 350 351 gtest.C(t, func(t *gtest.T) { 352 result, err := db.Model(table).Data(g.Map{ 353 "id": 1, 354 "passport": "t11", 355 "password": "25d55ad283aa400af464c76d713c07ad", 356 "nickname": "T11", 357 "create_time": "2018-10-24 10:00:00", 358 }).Replace() 359 t.AssertNil(err) 360 n, _ := result.RowsAffected() 361 t.Assert(n, 1) 362 }) 363 } 364 365 func Test_Model_Save(t *testing.T) { 366 table := createTable() 367 defer dropTable(table) 368 gtest.C(t, func(t *gtest.T) { 369 result, err := db.Model(table).Data(g.Map{ 370 "id": 1, 371 "passport": "t111", 372 "password": "25d55ad283aa400af464c76d713c07ad", 373 "nickname": "T111", 374 "create_time": "2018-10-24 10:00:00", 375 }).Save() 376 t.AssertNil(err) 377 n, _ := result.RowsAffected() 378 t.Assert(n, 1) 379 }) 380 } 381 382 func Test_Model_Update(t *testing.T) { 383 table := createInitTable() 384 defer dropTable(table) 385 // UPDATE...LIMIT 386 gtest.C(t, func(t *gtest.T) { 387 result, err := db.Model(table).Data("nickname", "T100").Where(1).Order("id desc").Limit(2).Update() 388 t.AssertNil(err) 389 n, _ := result.RowsAffected() 390 t.Assert(n, 2) 391 392 v1, err := db.Model(table).Fields("nickname").Where("id", 10).Value() 393 t.AssertNil(err) 394 t.Assert(v1.String(), "T100") 395 396 v2, err := db.Model(table).Fields("nickname").Where("id", 8).Value() 397 t.AssertNil(err) 398 t.Assert(v2.String(), "name_8") 399 }) 400 401 gtest.C(t, func(t *gtest.T) { 402 result, err := db.Model(table).Data("passport", "user_22").Where("passport=?", "user_2").Update() 403 t.AssertNil(err) 404 n, _ := result.RowsAffected() 405 t.Assert(n, 1) 406 }) 407 408 gtest.C(t, func(t *gtest.T) { 409 result, err := db.Model(table).Data("passport", "user_2").Where("passport='user_22'").Update() 410 t.AssertNil(err) 411 n, _ := result.RowsAffected() 412 t.Assert(n, 1) 413 }) 414 415 // Update + Data(string) 416 gtest.C(t, func(t *gtest.T) { 417 result, err := db.Model(table).Data("passport='user_33'").Where("passport='user_3'").Update() 418 t.AssertNil(err) 419 n, _ := result.RowsAffected() 420 t.Assert(n, 1) 421 }) 422 // Update + Fields(string) 423 gtest.C(t, func(t *gtest.T) { 424 result, err := db.Model(table).Fields("passport").Data(g.Map{ 425 "passport": "user_44", 426 "none": "none", 427 }).Where("passport='user_4'").Update() 428 t.AssertNil(err) 429 n, _ := result.RowsAffected() 430 t.Assert(n, 1) 431 }) 432 } 433 434 func Test_Model_Clone(t *testing.T) { 435 table := createInitTable() 436 defer dropTable(table) 437 438 gtest.C(t, func(t *gtest.T) { 439 md := db.Model(table).Where("id IN(?)", g.Slice{1, 3}) 440 count, err := md.Count() 441 t.AssertNil(err) 442 443 record, err := md.Order("id DESC").One() 444 t.AssertNil(err) 445 446 result, err := md.Order("id ASC").All() 447 t.AssertNil(err) 448 449 t.Assert(count, 2) 450 t.Assert(record["id"].Int(), 3) 451 t.Assert(len(result), 2) 452 t.Assert(result[0]["id"].Int(), 1) 453 t.Assert(result[1]["id"].Int(), 3) 454 }) 455 } 456 457 func Test_Model_Safe(t *testing.T) { 458 table := createInitTable() 459 defer dropTable(table) 460 461 gtest.C(t, func(t *gtest.T) { 462 md := db.Model(table).Safe(false).Where("id IN(?)", g.Slice{1, 3}) 463 count, err := md.Count() 464 t.AssertNil(err) 465 t.Assert(count, 2) 466 467 md.And("id = ?", 1) 468 count, err = md.Count() 469 t.AssertNil(err) 470 t.Assert(count, 1) 471 }) 472 gtest.C(t, func(t *gtest.T) { 473 md := db.Model(table).Safe(true).Where("id IN(?)", g.Slice{1, 3}) 474 count, err := md.Count() 475 t.AssertNil(err) 476 t.Assert(count, 2) 477 478 md.And("id = ?", 1) 479 count, err = md.Count() 480 t.AssertNil(err) 481 t.Assert(count, 2) 482 }) 483 484 gtest.C(t, func(t *gtest.T) { 485 md := db.Model(table).Safe().Where("id IN(?)", g.Slice{1, 3}) 486 count, err := md.Count() 487 t.AssertNil(err) 488 t.Assert(count, 2) 489 490 md.And("id = ?", 1) 491 count, err = md.Count() 492 t.AssertNil(err) 493 t.Assert(count, 2) 494 }) 495 gtest.C(t, func(t *gtest.T) { 496 md1 := db.Model(table).Safe() 497 md2 := md1.Where("id in (?)", g.Slice{1, 3}) 498 count, err := md2.Count() 499 t.AssertNil(err) 500 t.Assert(count, 2) 501 502 all, err := md2.All() 503 t.AssertNil(err) 504 t.Assert(len(all), 2) 505 506 all, err = md2.Page(1, 10).All() 507 t.AssertNil(err) 508 t.Assert(len(all), 2) 509 }) 510 511 gtest.C(t, func(t *gtest.T) { 512 table := createInitTable() 513 defer dropTable(table) 514 515 md1 := db.Model(table).Where("id>", 0).Safe() 516 md2 := md1.Where("id in (?)", g.Slice{1, 3}) 517 md3 := md1.Where("id in (?)", g.Slice{4, 5, 6}) 518 519 // 1,3 520 count, err := md2.Count() 521 t.AssertNil(err) 522 t.Assert(count, 2) 523 524 all, err := md2.Order("id asc").All() 525 t.AssertNil(err) 526 t.Assert(len(all), 2) 527 t.Assert(all[0]["id"].Int(), 1) 528 t.Assert(all[1]["id"].Int(), 3) 529 530 all, err = md2.Page(1, 10).All() 531 t.AssertNil(err) 532 t.Assert(len(all), 2) 533 534 // 4,5,6 535 count, err = md3.Count() 536 t.AssertNil(err) 537 t.Assert(count, 3) 538 539 all, err = md3.Order("id asc").All() 540 t.AssertNil(err) 541 t.Assert(len(all), 3) 542 t.Assert(all[0]["id"].Int(), 4) 543 t.Assert(all[1]["id"].Int(), 5) 544 t.Assert(all[2]["id"].Int(), 6) 545 546 all, err = md3.Page(1, 10).All() 547 t.AssertNil(err) 548 t.Assert(len(all), 3) 549 }) 550 } 551 552 func Test_Model_All(t *testing.T) { 553 table := createInitTable() 554 defer dropTable(table) 555 556 gtest.C(t, func(t *gtest.T) { 557 result, err := db.Model(table).All() 558 t.AssertNil(err) 559 t.Assert(len(result), TableSize) 560 }) 561 gtest.C(t, func(t *gtest.T) { 562 result, err := db.Model(table).Where("id<0").All() 563 t.Assert(result, nil) 564 t.AssertNil(err) 565 }) 566 } 567 568 func Test_Model_Fields(t *testing.T) { 569 tableName1 := createInitTable() 570 defer dropTable(tableName1) 571 572 tableName2 := "user_" + gtime.Now().TimestampNanoStr() 573 if _, err := db.Exec(fmt.Sprintf(` 574 CREATE TABLE %s ( 575 id int(10) unsigned NOT NULL AUTO_INCREMENT, 576 name varchar(45) NULL, 577 age int(10) unsigned, 578 PRIMARY KEY (id) 579 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 580 `, tableName2, 581 )); err != nil { 582 gtest.AssertNil(err) 583 } 584 defer dropTable(tableName2) 585 586 r, err := db.Insert(tableName2, g.Map{ 587 "id": 1, 588 "name": "table2_1", 589 "age": 18, 590 }) 591 gtest.AssertNil(err) 592 n, _ := r.RowsAffected() 593 gtest.Assert(n, 1) 594 595 gtest.C(t, func(t *gtest.T) { 596 all, err := db.Model(tableName1).As("u").Fields("u.passport,u.id").Where("u.id<2").All() 597 t.AssertNil(err) 598 t.Assert(len(all), 1) 599 t.Assert(len(all[0]), 2) 600 }) 601 gtest.C(t, func(t *gtest.T) { 602 all, err := db.Model(tableName1).As("u1"). 603 LeftJoin(tableName1, "u2", "u2.id=u1.id"). 604 Fields("u1.passport,u1.id,u2.id AS u2id"). 605 Where("u1.id<2"). 606 All() 607 t.AssertNil(err) 608 t.Assert(len(all), 1) 609 t.Assert(len(all[0]), 3) 610 }) 611 gtest.C(t, func(t *gtest.T) { 612 all, err := db.Model(tableName1).As("u1"). 613 LeftJoin(tableName2, "u2", "u2.id=u1.id"). 614 Fields("u1.passport,u1.id,u2.name,u2.age"). 615 Where("u1.id<2"). 616 All() 617 t.AssertNil(err) 618 t.Assert(len(all), 1) 619 t.Assert(len(all[0]), 4) 620 t.Assert(all[0]["id"], 1) 621 t.Assert(all[0]["age"], 18) 622 t.Assert(all[0]["name"], "table2_1") 623 t.Assert(all[0]["passport"], "user_1") 624 }) 625 } 626 627 func Test_Model_FindAll(t *testing.T) { 628 table := createInitTable() 629 defer dropTable(table) 630 631 gtest.C(t, func(t *gtest.T) { 632 result, err := db.Model(table).FindAll(5) 633 t.AssertNil(err) 634 t.Assert(len(result), 1) 635 t.Assert(result[0]["id"].Int(), 5) 636 }) 637 638 gtest.C(t, func(t *gtest.T) { 639 result, err := db.Model(table).Order("id asc").FindAll("id", 8) 640 t.AssertNil(err) 641 t.Assert(len(result), 1) 642 t.Assert(result[0]["id"].Int(), 8) 643 }) 644 645 gtest.C(t, func(t *gtest.T) { 646 result, err := db.Model(table).Order("id asc").FindAll(g.Slice{3, 9}) 647 t.AssertNil(err) 648 t.Assert(len(result), 2) 649 t.Assert(result[0]["id"].Int(), 3) 650 t.Assert(result[1]["id"].Int(), 9) 651 }) 652 653 gtest.C(t, func(t *gtest.T) { 654 result, err := db.Model(table).FindAll() 655 t.AssertNil(err) 656 t.Assert(len(result), TableSize) 657 }) 658 gtest.C(t, func(t *gtest.T) { 659 result, err := db.Model(table).Where("id<0").FindAll() 660 t.Assert(result, nil) 661 t.AssertNil(err) 662 }) 663 } 664 665 func Test_Model_FindAll_GTime(t *testing.T) { 666 table := createInitTable() 667 defer dropTable(table) 668 669 gtest.C(t, func(t *gtest.T) { 670 result, err := db.Model(table).FindAll("create_time < ?", gtime.NewFromStr("2000-01-01 00:00:00")) 671 t.AssertNil(err) 672 t.Assert(len(result), 0) 673 }) 674 gtest.C(t, func(t *gtest.T) { 675 result, err := db.Model(table).FindAll("create_time > ?", gtime.NewFromStr("2000-01-01 00:00:00")) 676 t.AssertNil(err) 677 t.Assert(len(result), TableSize) 678 }) 679 680 gtest.C(t, func(t *gtest.T) { 681 v := g.NewVar("2000-01-01 00:00:00") 682 result, err := db.Model(table).FindAll("create_time < ?", v) 683 t.AssertNil(err) 684 t.Assert(len(result), 0) 685 }) 686 687 gtest.C(t, func(t *gtest.T) { 688 v := g.NewVar("2000-01-01 00:00:00") 689 result, err := db.Model(table).FindAll("create_time > ?", v) 690 t.AssertNil(err) 691 t.Assert(len(result), TableSize) 692 }) 693 } 694 695 func Test_Model_One(t *testing.T) { 696 table := createInitTable() 697 defer dropTable(table) 698 gtest.C(t, func(t *gtest.T) { 699 record, err := db.Model(table).Where("id", 1).One() 700 t.AssertNil(err) 701 t.Assert(record["nickname"].String(), "name_1") 702 }) 703 704 gtest.C(t, func(t *gtest.T) { 705 record, err := db.Model(table).Where("id", 0).One() 706 t.AssertNil(err) 707 t.Assert(record, nil) 708 }) 709 } 710 711 func Test_Model_FindOne(t *testing.T) { 712 table := createInitTable() 713 defer dropTable(table) 714 715 gtest.C(t, func(t *gtest.T) { 716 record, err := db.Model(table).FindOne(1) 717 t.AssertNil(err) 718 t.Assert(record["nickname"].String(), "name_1") 719 }) 720 721 gtest.C(t, func(t *gtest.T) { 722 record, err := db.Model(table).FindOne(3) 723 t.AssertNil(err) 724 t.Assert(record["nickname"].String(), "name_3") 725 }) 726 727 gtest.C(t, func(t *gtest.T) { 728 record, err := db.Model(table).Where("id", 1).FindOne() 729 t.AssertNil(err) 730 t.Assert(record["nickname"].String(), "name_1") 731 }) 732 733 gtest.C(t, func(t *gtest.T) { 734 record, err := db.Model(table).FindOne("id", 9) 735 t.AssertNil(err) 736 t.Assert(record["nickname"].String(), "name_9") 737 }) 738 739 gtest.C(t, func(t *gtest.T) { 740 record, err := db.Model(table).Where("id", 0).FindOne() 741 t.AssertNil(err) 742 t.Assert(record, nil) 743 }) 744 } 745 746 func Test_Model_Value(t *testing.T) { 747 table := createInitTable() 748 defer dropTable(table) 749 750 gtest.C(t, func(t *gtest.T) { 751 value, err := db.Model(table).Fields("nickname").Where("id", 1).Value() 752 t.AssertNil(err) 753 t.Assert(value.String(), "name_1") 754 }) 755 756 gtest.C(t, func(t *gtest.T) { 757 value, err := db.Model(table).Fields("nickname").Where("id", 0).Value() 758 t.AssertNil(err) 759 t.Assert(value, nil) 760 }) 761 } 762 763 func Test_Model_Array(t *testing.T) { 764 table := createInitTable() 765 defer dropTable(table) 766 767 gtest.C(t, func(t *gtest.T) { 768 all, err := db.Model(table).Where("id", g.Slice{1, 2, 3}).All() 769 t.AssertNil(err) 770 t.Assert(all.Array("id"), g.Slice{1, 2, 3}) 771 t.Assert(all.Array("nickname"), g.Slice{"name_1", "name_2", "name_3"}) 772 }) 773 gtest.C(t, func(t *gtest.T) { 774 array, err := db.Model(table).Fields("nickname").Where("id", g.Slice{1, 2, 3}).Array() 775 t.AssertNil(err) 776 t.Assert(array, g.Slice{"name_1", "name_2", "name_3"}) 777 }) 778 gtest.C(t, func(t *gtest.T) { 779 array, err := db.Model(table).Array("nickname", "id", g.Slice{1, 2, 3}) 780 t.AssertNil(err) 781 t.Assert(array, g.Slice{"name_1", "name_2", "name_3"}) 782 }) 783 gtest.C(t, func(t *gtest.T) { 784 array, err := db.Model(table).FindArray("nickname", "id", g.Slice{1, 2, 3}) 785 t.AssertNil(err) 786 t.Assert(array, g.Slice{"name_1", "name_2", "name_3"}) 787 }) 788 gtest.C(t, func(t *gtest.T) { 789 array, err := db.Model(table).FindArray("nickname", g.Slice{1, 2, 3}) 790 t.AssertNil(err) 791 t.Assert(array, g.Slice{"name_1", "name_2", "name_3"}) 792 }) 793 } 794 795 func Test_Model_FindValue(t *testing.T) { 796 table := createInitTable() 797 defer dropTable(table) 798 799 gtest.C(t, func(t *gtest.T) { 800 value, err := db.Model(table).FindValue("nickname", 1) 801 t.AssertNil(err) 802 t.Assert(value.String(), "name_1") 803 }) 804 805 gtest.C(t, func(t *gtest.T) { 806 value, err := db.Model(table).Order("id desc").FindValue("nickname") 807 t.AssertNil(err) 808 t.Assert(value.String(), "name_10") 809 }) 810 811 gtest.C(t, func(t *gtest.T) { 812 value, err := db.Model(table).Fields("nickname").Where("id", 1).FindValue() 813 t.AssertNil(err) 814 t.Assert(value.String(), "name_1") 815 }) 816 817 gtest.C(t, func(t *gtest.T) { 818 value, err := db.Model(table).Fields("nickname").Where("id", 0).FindValue() 819 t.AssertNil(err) 820 t.Assert(value, nil) 821 }) 822 } 823 824 func Test_Model_Count(t *testing.T) { 825 table := createInitTable() 826 defer dropTable(table) 827 gtest.C(t, func(t *gtest.T) { 828 count, err := db.Model(table).Count() 829 t.AssertNil(err) 830 t.Assert(count, TableSize) 831 }) 832 gtest.C(t, func(t *gtest.T) { 833 count, err := db.Model(table).FieldsEx("id").Where("id>8").Count() 834 t.AssertNil(err) 835 t.Assert(count, 2) 836 }) 837 gtest.C(t, func(t *gtest.T) { 838 count, err := db.Model(table).Fields("distinct id,nickname").Where("id>8").Count() 839 t.AssertNil(err) 840 t.Assert(count, 2) 841 }) 842 // COUNT...LIMIT... 843 gtest.C(t, func(t *gtest.T) { 844 count, err := db.Model(table).Page(1, 2).Count() 845 t.AssertNil(err) 846 t.Assert(count, TableSize) 847 }) 848 //gtest.C(t, func(t *gtest.T) { 849 // count, err := db.Model(table).Fields("id myid").Where("id>8").Count() 850 // t.AssertNil(err) 851 // t.Assert(count, 2) 852 //}) 853 //gtest.C(t, func(t *gtest.T) { 854 // count, err := db.Model(table).As("u1").LeftJoin(table, "u2", "u2.id=u1.id").Fields("u2.id u2id").Where("u1.id>8").Count() 855 // t.AssertNil(err) 856 // t.Assert(count, 2) 857 //}) 858 } 859 860 func Test_Model_FindCount(t *testing.T) { 861 table := createInitTable() 862 defer dropTable(table) 863 gtest.C(t, func(t *gtest.T) { 864 count, err := db.Model(table).FindCount(g.Slice{1, 3}) 865 t.AssertNil(err) 866 t.Assert(count, 2) 867 }) 868 gtest.C(t, func(t *gtest.T) { 869 count, err := db.Model(table).FindCount(g.Slice{1, 300000}) 870 t.AssertNil(err) 871 t.Assert(count, 1) 872 }) 873 gtest.C(t, func(t *gtest.T) { 874 count, err := db.Model(table).FindCount() 875 t.AssertNil(err) 876 t.Assert(count, TableSize) 877 }) 878 } 879 880 func Test_Model_Select(t *testing.T) { 881 table := createInitTable() 882 defer dropTable(table) 883 gtest.C(t, func(t *gtest.T) { 884 result, err := db.Model(table).Select() 885 t.AssertNil(err) 886 t.Assert(len(result), TableSize) 887 }) 888 } 889 890 func Test_Model_Struct(t *testing.T) { 891 table := createInitTable() 892 defer dropTable(table) 893 gtest.C(t, func(t *gtest.T) { 894 type User struct { 895 Id int 896 Passport string 897 Password string 898 NickName string 899 CreateTime gtime.Time 900 } 901 user := new(User) 902 err := db.Model(table).Where("id=1").Scan(user) 903 t.AssertNil(err) 904 t.Assert(user.NickName, "name_1") 905 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 906 }) 907 gtest.C(t, func(t *gtest.T) { 908 type User struct { 909 Id int 910 Passport string 911 Password string 912 NickName string 913 CreateTime *gtime.Time 914 } 915 user := new(User) 916 err := db.Model(table).Where("id=1").Scan(user) 917 t.AssertNil(err) 918 t.Assert(user.NickName, "name_1") 919 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 920 }) 921 // Auto creating struct object. 922 gtest.C(t, func(t *gtest.T) { 923 type User struct { 924 Id int 925 Passport string 926 Password string 927 NickName string 928 CreateTime *gtime.Time 929 } 930 user := (*User)(nil) 931 err := db.Model(table).Where("id=1").Scan(&user) 932 t.AssertNil(err) 933 t.Assert(user.NickName, "name_1") 934 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 935 }) 936 // Just using Scan. 937 gtest.C(t, func(t *gtest.T) { 938 type User struct { 939 Id int 940 Passport string 941 Password string 942 NickName string 943 CreateTime *gtime.Time 944 } 945 user := (*User)(nil) 946 err := db.Model(table).Where("id=1").Scan(&user) 947 if err != nil { 948 gtest.Error(err) 949 } 950 t.Assert(user.NickName, "name_1") 951 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 952 }) 953 // sql.ErrNoRows 954 gtest.C(t, func(t *gtest.T) { 955 type User struct { 956 Id int 957 Passport string 958 Password string 959 NickName string 960 CreateTime *gtime.Time 961 } 962 user := new(User) 963 err := db.Model(table).Where("id=-1").Scan(user) 964 t.Assert(err, sql.ErrNoRows) 965 }) 966 gtest.C(t, func(t *gtest.T) { 967 type User struct { 968 Id int 969 Passport string 970 Password string 971 NickName string 972 CreateTime *gtime.Time 973 } 974 var user *User 975 err := db.Model(table).Where("id=-1").Scan(&user) 976 t.AssertNil(err) 977 }) 978 } 979 980 func Test_Model_Struct_CustomType(t *testing.T) { 981 table := createInitTable() 982 defer dropTable(table) 983 984 type MyInt int 985 986 gtest.C(t, func(t *gtest.T) { 987 type User struct { 988 Id MyInt 989 Passport string 990 Password string 991 NickName string 992 CreateTime gtime.Time 993 } 994 user := new(User) 995 err := db.Model(table).Where("id=1").Scan(user) 996 t.AssertNil(err) 997 t.Assert(user.NickName, "name_1") 998 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 999 }) 1000 } 1001 1002 func Test_Model_Structs(t *testing.T) { 1003 table := createInitTable() 1004 defer dropTable(table) 1005 1006 gtest.C(t, func(t *gtest.T) { 1007 type User struct { 1008 Id int 1009 Passport string 1010 Password string 1011 NickName string 1012 CreateTime gtime.Time 1013 } 1014 var users []User 1015 err := db.Model(table).Order("id asc").Scan(&users) 1016 if err != nil { 1017 gtest.Error(err) 1018 } 1019 t.Assert(len(users), TableSize) 1020 t.Assert(users[0].Id, 1) 1021 t.Assert(users[1].Id, 2) 1022 t.Assert(users[2].Id, 3) 1023 t.Assert(users[0].NickName, "name_1") 1024 t.Assert(users[1].NickName, "name_2") 1025 t.Assert(users[2].NickName, "name_3") 1026 t.Assert(users[0].CreateTime.String(), "2018-10-24 10:00:00") 1027 }) 1028 // Auto create struct slice. 1029 gtest.C(t, func(t *gtest.T) { 1030 type User struct { 1031 Id int 1032 Passport string 1033 Password string 1034 NickName string 1035 CreateTime *gtime.Time 1036 } 1037 var users []*User 1038 err := db.Model(table).Order("id asc").Scan(&users) 1039 if err != nil { 1040 gtest.Error(err) 1041 } 1042 t.Assert(len(users), TableSize) 1043 t.Assert(users[0].Id, 1) 1044 t.Assert(users[1].Id, 2) 1045 t.Assert(users[2].Id, 3) 1046 t.Assert(users[0].NickName, "name_1") 1047 t.Assert(users[1].NickName, "name_2") 1048 t.Assert(users[2].NickName, "name_3") 1049 t.Assert(users[0].CreateTime.String(), "2018-10-24 10:00:00") 1050 }) 1051 // Just using Scan. 1052 gtest.C(t, func(t *gtest.T) { 1053 type User struct { 1054 Id int 1055 Passport string 1056 Password string 1057 NickName string 1058 CreateTime *gtime.Time 1059 } 1060 var users []*User 1061 err := db.Model(table).Order("id asc").Scan(&users) 1062 if err != nil { 1063 gtest.Error(err) 1064 } 1065 t.Assert(len(users), TableSize) 1066 t.Assert(users[0].Id, 1) 1067 t.Assert(users[1].Id, 2) 1068 t.Assert(users[2].Id, 3) 1069 t.Assert(users[0].NickName, "name_1") 1070 t.Assert(users[1].NickName, "name_2") 1071 t.Assert(users[2].NickName, "name_3") 1072 t.Assert(users[0].CreateTime.String(), "2018-10-24 10:00:00") 1073 }) 1074 // sql.ErrNoRows 1075 gtest.C(t, func(t *gtest.T) { 1076 type User struct { 1077 Id int 1078 Passport string 1079 Password string 1080 NickName string 1081 CreateTime *gtime.Time 1082 } 1083 var users []*User 1084 err := db.Model(table).Where("id<0").Scan(&users) 1085 t.AssertNil(err) 1086 }) 1087 } 1088 1089 // JSON tag is only used for JSON Marshal/Unmarshal, DO NOT use it in multiple purposes! 1090 //func Test_Model_StructsWithJsonTag(t *testing.T) { 1091 // table := createInitTable() 1092 // defer dropTable(table) 1093 // 1094 // db.SetDebug(true) 1095 // gtest.C(t, func(t *gtest.T) { 1096 // type User struct { 1097 // Uid int `json:"id"` 1098 // Passport string 1099 // Password string 1100 // Name string `json:"nick_name"` 1101 // Time gtime.Time `json:"create_time"` 1102 // } 1103 // var users []User 1104 // err := db.Model(table).Order("id asc").Scan(&users) 1105 // if err != nil { 1106 // gtest.Error(err) 1107 // } 1108 // t.Assert(len(users), TableSize) 1109 // t.Assert(users[0].Uid, 1) 1110 // t.Assert(users[1].Uid, 2) 1111 // t.Assert(users[2].Uid, 3) 1112 // t.Assert(users[0].Name, "name_1") 1113 // t.Assert(users[1].Name, "name_2") 1114 // t.Assert(users[2].Name, "name_3") 1115 // t.Assert(users[0].Time.String(), "2018-10-24 10:00:00") 1116 // }) 1117 //} 1118 1119 func Test_Model_Scan(t *testing.T) { 1120 table := createInitTable() 1121 defer dropTable(table) 1122 1123 gtest.C(t, func(t *gtest.T) { 1124 type User struct { 1125 Id int 1126 Passport string 1127 Password string 1128 NickName string 1129 CreateTime gtime.Time 1130 } 1131 user := new(User) 1132 err := db.Model(table).Where("id=1").Scan(user) 1133 t.AssertNil(err) 1134 t.Assert(user.NickName, "name_1") 1135 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 1136 }) 1137 gtest.C(t, func(t *gtest.T) { 1138 type User struct { 1139 Id int 1140 Passport string 1141 Password string 1142 NickName string 1143 CreateTime *gtime.Time 1144 } 1145 user := new(User) 1146 err := db.Model(table).Where("id=1").Scan(user) 1147 t.AssertNil(err) 1148 t.Assert(user.NickName, "name_1") 1149 t.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 1150 }) 1151 gtest.C(t, func(t *gtest.T) { 1152 type User struct { 1153 Id int 1154 Passport string 1155 Password string 1156 NickName string 1157 CreateTime gtime.Time 1158 } 1159 var users []User 1160 err := db.Model(table).Order("id asc").Scan(&users) 1161 t.AssertNil(err) 1162 t.Assert(len(users), TableSize) 1163 t.Assert(users[0].Id, 1) 1164 t.Assert(users[1].Id, 2) 1165 t.Assert(users[2].Id, 3) 1166 t.Assert(users[0].NickName, "name_1") 1167 t.Assert(users[1].NickName, "name_2") 1168 t.Assert(users[2].NickName, "name_3") 1169 t.Assert(users[0].CreateTime.String(), "2018-10-24 10:00:00") 1170 }) 1171 gtest.C(t, func(t *gtest.T) { 1172 type User struct { 1173 Id int 1174 Passport string 1175 Password string 1176 NickName string 1177 CreateTime *gtime.Time 1178 } 1179 var users []*User 1180 err := db.Model(table).Order("id asc").Scan(&users) 1181 t.AssertNil(err) 1182 t.Assert(len(users), TableSize) 1183 t.Assert(users[0].Id, 1) 1184 t.Assert(users[1].Id, 2) 1185 t.Assert(users[2].Id, 3) 1186 t.Assert(users[0].NickName, "name_1") 1187 t.Assert(users[1].NickName, "name_2") 1188 t.Assert(users[2].NickName, "name_3") 1189 t.Assert(users[0].CreateTime.String(), "2018-10-24 10:00:00") 1190 }) 1191 // sql.ErrNoRows 1192 gtest.C(t, func(t *gtest.T) { 1193 type User struct { 1194 Id int 1195 Passport string 1196 Password string 1197 NickName string 1198 CreateTime *gtime.Time 1199 } 1200 var ( 1201 user = new(User) 1202 users = new([]*User) 1203 ) 1204 err1 := db.Model(table).Where("id < 0").Scan(user) 1205 err2 := db.Model(table).Where("id < 0").Scan(users) 1206 t.Assert(err1, sql.ErrNoRows) 1207 t.Assert(err2, nil) 1208 }) 1209 } 1210 1211 func Test_Model_OrderBy(t *testing.T) { 1212 table := createInitTable() 1213 defer dropTable(table) 1214 1215 gtest.C(t, func(t *gtest.T) { 1216 result, err := db.Model(table).Order("id DESC").Select() 1217 t.AssertNil(err) 1218 t.Assert(len(result), TableSize) 1219 t.Assert(result[0]["nickname"].String(), fmt.Sprintf("name_%d", TableSize)) 1220 }) 1221 } 1222 1223 func Test_Model_GroupBy(t *testing.T) { 1224 table := createInitTable() 1225 defer dropTable(table) 1226 1227 gtest.C(t, func(t *gtest.T) { 1228 result, err := db.Model(table).GroupBy("id").Select() 1229 t.AssertNil(err) 1230 t.Assert(len(result), TableSize) 1231 t.Assert(result[0]["nickname"].String(), "name_1") 1232 }) 1233 } 1234 1235 func Test_Model_Data(t *testing.T) { 1236 gtest.C(t, func(t *gtest.T) { 1237 table := createInitTable() 1238 defer dropTable(table) 1239 result, err := db.Model(table).Data("nickname=?", "test").Where("id=?", 3).Update() 1240 t.AssertNil(err) 1241 n, _ := result.RowsAffected() 1242 t.Assert(n, 1) 1243 }) 1244 gtest.C(t, func(t *gtest.T) { 1245 table := createTable() 1246 defer dropTable(table) 1247 users := make([]g.MapStrAny, 0) 1248 for i := 1; i <= 10; i++ { 1249 users = append(users, g.MapStrAny{ 1250 "id": i, 1251 "passport": fmt.Sprintf(`passport_%d`, i), 1252 "password": fmt.Sprintf(`password_%d`, i), 1253 "nickname": fmt.Sprintf(`nickname_%d`, i), 1254 }) 1255 } 1256 result, err := db.Model(table).Data(users).Batch(2).Insert() 1257 t.AssertNil(err) 1258 n, _ := result.RowsAffected() 1259 t.Assert(n, 10) 1260 }) 1261 gtest.C(t, func(t *gtest.T) { 1262 table := createTable() 1263 defer dropTable(table) 1264 users := garray.New() 1265 for i := 1; i <= 10; i++ { 1266 users.Append(g.MapStrAny{ 1267 "id": i, 1268 "passport": fmt.Sprintf(`passport_%d`, i), 1269 "password": fmt.Sprintf(`password_%d`, i), 1270 "nickname": fmt.Sprintf(`nickname_%d`, i), 1271 }) 1272 } 1273 result, err := db.Model(table).Data(users).Batch(2).Insert() 1274 t.AssertNil(err) 1275 n, _ := result.RowsAffected() 1276 t.Assert(n, 10) 1277 }) 1278 } 1279 1280 func Test_Model_Where(t *testing.T) { 1281 table := createInitTable() 1282 defer dropTable(table) 1283 1284 // string 1285 gtest.C(t, func(t *gtest.T) { 1286 result, err := db.Model(table).Where("id=? and nickname=?", 3, "name_3").One() 1287 t.AssertNil(err) 1288 t.AssertGT(len(result), 0) 1289 t.Assert(result["id"].Int(), 3) 1290 }) 1291 1292 // slice 1293 gtest.C(t, func(t *gtest.T) { 1294 result, err := db.Model(table).Where(g.Slice{"id", 3}).One() 1295 t.AssertNil(err) 1296 t.AssertGT(len(result), 0) 1297 t.Assert(result["id"].Int(), 3) 1298 }) 1299 gtest.C(t, func(t *gtest.T) { 1300 result, err := db.Model(table).Where(g.Slice{"id", 3, "nickname", "name_3"}).One() 1301 t.AssertNil(err) 1302 t.AssertGT(len(result), 0) 1303 t.Assert(result["id"].Int(), 3) 1304 }) 1305 1306 // slice parameter 1307 gtest.C(t, func(t *gtest.T) { 1308 result, err := db.Model(table).Where("id=? and nickname=?", g.Slice{3, "name_3"}).One() 1309 t.AssertNil(err) 1310 t.AssertGT(len(result), 0) 1311 t.Assert(result["id"].Int(), 3) 1312 }) 1313 // map like 1314 gtest.C(t, func(t *gtest.T) { 1315 result, err := db.Model(table).Where(g.Map{ 1316 "passport like": "user_1%", 1317 }).Order("id asc").All() 1318 t.AssertNil(err) 1319 t.Assert(len(result), 2) 1320 t.Assert(result[0].GMap().Get("id"), 1) 1321 t.Assert(result[1].GMap().Get("id"), 10) 1322 }) 1323 // map + slice parameter 1324 gtest.C(t, func(t *gtest.T) { 1325 result, err := db.Model(table).Where(g.Map{ 1326 "id": g.Slice{1, 2, 3}, 1327 "passport": g.Slice{"user_2", "user_3"}, 1328 }).And("id=? and nickname=?", g.Slice{3, "name_3"}).One() 1329 t.AssertNil(err) 1330 t.AssertGT(len(result), 0) 1331 t.Assert(result["id"].Int(), 3) 1332 }) 1333 gtest.C(t, func(t *gtest.T) { 1334 result, err := db.Model(table).Where("id=3", g.Slice{}).One() 1335 t.AssertNil(err) 1336 t.AssertGT(len(result), 0) 1337 t.Assert(result["id"].Int(), 3) 1338 }) 1339 gtest.C(t, func(t *gtest.T) { 1340 result, err := db.Model(table).Where("id=?", g.Slice{3}).One() 1341 t.AssertNil(err) 1342 t.AssertGT(len(result), 0) 1343 t.Assert(result["id"].Int(), 3) 1344 }) 1345 gtest.C(t, func(t *gtest.T) { 1346 result, err := db.Model(table).Where("id", 3).One() 1347 t.AssertNil(err) 1348 t.AssertGT(len(result), 0) 1349 t.Assert(result["id"].Int(), 3) 1350 }) 1351 gtest.C(t, func(t *gtest.T) { 1352 result, err := db.Model(table).Where("id", 3).Where("nickname", "name_3").One() 1353 t.AssertNil(err) 1354 t.Assert(result["id"].Int(), 3) 1355 }) 1356 gtest.C(t, func(t *gtest.T) { 1357 result, err := db.Model(table).Where("id", 3).And("nickname", "name_3").One() 1358 t.AssertNil(err) 1359 t.Assert(result["id"].Int(), 3) 1360 }) 1361 gtest.C(t, func(t *gtest.T) { 1362 result, err := db.Model(table).Where("id", 30).Or("nickname", "name_3").One() 1363 t.AssertNil(err) 1364 t.Assert(result["id"].Int(), 3) 1365 }) 1366 gtest.C(t, func(t *gtest.T) { 1367 result, err := db.Model(table).Where("id", 30).Or("nickname", "name_3").And("id>?", 1).One() 1368 t.AssertNil(err) 1369 t.Assert(result["id"].Int(), 3) 1370 }) 1371 gtest.C(t, func(t *gtest.T) { 1372 result, err := db.Model(table).Where("id", 30).Or("nickname", "name_3").And("id>", 1).One() 1373 t.AssertNil(err) 1374 t.Assert(result["id"].Int(), 3) 1375 }) 1376 // slice 1377 gtest.C(t, func(t *gtest.T) { 1378 result, err := db.Model(table).Where("id=? AND nickname=?", g.Slice{3, "name_3"}...).One() 1379 t.AssertNil(err) 1380 t.Assert(result["id"].Int(), 3) 1381 }) 1382 gtest.C(t, func(t *gtest.T) { 1383 result, err := db.Model(table).Where("id=? AND nickname=?", g.Slice{3, "name_3"}).One() 1384 t.AssertNil(err) 1385 t.Assert(result["id"].Int(), 3) 1386 }) 1387 gtest.C(t, func(t *gtest.T) { 1388 result, err := db.Model(table).Where("passport like ? and nickname like ?", g.Slice{"user_3", "name_3"}).One() 1389 t.AssertNil(err) 1390 t.Assert(result["id"].Int(), 3) 1391 }) 1392 // map 1393 gtest.C(t, func(t *gtest.T) { 1394 result, err := db.Model(table).Where(g.Map{"id": 3, "nickname": "name_3"}).One() 1395 t.AssertNil(err) 1396 t.Assert(result["id"].Int(), 3) 1397 }) 1398 // map key operator 1399 gtest.C(t, func(t *gtest.T) { 1400 result, err := db.Model(table).Where(g.Map{"id>": 1, "id<": 3}).One() 1401 t.AssertNil(err) 1402 t.Assert(result["id"].Int(), 2) 1403 }) 1404 1405 // gmap.Map 1406 gtest.C(t, func(t *gtest.T) { 1407 result, err := db.Model(table).Where(gmap.NewFrom(g.MapAnyAny{"id": 3, "nickname": "name_3"})).One() 1408 t.AssertNil(err) 1409 t.Assert(result["id"].Int(), 3) 1410 }) 1411 // gmap.Map key operator 1412 gtest.C(t, func(t *gtest.T) { 1413 result, err := db.Model(table).Where(gmap.NewFrom(g.MapAnyAny{"id>": 1, "id<": 3})).One() 1414 t.AssertNil(err) 1415 t.Assert(result["id"].Int(), 2) 1416 }) 1417 1418 // list map 1419 gtest.C(t, func(t *gtest.T) { 1420 result, err := db.Model(table).Where(gmap.NewListMapFrom(g.MapAnyAny{"id": 3, "nickname": "name_3"})).One() 1421 t.AssertNil(err) 1422 t.Assert(result["id"].Int(), 3) 1423 }) 1424 // list map key operator 1425 gtest.C(t, func(t *gtest.T) { 1426 result, err := db.Model(table).Where(gmap.NewListMapFrom(g.MapAnyAny{"id>": 1, "id<": 3})).One() 1427 t.AssertNil(err) 1428 t.Assert(result["id"].Int(), 2) 1429 }) 1430 1431 // tree map 1432 gtest.C(t, func(t *gtest.T) { 1433 result, err := db.Model(table).Where(gmap.NewTreeMapFrom(gutil.ComparatorString, g.MapAnyAny{"id": 3, "nickname": "name_3"})).One() 1434 t.AssertNil(err) 1435 t.Assert(result["id"].Int(), 3) 1436 }) 1437 // tree map key operator 1438 gtest.C(t, func(t *gtest.T) { 1439 result, err := db.Model(table).Where(gmap.NewTreeMapFrom(gutil.ComparatorString, g.MapAnyAny{"id>": 1, "id<": 3})).One() 1440 t.AssertNil(err) 1441 t.Assert(result["id"].Int(), 2) 1442 }) 1443 1444 // complicated where 1 1445 gtest.C(t, func(t *gtest.T) { 1446 //db.SetDebug(true) 1447 conditions := g.Map{ 1448 "nickname like ?": "%name%", 1449 "id between ? and ?": g.Slice{1, 3}, 1450 "id > 0": nil, 1451 "create_time > 0": nil, 1452 "id": g.Slice{1, 2, 3}, 1453 } 1454 result, err := db.Model(table).Where(conditions).Order("id asc").All() 1455 t.AssertNil(err) 1456 t.Assert(len(result), 3) 1457 t.Assert(result[0]["id"].Int(), 1) 1458 }) 1459 // complicated where 2 1460 gtest.C(t, func(t *gtest.T) { 1461 //db.SetDebug(true) 1462 conditions := g.Map{ 1463 "nickname like ?": "%name%", 1464 "id between ? and ?": g.Slice{1, 3}, 1465 "id >= ?": 1, 1466 "create_time > ?": 0, 1467 "id in(?)": g.Slice{1, 2, 3}, 1468 } 1469 result, err := db.Model(table).Where(conditions).Order("id asc").All() 1470 t.AssertNil(err) 1471 t.Assert(len(result), 3) 1472 t.Assert(result[0]["id"].Int(), 1) 1473 }) 1474 // struct, automatic mapping and filtering. 1475 gtest.C(t, func(t *gtest.T) { 1476 type User struct { 1477 Id int 1478 Nickname string 1479 } 1480 result, err := db.Model(table).Where(User{3, "name_3"}).One() 1481 t.AssertNil(err) 1482 t.Assert(result["id"].Int(), 3) 1483 1484 result, err = db.Model(table).Where(&User{3, "name_3"}).One() 1485 t.AssertNil(err) 1486 t.Assert(result["id"].Int(), 3) 1487 }) 1488 // slice single 1489 gtest.C(t, func(t *gtest.T) { 1490 result, err := db.Model(table).Where("id IN(?)", g.Slice{1, 3}).Order("id ASC").All() 1491 t.AssertNil(err) 1492 t.Assert(len(result), 2) 1493 t.Assert(result[0]["id"].Int(), 1) 1494 t.Assert(result[1]["id"].Int(), 3) 1495 }) 1496 // slice + string 1497 gtest.C(t, func(t *gtest.T) { 1498 result, err := db.Model(table).Where("nickname=? AND id IN(?)", "name_3", g.Slice{1, 3}).Order("id ASC").All() 1499 t.AssertNil(err) 1500 t.Assert(len(result), 1) 1501 t.Assert(result[0]["id"].Int(), 3) 1502 }) 1503 // slice + map 1504 gtest.C(t, func(t *gtest.T) { 1505 result, err := db.Model(table).Where(g.Map{ 1506 "id": g.Slice{1, 3}, 1507 "nickname": "name_3", 1508 }).Order("id ASC").All() 1509 t.AssertNil(err) 1510 t.Assert(len(result), 1) 1511 t.Assert(result[0]["id"].Int(), 3) 1512 }) 1513 // slice + struct 1514 gtest.C(t, func(t *gtest.T) { 1515 type User struct { 1516 Ids []int `json:"id"` 1517 Nickname string `gconv:"nickname"` 1518 } 1519 result, err := db.Model(table).Where(User{ 1520 Ids: []int{1, 3}, 1521 Nickname: "name_3", 1522 }).Order("id ASC").All() 1523 t.AssertNil(err) 1524 t.Assert(len(result), 1) 1525 t.Assert(result[0]["id"].Int(), 3) 1526 }) 1527 } 1528 1529 func Test_Model_Where_ISNULL_1(t *testing.T) { 1530 table := createInitTable() 1531 defer dropTable(table) 1532 1533 gtest.C(t, func(t *gtest.T) { 1534 //db.SetDebug(true) 1535 result, err := db.Model(table).Data("nickname", nil).Where("id", 2).Update() 1536 t.AssertNil(err) 1537 n, _ := result.RowsAffected() 1538 t.Assert(n, 1) 1539 1540 one, err := db.Model(table).Where("nickname", nil).One() 1541 t.AssertNil(err) 1542 t.Assert(one.IsEmpty(), false) 1543 t.Assert(one["id"], 2) 1544 }) 1545 } 1546 1547 func Test_Model_Where_ISNULL_2(t *testing.T) { 1548 table := createInitTable() 1549 defer dropTable(table) 1550 1551 // complicated one. 1552 gtest.C(t, func(t *gtest.T) { 1553 //db.SetDebug(true) 1554 conditions := g.Map{ 1555 "nickname like ?": "%name%", 1556 "id between ? and ?": g.Slice{1, 3}, 1557 "id > 0": nil, 1558 "create_time > 0": nil, 1559 "id": g.Slice{1, 2, 3}, 1560 } 1561 result, err := db.Model(table).WherePri(conditions).Order("id asc").All() 1562 t.AssertNil(err) 1563 t.Assert(len(result), 3) 1564 t.Assert(result[0]["id"].Int(), 1) 1565 }) 1566 } 1567 1568 func Test_Model_Where_OmitEmpty(t *testing.T) { 1569 table := createInitTable() 1570 defer dropTable(table) 1571 gtest.C(t, func(t *gtest.T) { 1572 conditions := g.Map{ 1573 "id < 4": "", 1574 } 1575 result, err := db.Model(table).WherePri(conditions).Order("id asc").All() 1576 t.AssertNil(err) 1577 t.Assert(len(result), 3) 1578 t.Assert(result[0]["id"].Int(), 1) 1579 }) 1580 gtest.C(t, func(t *gtest.T) { 1581 conditions := g.Map{ 1582 "id < 4": "", 1583 } 1584 result, err := db.Model(table).WherePri(conditions).OmitEmpty().Order("id asc").All() 1585 t.AssertNil(err) 1586 t.Assert(len(result), 3) 1587 t.Assert(result[0]["id"].Int(), 1) 1588 }) 1589 } 1590 1591 func Test_Model_Where_GTime(t *testing.T) { 1592 table := createInitTable() 1593 defer dropTable(table) 1594 1595 gtest.C(t, func(t *gtest.T) { 1596 result, err := db.Model(table).Where("create_time>?", gtime.NewFromStr("2010-09-01")).All() 1597 t.AssertNil(err) 1598 t.Assert(len(result), 10) 1599 }) 1600 gtest.C(t, func(t *gtest.T) { 1601 result, err := db.Model(table).Where("create_time>?", *gtime.NewFromStr("2010-09-01")).All() 1602 t.AssertNil(err) 1603 t.Assert(len(result), 10) 1604 }) 1605 } 1606 1607 func Test_Model_WherePri(t *testing.T) { 1608 table := createInitTable() 1609 defer dropTable(table) 1610 1611 // primary key 1612 gtest.C(t, func(t *gtest.T) { 1613 one, err := db.Model(table).WherePri(3).One() 1614 t.AssertNil(err) 1615 t.AssertNE(one, nil) 1616 t.Assert(one["id"].Int(), 3) 1617 }) 1618 gtest.C(t, func(t *gtest.T) { 1619 all, err := db.Model(table).WherePri(g.Slice{3, 9}).Order("id asc").All() 1620 t.AssertNil(err) 1621 t.Assert(len(all), 2) 1622 t.Assert(all[0]["id"].Int(), 3) 1623 t.Assert(all[1]["id"].Int(), 9) 1624 }) 1625 1626 // string 1627 gtest.C(t, func(t *gtest.T) { 1628 result, err := db.Model(table).WherePri("id=? and nickname=?", 3, "name_3").One() 1629 t.AssertNil(err) 1630 t.AssertGT(len(result), 0) 1631 t.Assert(result["id"].Int(), 3) 1632 }) 1633 // slice parameter 1634 gtest.C(t, func(t *gtest.T) { 1635 result, err := db.Model(table).WherePri("id=? and nickname=?", g.Slice{3, "name_3"}).One() 1636 t.AssertNil(err) 1637 t.AssertGT(len(result), 0) 1638 t.Assert(result["id"].Int(), 3) 1639 }) 1640 // map like 1641 gtest.C(t, func(t *gtest.T) { 1642 result, err := db.Model(table).WherePri(g.Map{ 1643 "passport like": "user_1%", 1644 }).Order("id asc").All() 1645 t.AssertNil(err) 1646 t.Assert(len(result), 2) 1647 t.Assert(result[0].GMap().Get("id"), 1) 1648 t.Assert(result[1].GMap().Get("id"), 10) 1649 }) 1650 // map + slice parameter 1651 gtest.C(t, func(t *gtest.T) { 1652 result, err := db.Model(table).WherePri(g.Map{ 1653 "id": g.Slice{1, 2, 3}, 1654 "passport": g.Slice{"user_2", "user_3"}, 1655 }).And("id=? and nickname=?", g.Slice{3, "name_3"}).One() 1656 t.AssertNil(err) 1657 t.AssertGT(len(result), 0) 1658 t.Assert(result["id"].Int(), 3) 1659 }) 1660 gtest.C(t, func(t *gtest.T) { 1661 result, err := db.Model(table).WherePri(g.Map{ 1662 "id": g.Slice{1, 2, 3}, 1663 "passport": g.Slice{"user_2", "user_3"}, 1664 }).Or("nickname=?", g.Slice{"name_4"}).And("id", 3).One() 1665 t.AssertNil(err) 1666 t.AssertGT(len(result), 0) 1667 t.Assert(result["id"].Int(), 2) 1668 }) 1669 gtest.C(t, func(t *gtest.T) { 1670 result, err := db.Model(table).WherePri("id=3", g.Slice{}).One() 1671 t.AssertNil(err) 1672 t.AssertGT(len(result), 0) 1673 t.Assert(result["id"].Int(), 3) 1674 }) 1675 gtest.C(t, func(t *gtest.T) { 1676 result, err := db.Model(table).WherePri("id=?", g.Slice{3}).One() 1677 t.AssertNil(err) 1678 t.AssertGT(len(result), 0) 1679 t.Assert(result["id"].Int(), 3) 1680 }) 1681 gtest.C(t, func(t *gtest.T) { 1682 result, err := db.Model(table).WherePri("id", 3).One() 1683 t.AssertNil(err) 1684 t.AssertGT(len(result), 0) 1685 t.Assert(result["id"].Int(), 3) 1686 }) 1687 gtest.C(t, func(t *gtest.T) { 1688 result, err := db.Model(table).WherePri("id", 3).WherePri("nickname", "name_3").One() 1689 t.AssertNil(err) 1690 t.Assert(result["id"].Int(), 3) 1691 }) 1692 gtest.C(t, func(t *gtest.T) { 1693 result, err := db.Model(table).WherePri("id", 3).And("nickname", "name_3").One() 1694 t.AssertNil(err) 1695 t.Assert(result["id"].Int(), 3) 1696 }) 1697 gtest.C(t, func(t *gtest.T) { 1698 result, err := db.Model(table).WherePri("id", 30).Or("nickname", "name_3").One() 1699 t.AssertNil(err) 1700 t.Assert(result["id"].Int(), 3) 1701 }) 1702 gtest.C(t, func(t *gtest.T) { 1703 result, err := db.Model(table).WherePri("id", 30).Or("nickname", "name_3").And("id>?", 1).One() 1704 t.AssertNil(err) 1705 t.Assert(result["id"].Int(), 3) 1706 }) 1707 gtest.C(t, func(t *gtest.T) { 1708 result, err := db.Model(table).WherePri("id", 30).Or("nickname", "name_3").And("id>", 1).One() 1709 t.AssertNil(err) 1710 t.Assert(result["id"].Int(), 3) 1711 }) 1712 // slice 1713 gtest.C(t, func(t *gtest.T) { 1714 result, err := db.Model(table).WherePri("id=? AND nickname=?", g.Slice{3, "name_3"}...).One() 1715 t.AssertNil(err) 1716 t.Assert(result["id"].Int(), 3) 1717 }) 1718 gtest.C(t, func(t *gtest.T) { 1719 result, err := db.Model(table).WherePri("id=? AND nickname=?", g.Slice{3, "name_3"}).One() 1720 t.AssertNil(err) 1721 t.Assert(result["id"].Int(), 3) 1722 }) 1723 gtest.C(t, func(t *gtest.T) { 1724 result, err := db.Model(table).WherePri("passport like ? and nickname like ?", g.Slice{"user_3", "name_3"}).One() 1725 t.AssertNil(err) 1726 t.Assert(result["id"].Int(), 3) 1727 }) 1728 // map 1729 gtest.C(t, func(t *gtest.T) { 1730 result, err := db.Model(table).WherePri(g.Map{"id": 3, "nickname": "name_3"}).One() 1731 t.AssertNil(err) 1732 t.Assert(result["id"].Int(), 3) 1733 }) 1734 // map key operator 1735 gtest.C(t, func(t *gtest.T) { 1736 result, err := db.Model(table).WherePri(g.Map{"id>": 1, "id<": 3}).One() 1737 t.AssertNil(err) 1738 t.Assert(result["id"].Int(), 2) 1739 }) 1740 1741 // gmap.Map 1742 gtest.C(t, func(t *gtest.T) { 1743 result, err := db.Model(table).WherePri(gmap.NewFrom(g.MapAnyAny{"id": 3, "nickname": "name_3"})).One() 1744 t.AssertNil(err) 1745 t.Assert(result["id"].Int(), 3) 1746 }) 1747 // gmap.Map key operator 1748 gtest.C(t, func(t *gtest.T) { 1749 result, err := db.Model(table).WherePri(gmap.NewFrom(g.MapAnyAny{"id>": 1, "id<": 3})).One() 1750 t.AssertNil(err) 1751 t.Assert(result["id"].Int(), 2) 1752 }) 1753 1754 // list map 1755 gtest.C(t, func(t *gtest.T) { 1756 result, err := db.Model(table).WherePri(gmap.NewListMapFrom(g.MapAnyAny{"id": 3, "nickname": "name_3"})).One() 1757 t.AssertNil(err) 1758 t.Assert(result["id"].Int(), 3) 1759 }) 1760 // list map key operator 1761 gtest.C(t, func(t *gtest.T) { 1762 result, err := db.Model(table).WherePri(gmap.NewListMapFrom(g.MapAnyAny{"id>": 1, "id<": 3})).One() 1763 t.AssertNil(err) 1764 t.Assert(result["id"].Int(), 2) 1765 }) 1766 1767 // tree map 1768 gtest.C(t, func(t *gtest.T) { 1769 result, err := db.Model(table).WherePri(gmap.NewTreeMapFrom(gutil.ComparatorString, g.MapAnyAny{"id": 3, "nickname": "name_3"})).One() 1770 t.AssertNil(err) 1771 t.Assert(result["id"].Int(), 3) 1772 }) 1773 // tree map key operator 1774 gtest.C(t, func(t *gtest.T) { 1775 result, err := db.Model(table).WherePri(gmap.NewTreeMapFrom(gutil.ComparatorString, g.MapAnyAny{"id>": 1, "id<": 3})).One() 1776 t.AssertNil(err) 1777 t.Assert(result["id"].Int(), 2) 1778 }) 1779 1780 // complicated where 1 1781 gtest.C(t, func(t *gtest.T) { 1782 //db.SetDebug(true) 1783 conditions := g.Map{ 1784 "nickname like ?": "%name%", 1785 "id between ? and ?": g.Slice{1, 3}, 1786 "id > 0": nil, 1787 "create_time > 0": nil, 1788 "id": g.Slice{1, 2, 3}, 1789 } 1790 result, err := db.Model(table).WherePri(conditions).Order("id asc").All() 1791 t.AssertNil(err) 1792 t.Assert(len(result), 3) 1793 t.Assert(result[0]["id"].Int(), 1) 1794 }) 1795 // complicated where 2 1796 gtest.C(t, func(t *gtest.T) { 1797 //db.SetDebug(true) 1798 conditions := g.Map{ 1799 "nickname like ?": "%name%", 1800 "id between ? and ?": g.Slice{1, 3}, 1801 "id >= ?": 1, 1802 "create_time > ?": 0, 1803 "id in(?)": g.Slice{1, 2, 3}, 1804 } 1805 result, err := db.Model(table).WherePri(conditions).Order("id asc").All() 1806 t.AssertNil(err) 1807 t.Assert(len(result), 3) 1808 t.Assert(result[0]["id"].Int(), 1) 1809 }) 1810 // struct 1811 gtest.C(t, func(t *gtest.T) { 1812 type User struct { 1813 Id int `json:"id"` 1814 Nickname string `gconv:"nickname"` 1815 } 1816 result, err := db.Model(table).WherePri(User{3, "name_3"}).One() 1817 t.AssertNil(err) 1818 t.Assert(result["id"].Int(), 3) 1819 1820 result, err = db.Model(table).WherePri(&User{3, "name_3"}).One() 1821 t.AssertNil(err) 1822 t.Assert(result["id"].Int(), 3) 1823 }) 1824 // slice single 1825 gtest.C(t, func(t *gtest.T) { 1826 result, err := db.Model(table).WherePri("id IN(?)", g.Slice{1, 3}).Order("id ASC").All() 1827 t.AssertNil(err) 1828 t.Assert(len(result), 2) 1829 t.Assert(result[0]["id"].Int(), 1) 1830 t.Assert(result[1]["id"].Int(), 3) 1831 }) 1832 // slice + string 1833 gtest.C(t, func(t *gtest.T) { 1834 result, err := db.Model(table).WherePri("nickname=? AND id IN(?)", "name_3", g.Slice{1, 3}).Order("id ASC").All() 1835 t.AssertNil(err) 1836 t.Assert(len(result), 1) 1837 t.Assert(result[0]["id"].Int(), 3) 1838 }) 1839 // slice + map 1840 gtest.C(t, func(t *gtest.T) { 1841 result, err := db.Model(table).WherePri(g.Map{ 1842 "id": g.Slice{1, 3}, 1843 "nickname": "name_3", 1844 }).Order("id ASC").All() 1845 t.AssertNil(err) 1846 t.Assert(len(result), 1) 1847 t.Assert(result[0]["id"].Int(), 3) 1848 }) 1849 // slice + struct 1850 gtest.C(t, func(t *gtest.T) { 1851 type User struct { 1852 Ids []int `json:"id"` 1853 Nickname string `gconv:"nickname"` 1854 } 1855 result, err := db.Model(table).WherePri(User{ 1856 Ids: []int{1, 3}, 1857 Nickname: "name_3", 1858 }).Order("id ASC").All() 1859 t.AssertNil(err) 1860 t.Assert(len(result), 1) 1861 t.Assert(result[0]["id"].Int(), 3) 1862 }) 1863 } 1864 1865 func Test_Model_Delete(t *testing.T) { 1866 table := createInitTable() 1867 defer dropTable(table) 1868 1869 // DELETE...LIMIT 1870 gtest.C(t, func(t *gtest.T) { 1871 result, err := db.Model(table).Where(1).Limit(2).Delete() 1872 t.AssertNil(err) 1873 n, _ := result.RowsAffected() 1874 t.Assert(n, 2) 1875 }) 1876 1877 gtest.C(t, func(t *gtest.T) { 1878 result, err := db.Model(table).Where(1).Delete() 1879 t.AssertNil(err) 1880 n, _ := result.RowsAffected() 1881 t.Assert(n, TableSize-2) 1882 }) 1883 } 1884 1885 func Test_Model_Offset(t *testing.T) { 1886 table := createInitTable() 1887 defer dropTable(table) 1888 gtest.C(t, func(t *gtest.T) { 1889 result, err := db.Model(table).Limit(2).Offset(5).Order("id").Select() 1890 t.AssertNil(err) 1891 t.Assert(len(result), 2) 1892 t.Assert(result[0]["id"], 6) 1893 t.Assert(result[1]["id"], 7) 1894 }) 1895 } 1896 1897 func Test_Model_Page(t *testing.T) { 1898 table := createInitTable() 1899 defer dropTable(table) 1900 gtest.C(t, func(t *gtest.T) { 1901 result, err := db.Model(table).Page(3, 3).Order("id").All() 1902 t.AssertNil(err) 1903 t.Assert(len(result), 3) 1904 t.Assert(result[0]["id"], 7) 1905 t.Assert(result[1]["id"], 8) 1906 }) 1907 gtest.C(t, func(t *gtest.T) { 1908 model := db.Model(table).Safe().Order("id") 1909 all, err := model.Page(3, 3).All() 1910 count, err := model.Count() 1911 t.AssertNil(err) 1912 t.Assert(len(all), 3) 1913 t.Assert(all[0]["id"], "7") 1914 t.Assert(count, TableSize) 1915 }) 1916 } 1917 1918 func Test_Model_Option_Map(t *testing.T) { 1919 // Insert 1920 gtest.C(t, func(t *gtest.T) { 1921 table := createTable() 1922 defer dropTable(table) 1923 r, err := db.Model(table).Fields("id, passport").Data(g.Map{ 1924 "id": 1, 1925 "passport": "1", 1926 "password": "1", 1927 "nickname": "1", 1928 }).Insert() 1929 t.AssertNil(err) 1930 n, _ := r.RowsAffected() 1931 t.Assert(n, 1) 1932 one, err := db.Model(table).Where("id", 1).One() 1933 t.AssertNil(err) 1934 t.AssertNE(one["password"].String(), "1") 1935 t.AssertNE(one["nickname"].String(), "1") 1936 t.Assert(one["passport"].String(), "1") 1937 }) 1938 gtest.C(t, func(t *gtest.T) { 1939 table := createTable() 1940 defer dropTable(table) 1941 r, err := db.Model(table).OmitEmptyData().Data(g.Map{ 1942 "id": 1, 1943 "passport": 0, 1944 "password": 0, 1945 "nickname": "1", 1946 }).Insert() 1947 t.AssertNil(err) 1948 n, _ := r.RowsAffected() 1949 t.Assert(n, 1) 1950 one, err := db.Model(table).Where("id", 1).One() 1951 t.AssertNil(err) 1952 t.AssertNE(one["passport"].String(), "0") 1953 t.AssertNE(one["password"].String(), "0") 1954 t.Assert(one["nickname"].String(), "1") 1955 }) 1956 1957 // Replace 1958 gtest.C(t, func(t *gtest.T) { 1959 table := createInitTable() 1960 defer dropTable(table) 1961 _, err := db.Model(table).OmitEmptyData().Data(g.Map{ 1962 "id": 1, 1963 "passport": 0, 1964 "password": 0, 1965 "nickname": "1", 1966 }).Replace() 1967 t.AssertNil(err) 1968 one, err := db.Model(table).Where("id", 1).One() 1969 t.AssertNil(err) 1970 t.AssertNE(one["passport"].String(), "0") 1971 t.AssertNE(one["password"].String(), "0") 1972 t.Assert(one["nickname"].String(), "1") 1973 }) 1974 1975 // Save 1976 gtest.C(t, func(t *gtest.T) { 1977 table := createTable() 1978 defer dropTable(table) 1979 r, err := db.Model(table).Fields("id, passport").Data(g.Map{ 1980 "id": 1, 1981 "passport": "1", 1982 "password": "1", 1983 "nickname": "1", 1984 }).Save() 1985 t.AssertNil(err) 1986 n, _ := r.RowsAffected() 1987 t.Assert(n, 1) 1988 one, err := db.Model(table).Where("id", 1).One() 1989 t.AssertNil(err) 1990 t.AssertNE(one["password"].String(), "1") 1991 t.AssertNE(one["nickname"].String(), "1") 1992 t.Assert(one["passport"].String(), "1") 1993 }) 1994 gtest.C(t, func(t *gtest.T) { 1995 table := createTable() 1996 defer dropTable(table) 1997 _, err := db.Model(table).OmitEmptyData().Data(g.Map{ 1998 "id": 1, 1999 "passport": 0, 2000 "password": 0, 2001 "nickname": "1", 2002 }).Save() 2003 t.AssertNil(err) 2004 one, err := db.Model(table).Where("id", 1).One() 2005 t.AssertNil(err) 2006 t.AssertNE(one["passport"].String(), "0") 2007 t.AssertNE(one["password"].String(), "0") 2008 t.Assert(one["nickname"].String(), "1") 2009 2010 _, err = db.Model(table).Data(g.Map{ 2011 "id": 1, 2012 "passport": 0, 2013 "password": 0, 2014 "nickname": "1", 2015 }).Save() 2016 t.AssertNil(err) 2017 one, err = db.Model(table).Where("id", 1).One() 2018 t.AssertNil(err) 2019 t.Assert(one["passport"].String(), "0") 2020 t.Assert(one["password"].String(), "0") 2021 t.Assert(one["nickname"].String(), "1") 2022 }) 2023 2024 // Update 2025 gtest.C(t, func(t *gtest.T) { 2026 table := createInitTable() 2027 defer dropTable(table) 2028 2029 r, err := db.Model(table).Data(g.Map{"nickname": ""}).Where("id", 1).Update() 2030 t.AssertNil(err) 2031 n, _ := r.RowsAffected() 2032 t.Assert(n, 1) 2033 2034 _, err = db.Model(table).OmitEmptyData().Data(g.Map{"nickname": ""}).Where("id", 2).Update() 2035 t.AssertNE(err, nil) 2036 2037 r, err = db.Model(table).OmitEmpty().Data(g.Map{"nickname": "", "password": "123"}).Where("id", 3).Update() 2038 t.AssertNil(err) 2039 n, _ = r.RowsAffected() 2040 t.Assert(n, 1) 2041 2042 _, err = db.Model(table).OmitEmpty().Fields("nickname").Data(g.Map{"nickname": "", "password": "123"}).Where("id", 4).Update() 2043 t.AssertNE(err, nil) 2044 2045 r, err = db.Model(table).OmitEmpty(). 2046 Fields("password").Data(g.Map{ 2047 "nickname": "", 2048 "passport": "123", 2049 "password": "456", 2050 }).Where("id", 5).Update() 2051 t.AssertNil(err) 2052 n, _ = r.RowsAffected() 2053 t.Assert(n, 1) 2054 2055 one, err := db.Model(table).Where("id", 5).One() 2056 t.AssertNil(err) 2057 t.Assert(one["password"], "456") 2058 t.AssertNE(one["passport"].String(), "") 2059 t.AssertNE(one["passport"].String(), "123") 2060 }) 2061 } 2062 2063 func Test_Model_Option_List(t *testing.T) { 2064 gtest.C(t, func(t *gtest.T) { 2065 table := createTable() 2066 defer dropTable(table) 2067 r, err := db.Model(table).Fields("id, password").Data(g.List{ 2068 g.Map{ 2069 "id": 1, 2070 "passport": "1", 2071 "password": "1", 2072 "nickname": "1", 2073 }, 2074 g.Map{ 2075 "id": 2, 2076 "passport": "2", 2077 "password": "2", 2078 "nickname": "2", 2079 }, 2080 }).Save() 2081 t.AssertNil(err) 2082 n, _ := r.RowsAffected() 2083 t.Assert(n, 2) 2084 list, err := db.Model(table).Order("id asc").All() 2085 t.AssertNil(err) 2086 t.Assert(len(list), 2) 2087 t.Assert(list[0]["id"].String(), "1") 2088 t.Assert(list[0]["nickname"].String(), "") 2089 t.Assert(list[0]["passport"].String(), "") 2090 t.Assert(list[0]["password"].String(), "1") 2091 2092 t.Assert(list[1]["id"].String(), "2") 2093 t.Assert(list[1]["nickname"].String(), "") 2094 t.Assert(list[1]["passport"].String(), "") 2095 t.Assert(list[1]["password"].String(), "2") 2096 }) 2097 2098 gtest.C(t, func(t *gtest.T) { 2099 table := createTable() 2100 defer dropTable(table) 2101 r, err := db.Model(table).OmitEmpty().Fields("id, password").Data(g.List{ 2102 g.Map{ 2103 "id": 1, 2104 "passport": "1", 2105 "password": 0, 2106 "nickname": "1", 2107 }, 2108 g.Map{ 2109 "id": 2, 2110 "passport": "2", 2111 "password": "2", 2112 "nickname": "2", 2113 }, 2114 }).Save() 2115 t.AssertNil(err) 2116 n, _ := r.RowsAffected() 2117 t.Assert(n, 2) 2118 list, err := db.Model(table).Order("id asc").All() 2119 t.AssertNil(err) 2120 t.Assert(len(list), 2) 2121 t.Assert(list[0]["id"].String(), "1") 2122 t.Assert(list[0]["nickname"].String(), "") 2123 t.Assert(list[0]["passport"].String(), "") 2124 t.Assert(list[0]["password"].String(), "0") 2125 2126 t.Assert(list[1]["id"].String(), "2") 2127 t.Assert(list[1]["nickname"].String(), "") 2128 t.Assert(list[1]["passport"].String(), "") 2129 t.Assert(list[1]["password"].String(), "2") 2130 2131 }) 2132 } 2133 2134 func Test_Model_OmitEmpty(t *testing.T) { 2135 table := fmt.Sprintf(`table_%s`, gtime.TimestampNanoStr()) 2136 if _, err := db.Exec(fmt.Sprintf(` 2137 CREATE TABLE IF NOT EXISTS %s ( 2138 id int(10) unsigned NOT NULL AUTO_INCREMENT, 2139 name varchar(45) NOT NULL, 2140 PRIMARY KEY (id) 2141 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2142 `, table)); err != nil { 2143 gtest.Error(err) 2144 } 2145 defer dropTable(table) 2146 2147 gtest.C(t, func(t *gtest.T) { 2148 _, err := db.Model(table).OmitEmpty().Data(g.Map{ 2149 "id": 1, 2150 "name": "", 2151 }).Save() 2152 t.AssertNE(err, nil) 2153 }) 2154 gtest.C(t, func(t *gtest.T) { 2155 _, err := db.Model(table).OmitEmptyData().Data(g.Map{ 2156 "id": 1, 2157 "name": "", 2158 }).Save() 2159 t.AssertNE(err, nil) 2160 }) 2161 gtest.C(t, func(t *gtest.T) { 2162 _, err := db.Model(table).OmitEmptyWhere().Data(g.Map{ 2163 "id": 1, 2164 "name": "", 2165 }).Save() 2166 t.Assert(err, nil) 2167 }) 2168 } 2169 2170 func Test_Model_OmitNil(t *testing.T) { 2171 table := fmt.Sprintf(`table_%s`, gtime.TimestampNanoStr()) 2172 if _, err := db.Exec(fmt.Sprintf(` 2173 CREATE TABLE IF NOT EXISTS %s ( 2174 id int(10) unsigned NOT NULL AUTO_INCREMENT, 2175 name varchar(45) NOT NULL, 2176 PRIMARY KEY (id) 2177 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 2178 `, table)); err != nil { 2179 gtest.Error(err) 2180 } 2181 defer dropTable(table) 2182 2183 gtest.C(t, func(t *gtest.T) { 2184 _, err := db.Model(table).OmitNil().Data(g.Map{ 2185 "id": 1, 2186 "name": nil, 2187 }).Save() 2188 t.AssertNE(err, nil) 2189 }) 2190 gtest.C(t, func(t *gtest.T) { 2191 _, err := db.Model(table).OmitNil().Data(g.Map{ 2192 "id": 1, 2193 "name": "", 2194 }).Save() 2195 t.Assert(err, nil) 2196 }) 2197 gtest.C(t, func(t *gtest.T) { 2198 _, err := db.Model(table).OmitNilWhere().Data(g.Map{ 2199 "id": 1, 2200 "name": "", 2201 }).Save() 2202 t.Assert(err, nil) 2203 }) 2204 } 2205 2206 func Test_Model_Option_Where(t *testing.T) { 2207 gtest.C(t, func(t *gtest.T) { 2208 table := createInitTable() 2209 defer dropTable(table) 2210 r, err := db.Model(table).OmitEmpty().Data("nickname", 1).Where(g.Map{"id": 0, "passport": ""}).And(1).Update() 2211 t.AssertNil(err) 2212 n, _ := r.RowsAffected() 2213 t.Assert(n, TableSize) 2214 }) 2215 gtest.C(t, func(t *gtest.T) { 2216 table := createInitTable() 2217 defer dropTable(table) 2218 r, err := db.Model(table).OmitEmpty().Data("nickname", 1).Where(g.Map{"id": 1, "passport": ""}).Update() 2219 t.AssertNil(err) 2220 n, _ := r.RowsAffected() 2221 t.Assert(n, 1) 2222 2223 v, err := db.Model(table).Where("id", 1).Fields("nickname").Value() 2224 t.AssertNil(err) 2225 t.Assert(v.String(), "1") 2226 }) 2227 } 2228 2229 func Test_Model_Where_MultiSliceArguments(t *testing.T) { 2230 table := createInitTable() 2231 defer dropTable(table) 2232 gtest.C(t, func(t *gtest.T) { 2233 r, err := db.Model(table).Where(g.Map{ 2234 "id": g.Slice{1, 2, 3, 4}, 2235 "passport": g.Slice{"user_2", "user_3", "user_4"}, 2236 "nickname": g.Slice{"name_2", "name_4"}, 2237 "id >= 4": nil, 2238 }).All() 2239 t.AssertNil(err) 2240 t.Assert(len(r), 1) 2241 t.Assert(r[0]["id"], 4) 2242 }) 2243 2244 gtest.C(t, func(t *gtest.T) { 2245 result, err := db.Model(table).Where(g.Map{ 2246 "id": g.Slice{1, 2, 3}, 2247 "passport": g.Slice{"user_2", "user_3"}, 2248 }).Or("nickname=?", g.Slice{"name_4"}).And("id", 3).One() 2249 t.AssertNil(err) 2250 t.AssertGT(len(result), 0) 2251 t.Assert(result["id"].Int(), 2) 2252 }) 2253 } 2254 2255 func Test_Model_FieldsEx(t *testing.T) { 2256 table := createInitTable() 2257 defer dropTable(table) 2258 // Select. 2259 gtest.C(t, func(t *gtest.T) { 2260 r, err := db.Model(table).FieldsEx("create_time, id").Where("id in (?)", g.Slice{1, 2}).Order("id asc").All() 2261 t.AssertNil(err) 2262 t.Assert(len(r), 2) 2263 t.Assert(len(r[0]), 3) 2264 t.Assert(r[0]["id"], "") 2265 t.Assert(r[0]["passport"], "user_1") 2266 t.Assert(r[0]["password"], "pass_1") 2267 t.Assert(r[0]["nickname"], "name_1") 2268 t.Assert(r[0]["create_time"], "") 2269 t.Assert(r[1]["id"], "") 2270 t.Assert(r[1]["passport"], "user_2") 2271 t.Assert(r[1]["password"], "pass_2") 2272 t.Assert(r[1]["nickname"], "name_2") 2273 t.Assert(r[1]["create_time"], "") 2274 }) 2275 // Update. 2276 gtest.C(t, func(t *gtest.T) { 2277 r, err := db.Model(table).FieldsEx("password").Data(g.Map{"nickname": "123", "password": "456"}).Where("id", 3).Update() 2278 t.AssertNil(err) 2279 n, _ := r.RowsAffected() 2280 t.Assert(n, 1) 2281 2282 one, err := db.Model(table).Where("id", 3).One() 2283 t.AssertNil(err) 2284 t.Assert(one["nickname"], "123") 2285 t.AssertNE(one["password"], "456") 2286 }) 2287 } 2288 2289 func Test_Model_FieldsEx_WithReservedWords(t *testing.T) { 2290 table := "fieldsex_test_table" 2291 sqlTpcPath := gdebug.TestDataPath("reservedwords_table_tpl.sql") 2292 if _, err := db.Exec(fmt.Sprintf(gfile.GetContents(sqlTpcPath), table)); err != nil { 2293 gtest.Error(err) 2294 } 2295 defer dropTable(table) 2296 gtest.C(t, func(t *gtest.T) { 2297 _, err := db.Model(table).FieldsEx("content").One() 2298 t.AssertNil(err) 2299 }) 2300 } 2301 2302 func Test_Model_FieldsStr(t *testing.T) { 2303 table := createTable() 2304 defer dropTable(table) 2305 2306 gtest.C(t, func(t *gtest.T) { 2307 t.Assert(db.Model(table).FieldsStr(), "`id`,`passport`,`password`,`nickname`,`create_time`") 2308 t.Assert(db.Model(table).FieldsStr("a."), "`a`.`id`,`a`.`passport`,`a`.`password`,`a`.`nickname`,`a`.`create_time`") 2309 }) 2310 } 2311 2312 func Test_Model_FieldsExStr(t *testing.T) { 2313 table := createTable() 2314 defer dropTable(table) 2315 2316 gtest.C(t, func(t *gtest.T) { 2317 t.Assert(db.Model(table).FieldsExStr("create_time,nickname"), "`id`,`passport`,`password`") 2318 t.Assert(db.Model(table).FieldsExStr("create_time,nickname", "a."), "`a`.`id`,`a`.`passport`,`a`.`password`") 2319 }) 2320 } 2321 2322 func Test_Model_Prefix(t *testing.T) { 2323 db := dbPrefix 2324 table := fmt.Sprintf(`%s_%d`, TableName, gtime.TimestampNano()) 2325 createInitTableWithDb(db, TableNamePrefix1+table) 2326 defer dropTable(TableNamePrefix1 + table) 2327 // Select. 2328 gtest.C(t, func(t *gtest.T) { 2329 r, err := db.Model(table).Where("id in (?)", g.Slice{1, 2}).Order("id asc").All() 2330 t.AssertNil(err) 2331 t.Assert(len(r), 2) 2332 t.Assert(r[0]["id"], "1") 2333 t.Assert(r[1]["id"], "2") 2334 }) 2335 // Select with alias. 2336 gtest.C(t, func(t *gtest.T) { 2337 r, err := db.Model(table+" as u").Where("u.id in (?)", g.Slice{1, 2}).Order("u.id asc").All() 2338 t.AssertNil(err) 2339 t.Assert(len(r), 2) 2340 t.Assert(r[0]["id"], "1") 2341 t.Assert(r[1]["id"], "2") 2342 }) 2343 // Select with alias to struct. 2344 gtest.C(t, func(t *gtest.T) { 2345 type User struct { 2346 Id int 2347 Passport string 2348 Password string 2349 NickName string 2350 } 2351 var users []User 2352 err := db.Model(table+" u").Where("u.id in (?)", g.Slice{1, 5}).Order("u.id asc").Scan(&users) 2353 t.AssertNil(err) 2354 t.Assert(len(users), 2) 2355 t.Assert(users[0].Id, 1) 2356 t.Assert(users[1].Id, 5) 2357 }) 2358 // Select with alias and join statement. 2359 gtest.C(t, func(t *gtest.T) { 2360 r, err := db.Model(table+" as u1").LeftJoin(table+" as u2", "u2.id=u1.id").Where("u1.id in (?)", g.Slice{1, 2}).Order("u1.id asc").All() 2361 t.AssertNil(err) 2362 t.Assert(len(r), 2) 2363 t.Assert(r[0]["id"], "1") 2364 t.Assert(r[1]["id"], "2") 2365 }) 2366 gtest.C(t, func(t *gtest.T) { 2367 r, err := db.Model(table).As("u1").LeftJoin(table+" as u2", "u2.id=u1.id").Where("u1.id in (?)", g.Slice{1, 2}).Order("u1.id asc").All() 2368 t.AssertNil(err) 2369 t.Assert(len(r), 2) 2370 t.Assert(r[0]["id"], "1") 2371 t.Assert(r[1]["id"], "2") 2372 }) 2373 } 2374 2375 func Test_Model_Schema1(t *testing.T) { 2376 //db.SetDebug(true) 2377 2378 db.SetSchema(TestSchema1) 2379 table := fmt.Sprintf(`%s_%s`, TableName, gtime.TimestampNanoStr()) 2380 createInitTableWithDb(db, table) 2381 db.SetSchema(TestSchema2) 2382 createInitTableWithDb(db, table) 2383 defer func() { 2384 db.SetSchema(TestSchema1) 2385 dropTableWithDb(db, table) 2386 db.SetSchema(TestSchema2) 2387 dropTableWithDb(db, table) 2388 2389 db.SetSchema(TestSchema1) 2390 }() 2391 // Method. 2392 gtest.C(t, func(t *gtest.T) { 2393 db.SetSchema(TestSchema1) 2394 r, err := db.Model(table).Update(g.Map{"nickname": "name_100"}, "id=1") 2395 t.AssertNil(err) 2396 n, _ := r.RowsAffected() 2397 t.Assert(n, 1) 2398 2399 v, err := db.Model(table).Value("nickname", "id=1") 2400 t.AssertNil(err) 2401 t.Assert(v.String(), "name_100") 2402 2403 db.SetSchema(TestSchema2) 2404 v, err = db.Model(table).Value("nickname", "id=1") 2405 t.AssertNil(err) 2406 t.Assert(v.String(), "name_1") 2407 }) 2408 // Model. 2409 gtest.C(t, func(t *gtest.T) { 2410 v, err := db.Model(table).Schema(TestSchema1).Value("nickname", "id=2") 2411 t.AssertNil(err) 2412 t.Assert(v.String(), "name_2") 2413 2414 r, err := db.Model(table).Schema(TestSchema1).Update(g.Map{"nickname": "name_200"}, "id=2") 2415 t.AssertNil(err) 2416 n, _ := r.RowsAffected() 2417 t.Assert(n, 1) 2418 2419 v, err = db.Model(table).Schema(TestSchema1).Value("nickname", "id=2") 2420 t.AssertNil(err) 2421 t.Assert(v.String(), "name_200") 2422 2423 v, err = db.Model(table).Schema(TestSchema2).Value("nickname", "id=2") 2424 t.AssertNil(err) 2425 t.Assert(v.String(), "name_2") 2426 2427 v, err = db.Model(table).Schema(TestSchema1).Value("nickname", "id=2") 2428 t.AssertNil(err) 2429 t.Assert(v.String(), "name_200") 2430 }) 2431 // Model. 2432 gtest.C(t, func(t *gtest.T) { 2433 i := 1000 2434 _, err := db.Model(table).Schema(TestSchema1).Insert(g.Map{ 2435 "id": i, 2436 "passport": fmt.Sprintf(`user_%d`, i), 2437 "password": fmt.Sprintf(`pass_%d`, i), 2438 "nickname": fmt.Sprintf(`name_%d`, i), 2439 "create_time": gtime.NewFromStr("2018-10-24 10:00:00").String(), 2440 "none-exist-field": 1, 2441 }) 2442 t.AssertNil(err) 2443 2444 v, err := db.Model(table).Schema(TestSchema1).Value("nickname", "id=?", i) 2445 t.AssertNil(err) 2446 t.Assert(v.String(), "name_1000") 2447 2448 v, err = db.Model(table).Schema(TestSchema2).Value("nickname", "id=?", i) 2449 t.AssertNil(err) 2450 t.Assert(v.String(), "") 2451 }) 2452 } 2453 2454 func Test_Model_Schema2(t *testing.T) { 2455 //db.SetDebug(true) 2456 2457 db.SetSchema(TestSchema1) 2458 table := fmt.Sprintf(`%s_%s`, TableName, gtime.TimestampNanoStr()) 2459 createInitTableWithDb(db, table) 2460 db.SetSchema(TestSchema2) 2461 createInitTableWithDb(db, table) 2462 defer func() { 2463 db.SetSchema(TestSchema1) 2464 dropTableWithDb(db, table) 2465 db.SetSchema(TestSchema2) 2466 dropTableWithDb(db, table) 2467 2468 db.SetSchema(TestSchema1) 2469 }() 2470 // Schema. 2471 gtest.C(t, func(t *gtest.T) { 2472 v, err := db.Schema(TestSchema1).Table(table).Value("nickname", "id=2") 2473 t.AssertNil(err) 2474 t.Assert(v.String(), "name_2") 2475 2476 r, err := db.Schema(TestSchema1).Table(table).Update(g.Map{"nickname": "name_200"}, "id=2") 2477 t.AssertNil(err) 2478 n, _ := r.RowsAffected() 2479 t.Assert(n, 1) 2480 2481 v, err = db.Schema(TestSchema1).Table(table).Value("nickname", "id=2") 2482 t.AssertNil(err) 2483 t.Assert(v.String(), "name_200") 2484 2485 v, err = db.Schema(TestSchema2).Table(table).Value("nickname", "id=2") 2486 t.AssertNil(err) 2487 t.Assert(v.String(), "name_2") 2488 2489 v, err = db.Schema(TestSchema1).Table(table).Value("nickname", "id=2") 2490 t.AssertNil(err) 2491 t.Assert(v.String(), "name_200") 2492 }) 2493 // Schema. 2494 gtest.C(t, func(t *gtest.T) { 2495 i := 1000 2496 _, err := db.Schema(TestSchema1).Table(table).Insert(g.Map{ 2497 "id": i, 2498 "passport": fmt.Sprintf(`user_%d`, i), 2499 "password": fmt.Sprintf(`pass_%d`, i), 2500 "nickname": fmt.Sprintf(`name_%d`, i), 2501 "create_time": gtime.NewFromStr("2018-10-24 10:00:00").String(), 2502 "none-exist-field": 1, 2503 }) 2504 t.AssertNil(err) 2505 2506 v, err := db.Schema(TestSchema1).Table(table).Value("nickname", "id=?", i) 2507 t.AssertNil(err) 2508 t.Assert(v.String(), "name_1000") 2509 2510 v, err = db.Schema(TestSchema2).Table(table).Value("nickname", "id=?", i) 2511 t.AssertNil(err) 2512 t.Assert(v.String(), "") 2513 }) 2514 } 2515 2516 func Test_Model_FieldsExStruct(t *testing.T) { 2517 table := createTable() 2518 defer dropTable(table) 2519 gtest.C(t, func(t *gtest.T) { 2520 type User struct { 2521 Id int `orm:"id" json:"id"` 2522 Passport string `orm:"password" json:"pass_port"` 2523 Password string `orm:"password" json:"password"` 2524 NickName string `orm:"nickname" json:"nick__name"` 2525 } 2526 user := &User{ 2527 Id: 1, 2528 Passport: "111", 2529 Password: "222", 2530 NickName: "333", 2531 } 2532 r, err := db.Model(table).FieldsEx("create_time, password").OmitEmpty().Data(user).Insert() 2533 t.AssertNil(err) 2534 n, err := r.RowsAffected() 2535 t.AssertNil(err) 2536 t.Assert(n, 1) 2537 }) 2538 gtest.C(t, func(t *gtest.T) { 2539 type User struct { 2540 Id int `orm:"id" json:"id"` 2541 Passport string `orm:"password" json:"pass_port"` 2542 Password string `orm:"password" json:"password"` 2543 NickName string `orm:"nickname" json:"nick__name"` 2544 } 2545 users := make([]*User, 0) 2546 for i := 100; i < 110; i++ { 2547 users = append(users, &User{ 2548 Id: i, 2549 Passport: fmt.Sprintf(`passport_%d`, i), 2550 Password: fmt.Sprintf(`password_%d`, i), 2551 NickName: fmt.Sprintf(`nickname_%d`, i), 2552 }) 2553 } 2554 r, err := db.Model(table).FieldsEx("create_time, password"). 2555 OmitEmpty(). 2556 Batch(2). 2557 Data(users). 2558 Insert() 2559 t.AssertNil(err) 2560 n, err := r.RowsAffected() 2561 t.AssertNil(err) 2562 t.Assert(n, 10) 2563 }) 2564 } 2565 2566 func Test_Model_OmitEmpty_Time(t *testing.T) { 2567 table := createInitTable() 2568 defer dropTable(table) 2569 gtest.C(t, func(t *gtest.T) { 2570 type User struct { 2571 Id int `orm:"id" json:"id"` 2572 Passport string `orm:"password" json:"pass_port"` 2573 Password string `orm:"password" json:"password"` 2574 Time time.Time `orm:"create_time" ` 2575 } 2576 user := &User{ 2577 Id: 1, 2578 Passport: "111", 2579 Password: "222", 2580 Time: time.Time{}, 2581 } 2582 r, err := db.Model(table).OmitEmpty().Data(user).WherePri(1).Update() 2583 t.AssertNil(err) 2584 n, err := r.RowsAffected() 2585 t.AssertNil(err) 2586 t.Assert(n, 1) 2587 }) 2588 } 2589 2590 func Test_Result_Chunk(t *testing.T) { 2591 table := createInitTable() 2592 defer dropTable(table) 2593 gtest.C(t, func(t *gtest.T) { 2594 r, err := db.Model(table).Order("id asc").All() 2595 t.AssertNil(err) 2596 chunks := r.Chunk(3) 2597 t.Assert(len(chunks), 4) 2598 t.Assert(chunks[0][0]["id"].Int(), 1) 2599 t.Assert(chunks[1][0]["id"].Int(), 4) 2600 t.Assert(chunks[2][0]["id"].Int(), 7) 2601 t.Assert(chunks[3][0]["id"].Int(), 10) 2602 }) 2603 } 2604 2605 func Test_Model_DryRun(t *testing.T) { 2606 table := createInitTable() 2607 defer dropTable(table) 2608 db.SetDryRun(true) 2609 defer db.SetDryRun(false) 2610 2611 gtest.C(t, func(t *gtest.T) { 2612 one, err := db.Model(table).FindOne(1) 2613 t.AssertNil(err) 2614 t.Assert(one["id"], 1) 2615 }) 2616 gtest.C(t, func(t *gtest.T) { 2617 r, err := db.Model(table).Data("passport", "port_1").WherePri(1).Update() 2618 t.AssertNil(err) 2619 n, err := r.RowsAffected() 2620 t.AssertNil(err) 2621 t.Assert(n, 0) 2622 }) 2623 } 2624 2625 func Test_Model_Join_SubQuery(t *testing.T) { 2626 table := createInitTable() 2627 defer dropTable(table) 2628 gtest.C(t, func(t *gtest.T) { 2629 subQuery := fmt.Sprintf("select * from `%s`", table) 2630 r, err := db.Model(table, "t1").Fields("t2.id").LeftJoin(subQuery, "t2", "t2.id=t1.id").Array() 2631 t.AssertNil(err) 2632 t.Assert(len(r), TableSize) 2633 t.Assert(r[0], "1") 2634 t.Assert(r[TableSize-1], TableSize) 2635 }) 2636 } 2637 2638 func Test_Model_Cache(t *testing.T) { 2639 table := createInitTable() 2640 defer dropTable(table) 2641 2642 gtest.C(t, func(t *gtest.T) { 2643 one, err := db.Model(table).Cache(time.Second, "test1").FindOne(1) 2644 t.AssertNil(err) 2645 t.Assert(one["passport"], "user_1") 2646 2647 r, err := db.Model(table).Data("passport", "user_100").WherePri(1).Update() 2648 t.AssertNil(err) 2649 n, err := r.RowsAffected() 2650 t.AssertNil(err) 2651 t.Assert(n, 1) 2652 2653 one, err = db.Model(table).Cache(time.Second, "test1").FindOne(1) 2654 t.AssertNil(err) 2655 t.Assert(one["passport"], "user_1") 2656 2657 time.Sleep(time.Second * 2) 2658 2659 one, err = db.Model(table).Cache(time.Second, "test1").FindOne(1) 2660 t.AssertNil(err) 2661 t.Assert(one["passport"], "user_100") 2662 }) 2663 gtest.C(t, func(t *gtest.T) { 2664 one, err := db.Model(table).Cache(time.Second, "test2").FindOne(2) 2665 t.AssertNil(err) 2666 t.Assert(one["passport"], "user_2") 2667 2668 r, err := db.Model(table).Data("passport", "user_200").Cache(-1, "test2").WherePri(2).Update() 2669 t.AssertNil(err) 2670 n, err := r.RowsAffected() 2671 t.AssertNil(err) 2672 t.Assert(n, 1) 2673 2674 one, err = db.Model(table).Cache(time.Second, "test2").FindOne(2) 2675 t.AssertNil(err) 2676 t.Assert(one["passport"], "user_200") 2677 }) 2678 // transaction. 2679 gtest.C(t, func(t *gtest.T) { 2680 // make cache for id 3 2681 one, err := db.Model(table).Cache(time.Second, "test3").FindOne(3) 2682 t.AssertNil(err) 2683 t.Assert(one["passport"], "user_3") 2684 2685 r, err := db.Model(table).Data("passport", "user_300").Cache(time.Second, "test3").WherePri(3).Update() 2686 t.AssertNil(err) 2687 n, err := r.RowsAffected() 2688 t.AssertNil(err) 2689 t.Assert(n, 1) 2690 2691 err = db.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error { 2692 one, err := tx.Model(table).Cache(time.Second, "test3").FindOne(3) 2693 t.AssertNil(err) 2694 t.Assert(one["passport"], "user_300") 2695 return nil 2696 }) 2697 t.AssertNil(err) 2698 2699 one, err = db.Model(table).Cache(time.Second, "test3").FindOne(3) 2700 t.AssertNil(err) 2701 t.Assert(one["passport"], "user_3") 2702 }) 2703 gtest.C(t, func(t *gtest.T) { 2704 // make cache for id 4 2705 one, err := db.Model(table).Cache(time.Second, "test4").FindOne(4) 2706 t.AssertNil(err) 2707 t.Assert(one["passport"], "user_4") 2708 2709 r, err := db.Model(table).Data("passport", "user_400").Cache(time.Second, "test3").WherePri(4).Update() 2710 t.AssertNil(err) 2711 n, err := r.RowsAffected() 2712 t.AssertNil(err) 2713 t.Assert(n, 1) 2714 2715 err = db.Transaction(context.TODO(), func(ctx context.Context, tx *gdb.TX) error { 2716 // Cache feature disabled. 2717 one, err := tx.Model(table).Cache(time.Second, "test4").FindOne(4) 2718 t.AssertNil(err) 2719 t.Assert(one["passport"], "user_400") 2720 // Update the cache. 2721 r, err := tx.Model(table).Data("passport", "user_4000"). 2722 Cache(-1, "test4").WherePri(4).Update() 2723 t.AssertNil(err) 2724 n, err := r.RowsAffected() 2725 t.AssertNil(err) 2726 t.Assert(n, 1) 2727 return nil 2728 }) 2729 t.AssertNil(err) 2730 // Read from db. 2731 one, err = db.Model(table).Cache(time.Second, "test4").FindOne(4) 2732 t.AssertNil(err) 2733 t.Assert(one["passport"], "user_4000") 2734 }) 2735 } 2736 2737 func Test_Model_Having(t *testing.T) { 2738 table := createInitTable() 2739 defer dropTable(table) 2740 2741 gtest.C(t, func(t *gtest.T) { 2742 all, err := db.Model(table).Where("id > 1").Having("id > 8").All() 2743 t.AssertNil(err) 2744 t.Assert(len(all), 2) 2745 }) 2746 gtest.C(t, func(t *gtest.T) { 2747 all, err := db.Model(table).Where("id > 1").Having("id > ?", 8).All() 2748 t.AssertNil(err) 2749 t.Assert(len(all), 2) 2750 }) 2751 gtest.C(t, func(t *gtest.T) { 2752 all, err := db.Model(table).Where("id > ?", 1).Having("id > ?", 8).All() 2753 t.AssertNil(err) 2754 t.Assert(len(all), 2) 2755 }) 2756 gtest.C(t, func(t *gtest.T) { 2757 all, err := db.Model(table).Where("id > ?", 1).Having("id", 8).All() 2758 t.AssertNil(err) 2759 t.Assert(len(all), 1) 2760 }) 2761 } 2762 2763 func Test_Model_Distinct(t *testing.T) { 2764 table := createInitTable() 2765 defer dropTable(table) 2766 2767 gtest.C(t, func(t *gtest.T) { 2768 all, err := db.Model(table, "t").Fields("distinct t.id").Where("id > 1").Having("id > 8").All() 2769 t.AssertNil(err) 2770 t.Assert(len(all), 2) 2771 }) 2772 gtest.C(t, func(t *gtest.T) { 2773 count, err := db.Model(table).Where("id > 1").Distinct().Count() 2774 t.AssertNil(err) 2775 t.Assert(count, 9) 2776 }) 2777 } 2778 2779 func Test_Model_Min_Max(t *testing.T) { 2780 table := createInitTable() 2781 defer dropTable(table) 2782 2783 gtest.C(t, func(t *gtest.T) { 2784 value, err := db.Model(table, "t").Fields("min(t.id)").Where("id > 1").Value() 2785 t.AssertNil(err) 2786 t.Assert(value.Int(), 2) 2787 }) 2788 gtest.C(t, func(t *gtest.T) { 2789 value, err := db.Model(table, "t").Fields("max(t.id)").Where("id > 1").Value() 2790 t.AssertNil(err) 2791 t.Assert(value.Int(), 10) 2792 }) 2793 } 2794 2795 func Test_Model_Fields_AutoMapping(t *testing.T) { 2796 table := createInitTable() 2797 defer dropTable(table) 2798 2799 gtest.C(t, func(t *gtest.T) { 2800 value, err := db.Model(table).Fields("ID").Where("id", 2).Value() 2801 t.AssertNil(err) 2802 t.Assert(value.Int(), 2) 2803 }) 2804 2805 gtest.C(t, func(t *gtest.T) { 2806 value, err := db.Model(table).Fields("NICK_NAME").Where("id", 2).Value() 2807 t.AssertNil(err) 2808 t.Assert(value.String(), "name_2") 2809 }) 2810 // Map 2811 gtest.C(t, func(t *gtest.T) { 2812 one, err := db.Model(table).Fields(g.Map{ 2813 "ID": 1, 2814 "NICK_NAME": 1, 2815 }).Where("id", 2).One() 2816 t.AssertNil(err) 2817 t.Assert(len(one), 2) 2818 t.Assert(one["id"], 2) 2819 t.Assert(one["nickname"], "name_2") 2820 }) 2821 // Struct 2822 gtest.C(t, func(t *gtest.T) { 2823 type T struct { 2824 ID int 2825 NICKNAME int 2826 } 2827 one, err := db.Model(table).Fields(&T{ 2828 ID: 0, 2829 NICKNAME: 0, 2830 }).Where("id", 2).One() 2831 t.AssertNil(err) 2832 t.Assert(len(one), 2) 2833 t.Assert(one["id"], 2) 2834 t.Assert(one["nickname"], "name_2") 2835 }) 2836 } 2837 2838 func Test_Model_FieldsEx_AutoMapping(t *testing.T) { 2839 table := createInitTable() 2840 defer dropTable(table) 2841 2842 // "id": i, 2843 // "passport": fmt.Sprintf(`user_%d`, i), 2844 // "password": fmt.Sprintf(`pass_%d`, i), 2845 // "nickname": fmt.Sprintf(`name_%d`, i), 2846 // "create_time": gtime.NewFromStr("2018-10-24 10:00:00").String(), 2847 2848 gtest.C(t, func(t *gtest.T) { 2849 value, err := db.Model(table).FieldsEx("Passport, Password, NickName, CreateTime").Where("id", 2).Value() 2850 t.AssertNil(err) 2851 t.Assert(value.Int(), 2) 2852 }) 2853 2854 gtest.C(t, func(t *gtest.T) { 2855 value, err := db.Model(table).FieldsEx("ID, Passport, Password, CreateTime").Where("id", 2).Value() 2856 t.AssertNil(err) 2857 t.Assert(value.String(), "name_2") 2858 }) 2859 // Map 2860 gtest.C(t, func(t *gtest.T) { 2861 one, err := db.Model(table).FieldsEx(g.Map{ 2862 "Passport": 1, 2863 "Password": 1, 2864 "CreateTime": 1, 2865 }).Where("id", 2).One() 2866 t.AssertNil(err) 2867 t.Assert(len(one), 2) 2868 t.Assert(one["id"], 2) 2869 t.Assert(one["nickname"], "name_2") 2870 }) 2871 // Struct 2872 gtest.C(t, func(t *gtest.T) { 2873 type T struct { 2874 Passport int 2875 Password int 2876 CreateTime int 2877 } 2878 one, err := db.Model(table).FieldsEx(&T{ 2879 Passport: 0, 2880 Password: 0, 2881 CreateTime: 0, 2882 }).Where("id", 2).One() 2883 t.AssertNil(err) 2884 t.Assert(len(one), 2) 2885 t.Assert(one["id"], 2) 2886 t.Assert(one["nickname"], "name_2") 2887 }) 2888 } 2889 2890 func Test_Model_Fields_Struct(t *testing.T) { 2891 table := createInitTable() 2892 defer dropTable(table) 2893 2894 type A struct { 2895 Passport string 2896 Password string 2897 } 2898 type B struct { 2899 A 2900 NickName string 2901 } 2902 gtest.C(t, func(t *gtest.T) { 2903 one, err := db.Model(table).Fields(A{}).Where("id", 2).One() 2904 t.AssertNil(err) 2905 t.Assert(len(one), 2) 2906 t.Assert(one["passport"], "user_2") 2907 t.Assert(one["password"], "pass_2") 2908 }) 2909 gtest.C(t, func(t *gtest.T) { 2910 one, err := db.Model(table).Fields(&A{}).Where("id", 2).One() 2911 t.AssertNil(err) 2912 t.Assert(len(one), 2) 2913 t.Assert(one["passport"], "user_2") 2914 t.Assert(one["password"], "pass_2") 2915 }) 2916 gtest.C(t, func(t *gtest.T) { 2917 one, err := db.Model(table).Fields(B{}).Where("id", 2).One() 2918 t.AssertNil(err) 2919 t.Assert(len(one), 3) 2920 t.Assert(one["passport"], "user_2") 2921 t.Assert(one["password"], "pass_2") 2922 t.Assert(one["nickname"], "name_2") 2923 }) 2924 gtest.C(t, func(t *gtest.T) { 2925 one, err := db.Model(table).Fields(&B{}).Where("id", 2).One() 2926 t.AssertNil(err) 2927 t.Assert(len(one), 3) 2928 t.Assert(one["passport"], "user_2") 2929 t.Assert(one["password"], "pass_2") 2930 t.Assert(one["nickname"], "name_2") 2931 }) 2932 } 2933 func Test_Model_NullField(t *testing.T) { 2934 table := createTable() 2935 defer dropTable(table) 2936 2937 gtest.C(t, func(t *gtest.T) { 2938 type User struct { 2939 Id int 2940 Passport *string 2941 } 2942 data := g.Map{ 2943 "id": 1, 2944 "passport": nil, 2945 } 2946 result, err := db.Model(table).Data(data).Insert() 2947 t.AssertNil(err) 2948 n, _ := result.RowsAffected() 2949 t.Assert(n, 1) 2950 one, err := db.Model(table).FindOne(1) 2951 t.AssertNil(err) 2952 2953 var user *User 2954 err = one.Struct(&user) 2955 t.AssertNil(err) 2956 t.Assert(user.Id, data["id"]) 2957 t.Assert(user.Passport, data["passport"]) 2958 }) 2959 } 2960 2961 func Test_Model_Empty_Slice_Argument(t *testing.T) { 2962 table := createInitTable() 2963 defer dropTable(table) 2964 gtest.C(t, func(t *gtest.T) { 2965 result, err := db.Model(table).Where(`id`, g.Slice{}).All() 2966 t.AssertNil(err) 2967 t.Assert(len(result), 0) 2968 }) 2969 gtest.C(t, func(t *gtest.T) { 2970 result, err := db.Model(table).Where(`id in(?)`, g.Slice{}).All() 2971 t.AssertNil(err) 2972 t.Assert(len(result), 0) 2973 }) 2974 } 2975 2976 func Test_Model_HasTable(t *testing.T) { 2977 table := createTable() 2978 defer dropTable(table) 2979 2980 gtest.C(t, func(t *gtest.T) { 2981 result, err := db.GetCore().HasTable(table) 2982 t.Assert(result, true) 2983 t.AssertNil(err) 2984 }) 2985 2986 gtest.C(t, func(t *gtest.T) { 2987 result, err := db.GetCore().HasTable("table12321") 2988 t.Assert(result, false) 2989 t.AssertNil(err) 2990 }) 2991 } 2992 2993 func Test_Model_HasField(t *testing.T) { 2994 table := createTable() 2995 defer dropTable(table) 2996 2997 gtest.C(t, func(t *gtest.T) { 2998 result, err := db.Model(table).HasField("id") 2999 t.Assert(result, true) 3000 t.AssertNil(err) 3001 }) 3002 3003 gtest.C(t, func(t *gtest.T) { 3004 result, err := db.Model(table).HasField("id123") 3005 t.Assert(result, false) 3006 t.AssertNil(err) 3007 }) 3008 } 3009 3010 // Issue: https://github.com/gogf/gf/issues/1002 3011 func Test_Model_Issue1002(t *testing.T) { 3012 table := createTable() 3013 defer dropTable(table) 3014 3015 result, err := db.Model(table).Data(g.Map{ 3016 "id": 1, 3017 "passport": "port_1", 3018 "password": "pass_1", 3019 "nickname": "name_2", 3020 "create_time": "2020-10-27 19:03:33", 3021 }).Insert() 3022 gtest.AssertNil(err) 3023 n, _ := result.RowsAffected() 3024 gtest.Assert(n, 1) 3025 3026 // where + string. 3027 gtest.C(t, func(t *gtest.T) { 3028 v, err := db.Model(table).Fields("id").Where("create_time>'2020-10-27 19:03:32' and create_time<'2020-10-27 19:03:34'").Value() 3029 t.AssertNil(err) 3030 t.Assert(v.Int(), 1) 3031 }) 3032 gtest.C(t, func(t *gtest.T) { 3033 v, err := db.Model(table).Fields("id").Where("create_time>'2020-10-27 19:03:32' and create_time<'2020-10-27 19:03:34'").FindValue() 3034 t.AssertNil(err) 3035 t.Assert(v.Int(), 1) 3036 }) 3037 gtest.C(t, func(t *gtest.T) { 3038 v, err := db.Model(table).Where("create_time>'2020-10-27 19:03:32' and create_time<'2020-10-27 19:03:34'").FindValue("id") 3039 t.AssertNil(err) 3040 t.Assert(v.Int(), 1) 3041 }) 3042 // where + string arguments. 3043 gtest.C(t, func(t *gtest.T) { 3044 v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", "2020-10-27 19:03:32", "2020-10-27 19:03:34").Value() 3045 t.AssertNil(err) 3046 t.Assert(v.Int(), 1) 3047 }) 3048 gtest.C(t, func(t *gtest.T) { 3049 v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", "2020-10-27 19:03:32", "2020-10-27 19:03:34").FindValue() 3050 t.AssertNil(err) 3051 t.Assert(v.Int(), 1) 3052 }) 3053 gtest.C(t, func(t *gtest.T) { 3054 v, err := db.Model(table).Where("create_time>? and create_time<?", "2020-10-27 19:03:32", "2020-10-27 19:03:34").FindValue("id") 3055 t.AssertNil(err) 3056 t.Assert(v.Int(), 1) 3057 }) 3058 // where + gtime.Time arguments. 3059 gtest.C(t, func(t *gtest.T) { 3060 v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", gtime.New("2020-10-27 19:03:32"), gtime.New("2020-10-27 19:03:34")).Value() 3061 t.AssertNil(err) 3062 t.Assert(v.Int(), 1) 3063 }) 3064 gtest.C(t, func(t *gtest.T) { 3065 v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", gtime.New("2020-10-27 19:03:32"), gtime.New("2020-10-27 19:03:34")).FindValue() 3066 t.AssertNil(err) 3067 t.Assert(v.Int(), 1) 3068 }) 3069 gtest.C(t, func(t *gtest.T) { 3070 v, err := db.Model(table).Where("create_time>? and create_time<?", gtime.New("2020-10-27 19:03:32"), gtime.New("2020-10-27 19:03:34")).FindValue("id") 3071 t.AssertNil(err) 3072 t.Assert(v.Int(), 1) 3073 }) 3074 // where + time.Time arguments, UTC. 3075 gtest.C(t, func(t *gtest.T) { 3076 t1, _ := time.Parse("2006-01-02 15:04:05", "2020-10-27 19:03:32") 3077 t2, _ := time.Parse("2006-01-02 15:04:05", "2020-10-27 19:03:34") 3078 { 3079 v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", t1, t2).Value() 3080 t.AssertNil(err) 3081 t.Assert(v.Int(), 1) 3082 } 3083 { 3084 v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", t1, t2).FindValue() 3085 t.AssertNil(err) 3086 t.Assert(v.Int(), 1) 3087 } 3088 { 3089 v, err := db.Model(table).Where("create_time>? and create_time<?", t1, t2).FindValue("id") 3090 t.AssertNil(err) 3091 t.Assert(v.Int(), 1) 3092 } 3093 }) 3094 // where + time.Time arguments, +8. 3095 //gtest.C(t, func(t *gtest.T) { 3096 // // Change current timezone to +8 zone. 3097 // location, err := time.LoadLocation("Asia/Shanghai") 3098 // t.AssertNil(err) 3099 // t1, _ := time.ParseInLocation("2006-01-02 15:04:05", "2020-10-27 19:03:32", location) 3100 // t2, _ := time.ParseInLocation("2006-01-02 15:04:05", "2020-10-27 19:03:34", location) 3101 // { 3102 // v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", t1, t2).Value() 3103 // t.AssertNil(err) 3104 // t.Assert(v.Int(), 1) 3105 // } 3106 // { 3107 // v, err := db.Model(table).Fields("id").Where("create_time>? and create_time<?", t1, t2).FindValue() 3108 // t.AssertNil(err) 3109 // t.Assert(v.Int(), 1) 3110 // } 3111 // { 3112 // v, err := db.Model(table).Where("create_time>? and create_time<?", t1, t2).FindValue("id") 3113 // t.AssertNil(err) 3114 // t.Assert(v.Int(), 1) 3115 // } 3116 //}) 3117 } 3118 3119 func createTableForTimeZoneTest() string { 3120 tableName := "user_" + gtime.Now().TimestampNanoStr() 3121 if _, err := db.Exec(fmt.Sprintf(` 3122 CREATE TABLE %s ( 3123 id int(10) unsigned NOT NULL AUTO_INCREMENT, 3124 passport varchar(45) NULL, 3125 password char(32) NULL, 3126 nickname varchar(45) NULL, 3127 created_at timestamp NULL, 3128 updated_at timestamp NULL, 3129 deleted_at timestamp NULL, 3130 PRIMARY KEY (id) 3131 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 3132 `, tableName, 3133 )); err != nil { 3134 gtest.Fatal(err) 3135 } 3136 return tableName 3137 } 3138 3139 // https://github.com/gogf/gf/issues/1012 3140 func Test_TimeZoneInsert(t *testing.T) { 3141 tableName := createTableForTimeZoneTest() 3142 defer dropTable(tableName) 3143 3144 asiaLocal, err := time.LoadLocation("Asia/Shanghai") 3145 gtest.AssertNil(err) 3146 3147 CreateTime := "2020-11-22 12:23:45" 3148 UpdateTime := "2020-11-22 13:23:45" 3149 DeleteTime := "2020-11-22 14:23:45" 3150 type User struct { 3151 Id int `json:"id"` 3152 CreatedAt *gtime.Time `json:"created_at"` 3153 UpdatedAt gtime.Time `json:"updated_at"` 3154 DeletedAt time.Time `json:"deleted_at"` 3155 } 3156 t1, _ := time.ParseInLocation("2006-01-02 15:04:05", CreateTime, asiaLocal) 3157 t2, _ := time.ParseInLocation("2006-01-02 15:04:05", UpdateTime, asiaLocal) 3158 t3, _ := time.ParseInLocation("2006-01-02 15:04:05", DeleteTime, asiaLocal) 3159 u := &User{ 3160 Id: 1, 3161 CreatedAt: gtime.New(t1.UTC()), 3162 UpdatedAt: *gtime.New(t2.UTC()), 3163 DeletedAt: t3.UTC(), 3164 } 3165 3166 gtest.C(t, func(t *gtest.T) { 3167 _, _ = db.Model(tableName).Unscoped().Insert(u) 3168 userEntity := &User{} 3169 err := db.Model(tableName).Where("id", 1).Unscoped().Scan(&userEntity) 3170 t.AssertNil(err) 3171 t.Assert(userEntity.CreatedAt.String(), "2020-11-22 04:23:45") 3172 t.Assert(userEntity.UpdatedAt.String(), "2020-11-22 05:23:45") 3173 t.Assert(gtime.NewFromTime(userEntity.DeletedAt).String(), "2020-11-22 06:23:45") 3174 }) 3175 } 3176 3177 func Test_Model_Fields_Map_Struct(t *testing.T) { 3178 table := createInitTable() 3179 defer dropTable(table) 3180 // map 3181 gtest.C(t, func(t *gtest.T) { 3182 result, err := db.Model(table).Fields(g.Map{ 3183 "ID": 1, 3184 "PASSPORT": 1, 3185 "NONE_EXIST": 1, 3186 }).Where("id", 1).One() 3187 t.AssertNil(err) 3188 t.Assert(len(result), 2) 3189 t.Assert(result["id"], 1) 3190 t.Assert(result["passport"], "user_1") 3191 }) 3192 // struct 3193 gtest.C(t, func(t *gtest.T) { 3194 type A struct { 3195 ID int 3196 PASSPORT string 3197 XXX_TYPE int 3198 } 3199 var a = A{} 3200 err := db.Model(table).Fields(a).Where("id", 1).Scan(&a) 3201 t.AssertNil(err) 3202 t.Assert(a.ID, 1) 3203 t.Assert(a.PASSPORT, "user_1") 3204 t.Assert(a.XXX_TYPE, 0) 3205 }) 3206 // *struct 3207 gtest.C(t, func(t *gtest.T) { 3208 type A struct { 3209 ID int 3210 PASSPORT string 3211 XXX_TYPE int 3212 } 3213 var a *A 3214 err := db.Model(table).Fields(a).Where("id", 1).Scan(&a) 3215 t.AssertNil(err) 3216 t.Assert(a.ID, 1) 3217 t.Assert(a.PASSPORT, "user_1") 3218 t.Assert(a.XXX_TYPE, 0) 3219 }) 3220 // **struct 3221 gtest.C(t, func(t *gtest.T) { 3222 type A struct { 3223 ID int 3224 PASSPORT string 3225 XXX_TYPE int 3226 } 3227 var a *A 3228 err := db.Model(table).Fields(&a).Where("id", 1).Scan(&a) 3229 t.AssertNil(err) 3230 t.Assert(a.ID, 1) 3231 t.Assert(a.PASSPORT, "user_1") 3232 t.Assert(a.XXX_TYPE, 0) 3233 }) 3234 } 3235 3236 func Test_Model_WhereIn(t *testing.T) { 3237 table := createInitTable() 3238 defer dropTable(table) 3239 3240 gtest.C(t, func(t *gtest.T) { 3241 result, err := db.Model(table).WhereIn("id", g.Slice{1, 2, 3, 4}).WhereIn("id", g.Slice{3, 4, 5}).OrderAsc("id").All() 3242 t.AssertNil(err) 3243 t.Assert(len(result), 2) 3244 t.Assert(result[0]["id"], 3) 3245 t.Assert(result[1]["id"], 4) 3246 }) 3247 } 3248 3249 func Test_Model_WhereNotIn(t *testing.T) { 3250 table := createInitTable() 3251 defer dropTable(table) 3252 3253 gtest.C(t, func(t *gtest.T) { 3254 result, err := db.Model(table).WhereNotIn("id", g.Slice{1, 2, 3, 4}).WhereNotIn("id", g.Slice{3, 4, 5}).OrderAsc("id").All() 3255 t.AssertNil(err) 3256 t.Assert(len(result), 5) 3257 t.Assert(result[0]["id"], 6) 3258 t.Assert(result[1]["id"], 7) 3259 }) 3260 } 3261 3262 func Test_Model_WhereOrIn(t *testing.T) { 3263 table := createInitTable() 3264 defer dropTable(table) 3265 3266 gtest.C(t, func(t *gtest.T) { 3267 result, err := db.Model(table).WhereOrIn("id", g.Slice{1, 2, 3, 4}).WhereOrIn("id", g.Slice{3, 4, 5}).OrderAsc("id").All() 3268 t.AssertNil(err) 3269 t.Assert(len(result), 5) 3270 t.Assert(result[0]["id"], 1) 3271 t.Assert(result[4]["id"], 5) 3272 }) 3273 } 3274 3275 func Test_Model_WhereOrNotIn(t *testing.T) { 3276 table := createInitTable() 3277 defer dropTable(table) 3278 3279 gtest.C(t, func(t *gtest.T) { 3280 result, err := db.Model(table).WhereOrNotIn("id", g.Slice{1, 2, 3, 4}).WhereOrNotIn("id", g.Slice{3, 4, 5}).OrderAsc("id").All() 3281 t.AssertNil(err) 3282 t.Assert(len(result), 8) 3283 t.Assert(result[0]["id"], 1) 3284 t.Assert(result[4]["id"], 7) 3285 }) 3286 } 3287 3288 func Test_Model_WhereBetween(t *testing.T) { 3289 table := createInitTable() 3290 defer dropTable(table) 3291 3292 gtest.C(t, func(t *gtest.T) { 3293 result, err := db.Model(table).WhereBetween("id", 1, 4).WhereBetween("id", 3, 5).OrderAsc("id").All() 3294 t.AssertNil(err) 3295 t.Assert(len(result), 2) 3296 t.Assert(result[0]["id"], 3) 3297 t.Assert(result[1]["id"], 4) 3298 }) 3299 } 3300 3301 func Test_Model_WhereNotBetween(t *testing.T) { 3302 table := createInitTable() 3303 defer dropTable(table) 3304 3305 gtest.C(t, func(t *gtest.T) { 3306 result, err := db.Model(table).WhereNotBetween("id", 2, 8).WhereNotBetween("id", 3, 100).OrderAsc("id").All() 3307 t.AssertNil(err) 3308 t.Assert(len(result), 1) 3309 t.Assert(result[0]["id"], 1) 3310 }) 3311 } 3312 3313 func Test_Model_WhereOrBetween(t *testing.T) { 3314 table := createInitTable() 3315 defer dropTable(table) 3316 3317 gtest.C(t, func(t *gtest.T) { 3318 result, err := db.Model(table).WhereOrBetween("id", 1, 4).WhereOrBetween("id", 3, 5).OrderDesc("id").All() 3319 t.AssertNil(err) 3320 t.Assert(len(result), 5) 3321 t.Assert(result[0]["id"], 5) 3322 t.Assert(result[4]["id"], 1) 3323 }) 3324 } 3325 3326 func Test_Model_WhereOrNotBetween(t *testing.T) { 3327 table := createInitTable() 3328 defer dropTable(table) 3329 //db.SetDebug(true) 3330 gtest.C(t, func(t *gtest.T) { 3331 result, err := db.Model(table).WhereOrNotBetween("id", 1, 4).WhereOrNotBetween("id", 3, 5).OrderDesc("id").All() 3332 t.AssertNil(err) 3333 t.Assert(len(result), 8) 3334 t.Assert(result[0]["id"], 10) 3335 t.Assert(result[4]["id"], 6) 3336 }) 3337 } 3338 3339 func Test_Model_WhereLike(t *testing.T) { 3340 table := createInitTable() 3341 defer dropTable(table) 3342 3343 gtest.C(t, func(t *gtest.T) { 3344 result, err := db.Model(table).WhereLike("nickname", "name%").OrderAsc("id").All() 3345 t.AssertNil(err) 3346 t.Assert(len(result), TableSize) 3347 t.Assert(result[0]["id"], 1) 3348 t.Assert(result[TableSize-1]["id"], TableSize) 3349 }) 3350 } 3351 3352 func Test_Model_WhereNotLike(t *testing.T) { 3353 table := createInitTable() 3354 defer dropTable(table) 3355 3356 gtest.C(t, func(t *gtest.T) { 3357 result, err := db.Model(table).WhereNotLike("nickname", "name%").OrderAsc("id").All() 3358 t.AssertNil(err) 3359 t.Assert(len(result), 0) 3360 }) 3361 } 3362 3363 func Test_Model_WhereOrLike(t *testing.T) { 3364 table := createInitTable() 3365 defer dropTable(table) 3366 3367 gtest.C(t, func(t *gtest.T) { 3368 result, err := db.Model(table).WhereOrLike("nickname", "namexxx%").WhereOrLike("nickname", "name%").OrderAsc("id").All() 3369 t.AssertNil(err) 3370 t.Assert(len(result), TableSize) 3371 t.Assert(result[0]["id"], 1) 3372 t.Assert(result[TableSize-1]["id"], TableSize) 3373 }) 3374 } 3375 3376 func Test_Model_WhereOrNotLike(t *testing.T) { 3377 table := createInitTable() 3378 defer dropTable(table) 3379 3380 gtest.C(t, func(t *gtest.T) { 3381 result, err := db.Model(table).WhereOrNotLike("nickname", "namexxx%").WhereOrNotLike("nickname", "name%").OrderAsc("id").All() 3382 t.AssertNil(err) 3383 t.Assert(len(result), TableSize) 3384 t.Assert(result[0]["id"], 1) 3385 t.Assert(result[TableSize-1]["id"], TableSize) 3386 }) 3387 } 3388 3389 func Test_Model_WhereNull(t *testing.T) { 3390 table := createInitTable() 3391 defer dropTable(table) 3392 3393 gtest.C(t, func(t *gtest.T) { 3394 result, err := db.Model(table).WhereNull("nickname").WhereNull("passport").OrderAsc("id").All() 3395 t.AssertNil(err) 3396 t.Assert(len(result), 0) 3397 }) 3398 } 3399 3400 func Test_Model_WhereNotNull(t *testing.T) { 3401 table := createInitTable() 3402 defer dropTable(table) 3403 3404 gtest.C(t, func(t *gtest.T) { 3405 result, err := db.Model(table).WhereNotNull("nickname").WhereNotNull("passport").OrderAsc("id").All() 3406 t.AssertNil(err) 3407 t.Assert(len(result), TableSize) 3408 t.Assert(result[0]["id"], 1) 3409 t.Assert(result[TableSize-1]["id"], TableSize) 3410 }) 3411 } 3412 3413 func Test_Model_WhereOrNull(t *testing.T) { 3414 table := createInitTable() 3415 defer dropTable(table) 3416 3417 gtest.C(t, func(t *gtest.T) { 3418 result, err := db.Model(table).WhereOrNull("nickname").WhereOrNull("passport").OrderAsc("id").OrderRandom().All() 3419 t.AssertNil(err) 3420 t.Assert(len(result), 0) 3421 }) 3422 } 3423 3424 func Test_Model_WhereOrNotNull(t *testing.T) { 3425 table := createInitTable() 3426 defer dropTable(table) 3427 3428 gtest.C(t, func(t *gtest.T) { 3429 result, err := db.Model(table).WhereOrNotNull("nickname").WhereOrNotNull("passport").OrderAsc("id").All() 3430 t.AssertNil(err) 3431 t.Assert(len(result), TableSize) 3432 t.Assert(result[0]["id"], 1) 3433 t.Assert(result[TableSize-1]["id"], TableSize) 3434 }) 3435 } 3436 3437 func Test_Model_WhereLT(t *testing.T) { 3438 table := createInitTable() 3439 defer dropTable(table) 3440 3441 gtest.C(t, func(t *gtest.T) { 3442 result, err := db.Model(table).WhereLT("id", 3).OrderAsc("id").All() 3443 t.AssertNil(err) 3444 t.Assert(len(result), 2) 3445 t.Assert(result[0]["id"], 1) 3446 }) 3447 } 3448 3449 func Test_Model_WhereLTE(t *testing.T) { 3450 table := createInitTable() 3451 defer dropTable(table) 3452 3453 gtest.C(t, func(t *gtest.T) { 3454 result, err := db.Model(table).WhereLTE("id", 3).OrderAsc("id").All() 3455 t.AssertNil(err) 3456 t.Assert(len(result), 3) 3457 t.Assert(result[0]["id"], 1) 3458 }) 3459 } 3460 3461 func Test_Model_WhereGT(t *testing.T) { 3462 table := createInitTable() 3463 defer dropTable(table) 3464 3465 gtest.C(t, func(t *gtest.T) { 3466 result, err := db.Model(table).WhereGT("id", 8).OrderAsc("id").All() 3467 t.AssertNil(err) 3468 t.Assert(len(result), 2) 3469 t.Assert(result[0]["id"], 9) 3470 }) 3471 } 3472 3473 func Test_Model_WhereGTE(t *testing.T) { 3474 table := createInitTable() 3475 defer dropTable(table) 3476 3477 gtest.C(t, func(t *gtest.T) { 3478 result, err := db.Model(table).WhereGTE("id", 8).OrderAsc("id").All() 3479 t.AssertNil(err) 3480 t.Assert(len(result), 3) 3481 t.Assert(result[0]["id"], 8) 3482 }) 3483 } 3484 3485 func Test_Model_WhereOrLT(t *testing.T) { 3486 table := createInitTable() 3487 defer dropTable(table) 3488 3489 gtest.C(t, func(t *gtest.T) { 3490 result, err := db.Model(table).WhereLT("id", 3).WhereOrLT("id", 4).OrderAsc("id").All() 3491 t.AssertNil(err) 3492 t.Assert(len(result), 3) 3493 t.Assert(result[0]["id"], 1) 3494 t.Assert(result[2]["id"], 3) 3495 }) 3496 } 3497 3498 func Test_Model_WhereOrLTE(t *testing.T) { 3499 table := createInitTable() 3500 defer dropTable(table) 3501 3502 gtest.C(t, func(t *gtest.T) { 3503 result, err := db.Model(table).WhereLTE("id", 3).WhereOrLTE("id", 4).OrderAsc("id").All() 3504 t.AssertNil(err) 3505 t.Assert(len(result), 4) 3506 t.Assert(result[0]["id"], 1) 3507 t.Assert(result[3]["id"], 4) 3508 }) 3509 } 3510 3511 func Test_Model_WhereOrGT(t *testing.T) { 3512 table := createInitTable() 3513 defer dropTable(table) 3514 3515 gtest.C(t, func(t *gtest.T) { 3516 result, err := db.Model(table).WhereGT("id", 8).WhereOrGT("id", 7).OrderAsc("id").All() 3517 t.AssertNil(err) 3518 t.Assert(len(result), 3) 3519 t.Assert(result[0]["id"], 8) 3520 }) 3521 } 3522 3523 func Test_Model_WhereOrGTE(t *testing.T) { 3524 table := createInitTable() 3525 defer dropTable(table) 3526 3527 gtest.C(t, func(t *gtest.T) { 3528 result, err := db.Model(table).WhereGTE("id", 8).WhereOrGTE("id", 7).OrderAsc("id").All() 3529 t.AssertNil(err) 3530 t.Assert(len(result), 4) 3531 t.Assert(result[0]["id"], 7) 3532 }) 3533 } 3534 3535 func Test_Model_Min_Max_Avg_Sum(t *testing.T) { 3536 table := createInitTable() 3537 defer dropTable(table) 3538 3539 gtest.C(t, func(t *gtest.T) { 3540 result, err := db.Model(table).Min("id") 3541 t.AssertNil(err) 3542 t.Assert(result, 1) 3543 }) 3544 gtest.C(t, func(t *gtest.T) { 3545 result, err := db.Model(table).Max("id") 3546 t.AssertNil(err) 3547 t.Assert(result, TableSize) 3548 }) 3549 gtest.C(t, func(t *gtest.T) { 3550 result, err := db.Model(table).Avg("id") 3551 t.AssertNil(err) 3552 t.Assert(result, 5.5) 3553 }) 3554 gtest.C(t, func(t *gtest.T) { 3555 result, err := db.Model(table).Sum("id") 3556 t.AssertNil(err) 3557 t.Assert(result, 55) 3558 }) 3559 } 3560 3561 func Test_Model_CountColumn(t *testing.T) { 3562 table := createInitTable() 3563 defer dropTable(table) 3564 3565 gtest.C(t, func(t *gtest.T) { 3566 result, err := db.Model(table).CountColumn("id") 3567 t.AssertNil(err) 3568 t.Assert(result, TableSize) 3569 }) 3570 gtest.C(t, func(t *gtest.T) { 3571 result, err := db.Model(table).WhereIn("id", g.Slice{1, 2, 3}).CountColumn("id") 3572 t.AssertNil(err) 3573 t.Assert(result, 3) 3574 }) 3575 } 3576 3577 func Test_Model_InsertAndGetId(t *testing.T) { 3578 table := createTable() 3579 defer dropTable(table) 3580 gtest.C(t, func(t *gtest.T) { 3581 id, err := db.Model(table).Data(g.Map{ 3582 "id": 1, 3583 "passport": "user_1", 3584 "password": "pass_1", 3585 "nickname": "name_1", 3586 }).InsertAndGetId() 3587 t.AssertNil(err) 3588 t.Assert(id, 1) 3589 }) 3590 gtest.C(t, func(t *gtest.T) { 3591 id, err := db.Model(table).Data(g.Map{ 3592 "passport": "user_2", 3593 "password": "pass_2", 3594 "nickname": "name_2", 3595 }).InsertAndGetId() 3596 t.AssertNil(err) 3597 t.Assert(id, 2) 3598 }) 3599 } 3600 3601 func Test_Model_Increment_Decrement(t *testing.T) { 3602 table := createInitTable() 3603 defer dropTable(table) 3604 gtest.C(t, func(t *gtest.T) { 3605 result, err := db.Model(table).Where("id", 1).Increment("id", 100) 3606 t.AssertNil(err) 3607 rows, _ := result.RowsAffected() 3608 t.Assert(rows, 1) 3609 }) 3610 gtest.C(t, func(t *gtest.T) { 3611 result, err := db.Model(table).Where("id", 101).Decrement("id", 10) 3612 t.AssertNil(err) 3613 rows, _ := result.RowsAffected() 3614 t.Assert(rows, 1) 3615 }) 3616 gtest.C(t, func(t *gtest.T) { 3617 count, err := db.Model(table).Where("id", 91).Count() 3618 t.AssertNil(err) 3619 t.Assert(count, 1) 3620 }) 3621 } 3622 3623 func Test_Model_OnDuplicate(t *testing.T) { 3624 table := createInitTable() 3625 defer dropTable(table) 3626 3627 // string. 3628 gtest.C(t, func(t *gtest.T) { 3629 data := g.Map{ 3630 "id": 1, 3631 "passport": "pp1", 3632 "password": "pw1", 3633 "nickname": "n1", 3634 "create_time": "2016-06-06", 3635 } 3636 _, err := db.Model(table).OnDuplicate("passport,password").Data(data).Save() 3637 t.AssertNil(err) 3638 one, err := db.Model(table).FindOne(1) 3639 t.AssertNil(err) 3640 t.Assert(one["passport"], data["passport"]) 3641 t.Assert(one["password"], data["password"]) 3642 t.Assert(one["nickname"], "name_1") 3643 }) 3644 3645 // slice. 3646 gtest.C(t, func(t *gtest.T) { 3647 data := g.Map{ 3648 "id": 1, 3649 "passport": "pp1", 3650 "password": "pw1", 3651 "nickname": "n1", 3652 "create_time": "2016-06-06", 3653 } 3654 _, err := db.Model(table).OnDuplicate(g.Slice{"passport", "password"}).Data(data).Save() 3655 t.AssertNil(err) 3656 one, err := db.Model(table).FindOne(1) 3657 t.AssertNil(err) 3658 t.Assert(one["passport"], data["passport"]) 3659 t.Assert(one["password"], data["password"]) 3660 t.Assert(one["nickname"], "name_1") 3661 }) 3662 3663 // map. 3664 gtest.C(t, func(t *gtest.T) { 3665 data := g.Map{ 3666 "id": 1, 3667 "passport": "pp1", 3668 "password": "pw1", 3669 "nickname": "n1", 3670 "create_time": "2016-06-06", 3671 } 3672 _, err := db.Model(table).OnDuplicate(g.Map{ 3673 "passport": "nickname", 3674 "password": "nickname", 3675 }).Data(data).Save() 3676 t.AssertNil(err) 3677 one, err := db.Model(table).FindOne(1) 3678 t.AssertNil(err) 3679 t.Assert(one["passport"], data["nickname"]) 3680 t.Assert(one["password"], data["nickname"]) 3681 t.Assert(one["nickname"], "name_1") 3682 }) 3683 3684 // map+raw. 3685 gtest.C(t, func(t *gtest.T) { 3686 data := g.MapStrStr{ 3687 "id": "1", 3688 "passport": "pp1", 3689 "password": "pw1", 3690 "nickname": "n1", 3691 "create_time": "2016-06-06", 3692 } 3693 _, err := db.Model(table).OnDuplicate(g.Map{ 3694 "passport": gdb.Raw("CONCAT(VALUES(`passport`), '1')"), 3695 "password": gdb.Raw("CONCAT(VALUES(`password`), '2')"), 3696 }).Data(data).Save() 3697 t.AssertNil(err) 3698 one, err := db.Model(table).FindOne(1) 3699 t.AssertNil(err) 3700 t.Assert(one["passport"], data["passport"]+"1") 3701 t.Assert(one["password"], data["password"]+"2") 3702 t.Assert(one["nickname"], "name_1") 3703 }) 3704 } 3705 3706 func Test_Model_OnDuplicateEx(t *testing.T) { 3707 table := createInitTable() 3708 defer dropTable(table) 3709 3710 // string. 3711 gtest.C(t, func(t *gtest.T) { 3712 data := g.Map{ 3713 "id": 1, 3714 "passport": "pp1", 3715 "password": "pw1", 3716 "nickname": "n1", 3717 "create_time": "2016-06-06", 3718 } 3719 _, err := db.Model(table).OnDuplicateEx("nickname,create_time").Data(data).Save() 3720 t.AssertNil(err) 3721 one, err := db.Model(table).FindOne(1) 3722 t.AssertNil(err) 3723 t.Assert(one["passport"], data["passport"]) 3724 t.Assert(one["password"], data["password"]) 3725 t.Assert(one["nickname"], "name_1") 3726 }) 3727 3728 // slice. 3729 gtest.C(t, func(t *gtest.T) { 3730 data := g.Map{ 3731 "id": 1, 3732 "passport": "pp1", 3733 "password": "pw1", 3734 "nickname": "n1", 3735 "create_time": "2016-06-06", 3736 } 3737 _, err := db.Model(table).OnDuplicateEx(g.Slice{"nickname", "create_time"}).Data(data).Save() 3738 t.AssertNil(err) 3739 one, err := db.Model(table).FindOne(1) 3740 t.AssertNil(err) 3741 t.Assert(one["passport"], data["passport"]) 3742 t.Assert(one["password"], data["password"]) 3743 t.Assert(one["nickname"], "name_1") 3744 }) 3745 3746 // map. 3747 gtest.C(t, func(t *gtest.T) { 3748 data := g.Map{ 3749 "id": 1, 3750 "passport": "pp1", 3751 "password": "pw1", 3752 "nickname": "n1", 3753 "create_time": "2016-06-06", 3754 } 3755 _, err := db.Model(table).OnDuplicateEx(g.Map{ 3756 "nickname": "nickname", 3757 "create_time": "nickname", 3758 }).Data(data).Save() 3759 t.AssertNil(err) 3760 one, err := db.Model(table).FindOne(1) 3761 t.AssertNil(err) 3762 t.Assert(one["passport"], data["passport"]) 3763 t.Assert(one["password"], data["password"]) 3764 t.Assert(one["nickname"], "name_1") 3765 }) 3766 } 3767 3768 func Test_Model_Raw(t *testing.T) { 3769 table := createInitTable() 3770 defer dropTable(table) 3771 3772 gtest.C(t, func(t *gtest.T) { 3773 all, err := db. 3774 Raw(fmt.Sprintf("select * from %s where id in (?)", table), g.Slice{1, 5, 7, 8, 9, 10}). 3775 WhereLT("id", 8). 3776 WhereIn("id", g.Slice{1, 2, 3, 4, 5, 6, 7}). 3777 OrderDesc("id"). 3778 Limit(2). 3779 All() 3780 t.AssertNil(err) 3781 t.Assert(len(all), 2) 3782 t.Assert(all[0]["id"], 7) 3783 t.Assert(all[1]["id"], 5) 3784 }) 3785 3786 gtest.C(t, func(t *gtest.T) { 3787 count, err := db. 3788 Raw(fmt.Sprintf("select * from %s where id in (?)", table), g.Slice{1, 5, 7, 8, 9, 10}). 3789 WhereLT("id", 8). 3790 WhereIn("id", g.Slice{1, 2, 3, 4, 5, 6, 7}). 3791 OrderDesc("id"). 3792 Limit(2). 3793 Count() 3794 t.AssertNil(err) 3795 t.Assert(count, 6) 3796 }) 3797 } 3798 3799 func Test_Model_Handler(t *testing.T) { 3800 table := createInitTable() 3801 defer dropTable(table) 3802 3803 gtest.C(t, func(t *gtest.T) { 3804 m := db.Model(table).Safe().Handler( 3805 func(m *gdb.Model) *gdb.Model { 3806 return m.Page(0, 3) 3807 }, 3808 func(m *gdb.Model) *gdb.Model { 3809 return m.Where("id", g.Slice{1, 2, 3, 4, 5, 6}) 3810 }, 3811 func(m *gdb.Model) *gdb.Model { 3812 return m.OrderDesc("id") 3813 }, 3814 ) 3815 all, err := m.All() 3816 t.AssertNil(err) 3817 t.Assert(len(all), 3) 3818 t.Assert(all[0]["id"], 6) 3819 t.Assert(all[2]["id"], 4) 3820 }) 3821 } 3822 3823 func Test_Model_FieldCount(t *testing.T) { 3824 table := createInitTable() 3825 defer dropTable(table) 3826 3827 gtest.C(t, func(t *gtest.T) { 3828 all, err := db.Model(table).Fields("id").FieldCount("id", "total").Group("id").OrderAsc("id").All() 3829 t.AssertNil(err) 3830 t.Assert(len(all), TableSize) 3831 t.Assert(all[0]["id"], 1) 3832 t.Assert(all[0]["total"], 1) 3833 }) 3834 } 3835 3836 func Test_Model_FieldMax(t *testing.T) { 3837 table := createInitTable() 3838 defer dropTable(table) 3839 3840 gtest.C(t, func(t *gtest.T) { 3841 all, err := db.Model(table).Fields("id").FieldMax("id", "total").Group("id").OrderAsc("id").All() 3842 t.AssertNil(err) 3843 t.Assert(len(all), TableSize) 3844 t.Assert(all[0]["id"], 1) 3845 t.Assert(all[0]["total"], 1) 3846 }) 3847 } 3848 3849 func Test_Model_FieldMin(t *testing.T) { 3850 table := createInitTable() 3851 defer dropTable(table) 3852 3853 gtest.C(t, func(t *gtest.T) { 3854 all, err := db.Model(table).Fields("id").FieldMin("id", "total").Group("id").OrderAsc("id").All() 3855 t.AssertNil(err) 3856 t.Assert(len(all), TableSize) 3857 t.Assert(all[0]["id"], 1) 3858 t.Assert(all[0]["total"], 1) 3859 }) 3860 } 3861 3862 func Test_Model_FieldAvg(t *testing.T) { 3863 table := createInitTable() 3864 defer dropTable(table) 3865 3866 gtest.C(t, func(t *gtest.T) { 3867 all, err := db.Model(table).Fields("id").FieldAvg("id", "total").Group("id").OrderAsc("id").All() 3868 t.AssertNil(err) 3869 t.Assert(len(all), TableSize) 3870 t.Assert(all[0]["id"], 1) 3871 t.Assert(all[0]["total"], 1) 3872 }) 3873 } 3874 3875 // https://github.com/gogf/gf/issues/1387 3876 func Test_Model_GTime_DefaultValue(t *testing.T) { 3877 table := createTable() 3878 defer dropTable(table) 3879 3880 gtest.C(t, func(t *gtest.T) { 3881 type User struct { 3882 Id int 3883 Passport string 3884 Password string 3885 Nickname string 3886 CreateTime *gtime.Time 3887 } 3888 data := User{ 3889 Id: 1, 3890 Passport: "user_1", 3891 Password: "pass_1", 3892 Nickname: "name_1", 3893 } 3894 // Insert 3895 _, err := db.Model(table).Data(data).Insert() 3896 t.AssertNil(err) 3897 3898 // Select 3899 var ( 3900 user *User 3901 ) 3902 err = db.Model(table).Scan(&user) 3903 t.AssertNil(err) 3904 t.Assert(user.Passport, data.Passport) 3905 t.Assert(user.Password, data.Password) 3906 t.Assert(user.CreateTime, data.CreateTime) 3907 t.Assert(user.Nickname, data.Nickname) 3908 3909 // Insert 3910 user.Id = 2 3911 _, err = db.Model(table).Data(user).Insert() 3912 t.AssertNil(err) 3913 }) 3914 }