github.com/gogf/gf@v1.16.9/database/gdb/gdb_z_mysql_method_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 "fmt" 12 "github.com/gogf/gf/container/garray" 13 "github.com/gogf/gf/encoding/gparser" 14 "github.com/gogf/gf/text/gstr" 15 "testing" 16 "time" 17 18 "github.com/gogf/gf/database/gdb" 19 "github.com/gogf/gf/encoding/gjson" 20 "github.com/gogf/gf/encoding/gxml" 21 22 "github.com/gogf/gf/frame/g" 23 "github.com/gogf/gf/os/gtime" 24 "github.com/gogf/gf/test/gtest" 25 ) 26 27 func Test_DB_Ping(t *testing.T) { 28 gtest.C(t, func(t *gtest.T) { 29 err1 := db.PingMaster() 30 err2 := db.PingSlave() 31 t.Assert(err1, nil) 32 t.Assert(err2, nil) 33 }) 34 } 35 36 func Test_DB_Query(t *testing.T) { 37 gtest.C(t, func(t *gtest.T) { 38 _, err := db.Query("SELECT ?", 1) 39 t.AssertNil(err) 40 41 _, err = db.Query("SELECT ?+?", 1, 2) 42 t.AssertNil(err) 43 44 _, err = db.Query("SELECT ?+?", g.Slice{1, 2}) 45 t.AssertNil(err) 46 47 _, err = db.Query("ERROR") 48 t.AssertNE(err, nil) 49 }) 50 51 } 52 53 func Test_DB_Exec(t *testing.T) { 54 gtest.C(t, func(t *gtest.T) { 55 _, err := db.Exec("SELECT ?", 1) 56 t.AssertNil(err) 57 58 _, err = db.Exec("ERROR") 59 t.AssertNE(err, nil) 60 }) 61 62 } 63 64 func Test_DB_Prepare(t *testing.T) { 65 gtest.C(t, func(t *gtest.T) { 66 st, err := db.Prepare("SELECT 100") 67 t.AssertNil(err) 68 69 rows, err := st.Query() 70 t.AssertNil(err) 71 72 array, err := rows.Columns() 73 t.AssertNil(err) 74 t.Assert(array[0], "100") 75 76 err = rows.Close() 77 t.AssertNil(err) 78 }) 79 } 80 81 func Test_DB_Insert(t *testing.T) { 82 table := createTable() 83 defer dropTable(table) 84 85 gtest.C(t, func(t *gtest.T) { 86 _, err := db.Insert(table, g.Map{ 87 "id": 1, 88 "passport": "t1", 89 "password": "25d55ad283aa400af464c76d713c07ad", 90 "nickname": "T1", 91 "create_time": gtime.Now().String(), 92 }) 93 t.AssertNil(err) 94 95 // normal map 96 result, err := db.Insert(table, g.Map{ 97 "id": "2", 98 "passport": "t2", 99 "password": "25d55ad283aa400af464c76d713c07ad", 100 "nickname": "name_2", 101 "create_time": gtime.Now().String(), 102 }) 103 t.AssertNil(err) 104 n, _ := result.RowsAffected() 105 t.Assert(n, 1) 106 107 // struct 108 type User struct { 109 Id int `gconv:"id"` 110 Passport string `json:"passport"` 111 Password string `gconv:"password"` 112 Nickname string `gconv:"nickname"` 113 CreateTime string `json:"create_time"` 114 } 115 timeStr := gtime.Now().String() 116 result, err = db.Insert(table, User{ 117 Id: 3, 118 Passport: "user_3", 119 Password: "25d55ad283aa400af464c76d713c07ad", 120 Nickname: "name_3", 121 CreateTime: timeStr, 122 }) 123 t.AssertNil(err) 124 n, _ = result.RowsAffected() 125 t.Assert(n, 1) 126 127 one, err := db.Model(table).Where("id", 3).One() 128 t.AssertNil(err) 129 130 t.Assert(one["id"].Int(), 3) 131 t.Assert(one["passport"].String(), "user_3") 132 t.Assert(one["password"].String(), "25d55ad283aa400af464c76d713c07ad") 133 t.Assert(one["nickname"].String(), "name_3") 134 t.Assert(one["create_time"].GTime().String(), timeStr) 135 136 // *struct 137 timeStr = gtime.Now().String() 138 result, err = db.Insert(table, &User{ 139 Id: 4, 140 Passport: "t4", 141 Password: "25d55ad283aa400af464c76d713c07ad", 142 Nickname: "name_4", 143 CreateTime: timeStr, 144 }) 145 t.AssertNil(err) 146 n, _ = result.RowsAffected() 147 t.Assert(n, 1) 148 149 one, err = db.Model(table).Where("id", 4).One() 150 t.AssertNil(err) 151 t.Assert(one["id"].Int(), 4) 152 t.Assert(one["passport"].String(), "t4") 153 t.Assert(one["password"].String(), "25d55ad283aa400af464c76d713c07ad") 154 t.Assert(one["nickname"].String(), "name_4") 155 t.Assert(one["create_time"].GTime().String(), timeStr) 156 157 // batch with Insert 158 timeStr = gtime.Now().String() 159 r, err := db.Insert(table, g.Slice{ 160 g.Map{ 161 "id": 200, 162 "passport": "t200", 163 "password": "25d55ad283aa400af464c76d71qw07ad", 164 "nickname": "T200", 165 "create_time": timeStr, 166 }, 167 g.Map{ 168 "id": 300, 169 "passport": "t300", 170 "password": "25d55ad283aa400af464c76d713c07ad", 171 "nickname": "T300", 172 "create_time": timeStr, 173 }, 174 }) 175 t.AssertNil(err) 176 n, _ = r.RowsAffected() 177 t.Assert(n, 2) 178 179 one, err = db.Model(table).Where("id", 200).One() 180 t.AssertNil(err) 181 t.Assert(one["id"].Int(), 200) 182 t.Assert(one["passport"].String(), "t200") 183 t.Assert(one["password"].String(), "25d55ad283aa400af464c76d71qw07ad") 184 t.Assert(one["nickname"].String(), "T200") 185 t.Assert(one["create_time"].GTime().String(), timeStr) 186 }) 187 } 188 189 // Fix issue: https://github.com/gogf/gf/issues/819 190 func Test_DB_Insert_WithStructAndSliceAttribute(t *testing.T) { 191 table := createTable() 192 defer dropTable(table) 193 194 gtest.C(t, func(t *gtest.T) { 195 type Password struct { 196 Salt string `json:"salt"` 197 Pass string `json:"pass"` 198 } 199 data := g.Map{ 200 "id": 1, 201 "passport": "t1", 202 "password": &Password{"123", "456"}, 203 "nickname": []string{"A", "B", "C"}, 204 "create_time": gtime.Now().String(), 205 } 206 _, err := db.Insert(table, data) 207 t.AssertNil(err) 208 209 one, err := db.GetOne(fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 1) 210 t.AssertNil(err) 211 t.Assert(one["passport"], data["passport"]) 212 t.Assert(one["create_time"], data["create_time"]) 213 t.Assert(one["nickname"], gparser.MustToJson(data["nickname"])) 214 }) 215 } 216 217 func Test_DB_Insert_KeyFieldNameMapping(t *testing.T) { 218 table := createTable() 219 defer dropTable(table) 220 221 gtest.C(t, func(t *gtest.T) { 222 type User struct { 223 Id int 224 Passport string 225 Password string 226 Nickname string 227 CreateTime string 228 } 229 data := User{ 230 Id: 1, 231 Passport: "user_1", 232 Password: "pass_1", 233 Nickname: "name_1", 234 CreateTime: "2020-10-10 12:00:01", 235 } 236 _, err := db.Insert(table, data) 237 t.AssertNil(err) 238 239 one, err := db.GetOne(fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 1) 240 t.AssertNil(err) 241 t.Assert(one["passport"], data.Passport) 242 t.Assert(one["create_time"], data.CreateTime) 243 t.Assert(one["nickname"], data.Nickname) 244 }) 245 } 246 247 func Test_DB_Upadte_KeyFieldNameMapping(t *testing.T) { 248 table := createInitTable() 249 defer dropTable(table) 250 251 gtest.C(t, func(t *gtest.T) { 252 type User struct { 253 Id int 254 Passport string 255 Password string 256 Nickname string 257 CreateTime string 258 } 259 data := User{ 260 Id: 1, 261 Passport: "user_10", 262 Password: "pass_10", 263 Nickname: "name_10", 264 CreateTime: "2020-10-10 12:00:01", 265 } 266 _, err := db.Update(table, data, "id=1") 267 t.AssertNil(err) 268 269 one, err := db.GetOne(fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 1) 270 t.AssertNil(err) 271 t.Assert(one["passport"], data.Passport) 272 t.Assert(one["create_time"], data.CreateTime) 273 t.Assert(one["nickname"], data.Nickname) 274 }) 275 } 276 277 // This is no longer used as the filter feature is automatically enabled from GoFrame v1.16.0. 278 //func Test_DB_Insert_KeyFieldNameMapping_Error(t *testing.T) { 279 // table := createTable() 280 // defer dropTable(table) 281 // 282 // gtest.C(t, func(t *gtest.T) { 283 // type User struct { 284 // Id int 285 // Passport string 286 // Password string 287 // Nickname string 288 // CreateTime string 289 // NoneExistField string 290 // } 291 // data := User{ 292 // Id: 1, 293 // Passport: "user_1", 294 // Password: "pass_1", 295 // Nickname: "name_1", 296 // CreateTime: "2020-10-10 12:00:01", 297 // } 298 // _, err := db.Insert(table, data) 299 // t.AssertNE(err, nil) 300 // }) 301 //} 302 303 func Test_DB_InsertIgnore(t *testing.T) { 304 table := createInitTable() 305 defer dropTable(table) 306 gtest.C(t, func(t *gtest.T) { 307 _, err := db.Insert(table, g.Map{ 308 "id": 1, 309 "passport": "t1", 310 "password": "25d55ad283aa400af464c76d713c07ad", 311 "nickname": "T1", 312 "create_time": gtime.Now().String(), 313 }) 314 t.AssertNE(err, nil) 315 }) 316 gtest.C(t, func(t *gtest.T) { 317 _, err := db.InsertIgnore(table, g.Map{ 318 "id": 1, 319 "passport": "t1", 320 "password": "25d55ad283aa400af464c76d713c07ad", 321 "nickname": "T1", 322 "create_time": gtime.Now().String(), 323 }) 324 t.AssertNil(err) 325 }) 326 } 327 328 func Test_DB_BatchInsert(t *testing.T) { 329 gtest.C(t, func(t *gtest.T) { 330 table := createTable() 331 defer dropTable(table) 332 r, err := db.Insert(table, g.List{ 333 { 334 "id": 2, 335 "passport": "t2", 336 "password": "25d55ad283aa400af464c76d713c07ad", 337 "nickname": "name_2", 338 "create_time": gtime.Now().String(), 339 }, 340 { 341 "id": 3, 342 "passport": "user_3", 343 "password": "25d55ad283aa400af464c76d713c07ad", 344 "nickname": "name_3", 345 "create_time": gtime.Now().String(), 346 }, 347 }, 1) 348 t.AssertNil(err) 349 n, _ := r.RowsAffected() 350 t.Assert(n, 2) 351 352 n, _ = r.LastInsertId() 353 t.Assert(n, 3) 354 }) 355 356 gtest.C(t, func(t *gtest.T) { 357 table := createTable() 358 defer dropTable(table) 359 // []interface{} 360 r, err := db.Insert(table, g.Slice{ 361 g.Map{ 362 "id": 2, 363 "passport": "t2", 364 "password": "25d55ad283aa400af464c76d713c07ad", 365 "nickname": "name_2", 366 "create_time": gtime.Now().String(), 367 }, 368 g.Map{ 369 "id": 3, 370 "passport": "user_3", 371 "password": "25d55ad283aa400af464c76d713c07ad", 372 "nickname": "name_3", 373 "create_time": gtime.Now().String(), 374 }, 375 }, 1) 376 t.AssertNil(err) 377 n, _ := r.RowsAffected() 378 t.Assert(n, 2) 379 }) 380 381 // batch insert map 382 gtest.C(t, func(t *gtest.T) { 383 table := createTable() 384 defer dropTable(table) 385 result, err := db.Insert(table, g.Map{ 386 "id": 1, 387 "passport": "t1", 388 "password": "p1", 389 "nickname": "T1", 390 "create_time": gtime.Now().String(), 391 }) 392 t.AssertNil(err) 393 n, _ := result.RowsAffected() 394 t.Assert(n, 1) 395 }) 396 397 } 398 399 func Test_DB_BatchInsert_Struct(t *testing.T) { 400 // batch insert struct 401 gtest.C(t, func(t *gtest.T) { 402 table := createTable() 403 defer dropTable(table) 404 405 type User struct { 406 Id int `c:"id"` 407 Passport string `c:"passport"` 408 Password string `c:"password"` 409 NickName string `c:"nickname"` 410 CreateTime *gtime.Time `c:"create_time"` 411 } 412 user := &User{ 413 Id: 1, 414 Passport: "t1", 415 Password: "p1", 416 NickName: "T1", 417 CreateTime: gtime.Now(), 418 } 419 result, err := db.Insert(table, user) 420 t.AssertNil(err) 421 n, _ := result.RowsAffected() 422 t.Assert(n, 1) 423 }) 424 } 425 426 func Test_DB_Save(t *testing.T) { 427 table := createInitTable() 428 defer dropTable(table) 429 430 gtest.C(t, func(t *gtest.T) { 431 timeStr := gtime.Now().String() 432 _, err := db.Save(table, g.Map{ 433 "id": 1, 434 "passport": "t1", 435 "password": "25d55ad283aa400af464c76d713c07ad", 436 "nickname": "T11", 437 "create_time": timeStr, 438 }) 439 t.AssertNil(err) 440 441 one, err := db.Model(table).Where("id", 1).One() 442 t.AssertNil(err) 443 t.Assert(one["id"].Int(), 1) 444 t.Assert(one["passport"].String(), "t1") 445 t.Assert(one["password"].String(), "25d55ad283aa400af464c76d713c07ad") 446 t.Assert(one["nickname"].String(), "T11") 447 t.Assert(one["create_time"].GTime().String(), timeStr) 448 }) 449 } 450 451 func Test_DB_Replace(t *testing.T) { 452 table := createInitTable() 453 defer dropTable(table) 454 455 gtest.C(t, func(t *gtest.T) { 456 timeStr := gtime.Now().String() 457 _, err := db.Replace(table, g.Map{ 458 "id": 1, 459 "passport": "t1", 460 "password": "25d55ad283aa400af464c76d713c07ad", 461 "nickname": "T11", 462 "create_time": timeStr, 463 }) 464 t.AssertNil(err) 465 466 one, err := db.Model(table).Where("id", 1).One() 467 t.AssertNil(err) 468 t.Assert(one["id"].Int(), 1) 469 t.Assert(one["passport"].String(), "t1") 470 t.Assert(one["password"].String(), "25d55ad283aa400af464c76d713c07ad") 471 t.Assert(one["nickname"].String(), "T11") 472 t.Assert(one["create_time"].GTime().String(), timeStr) 473 }) 474 } 475 476 func Test_DB_Update(t *testing.T) { 477 table := createInitTable() 478 defer dropTable(table) 479 480 gtest.C(t, func(t *gtest.T) { 481 result, err := db.Update(table, "password='987654321'", "id=3") 482 t.AssertNil(err) 483 n, _ := result.RowsAffected() 484 t.Assert(n, 1) 485 486 one, err := db.Model(table).Where("id", 3).One() 487 t.AssertNil(err) 488 t.Assert(one["id"].Int(), 3) 489 t.Assert(one["passport"].String(), "user_3") 490 t.Assert(one["password"].String(), "987654321") 491 t.Assert(one["nickname"].String(), "name_3") 492 }) 493 } 494 495 func Test_DB_GetAll(t *testing.T) { 496 table := createInitTable() 497 defer dropTable(table) 498 499 gtest.C(t, func(t *gtest.T) { 500 result, err := db.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 1) 501 t.AssertNil(err) 502 t.Assert(len(result), 1) 503 t.Assert(result[0]["id"].Int(), 1) 504 }) 505 gtest.C(t, func(t *gtest.T) { 506 result, err := db.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), g.Slice{1}) 507 t.AssertNil(err) 508 t.Assert(len(result), 1) 509 t.Assert(result[0]["id"].Int(), 1) 510 }) 511 gtest.C(t, func(t *gtest.T) { 512 result, err := db.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id in(?)", table), g.Slice{1, 2, 3}) 513 t.AssertNil(err) 514 t.Assert(len(result), 3) 515 t.Assert(result[0]["id"].Int(), 1) 516 t.Assert(result[1]["id"].Int(), 2) 517 t.Assert(result[2]["id"].Int(), 3) 518 }) 519 gtest.C(t, func(t *gtest.T) { 520 result, err := db.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id in(?,?,?)", table), g.Slice{1, 2, 3}) 521 t.AssertNil(err) 522 t.Assert(len(result), 3) 523 t.Assert(result[0]["id"].Int(), 1) 524 t.Assert(result[1]["id"].Int(), 2) 525 t.Assert(result[2]["id"].Int(), 3) 526 }) 527 gtest.C(t, func(t *gtest.T) { 528 result, err := db.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id in(?,?,?)", table), g.Slice{1, 2, 3}...) 529 t.AssertNil(err) 530 t.Assert(len(result), 3) 531 t.Assert(result[0]["id"].Int(), 1) 532 t.Assert(result[1]["id"].Int(), 2) 533 t.Assert(result[2]["id"].Int(), 3) 534 }) 535 gtest.C(t, func(t *gtest.T) { 536 result, err := db.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id>=? AND id <=?", table), g.Slice{1, 3}) 537 t.AssertNil(err) 538 t.Assert(len(result), 3) 539 t.Assert(result[0]["id"].Int(), 1) 540 t.Assert(result[1]["id"].Int(), 2) 541 t.Assert(result[2]["id"].Int(), 3) 542 }) 543 } 544 545 func Test_DB_GetOne(t *testing.T) { 546 table := createInitTable() 547 defer dropTable(table) 548 gtest.C(t, func(t *gtest.T) { 549 record, err := db.GetOne(fmt.Sprintf("SELECT * FROM %s WHERE passport=?", table), "user_1") 550 t.AssertNil(err) 551 t.Assert(record["nickname"].String(), "name_1") 552 }) 553 } 554 555 func Test_DB_GetValue(t *testing.T) { 556 table := createInitTable() 557 defer dropTable(table) 558 gtest.C(t, func(t *gtest.T) { 559 value, err := db.GetValue(fmt.Sprintf("SELECT id FROM %s WHERE passport=?", table), "user_3") 560 t.AssertNil(err) 561 t.Assert(value.Int(), 3) 562 }) 563 } 564 565 func Test_DB_GetCount(t *testing.T) { 566 table := createInitTable() 567 defer dropTable(table) 568 gtest.C(t, func(t *gtest.T) { 569 count, err := db.GetCount(fmt.Sprintf("SELECT * FROM %s", table)) 570 t.AssertNil(err) 571 t.Assert(count, TableSize) 572 }) 573 } 574 575 func Test_DB_GetStruct(t *testing.T) { 576 table := createInitTable() 577 defer dropTable(table) 578 gtest.C(t, func(t *gtest.T) { 579 type User struct { 580 Id int 581 Passport string 582 Password string 583 NickName string 584 CreateTime gtime.Time 585 } 586 user := new(User) 587 err := db.GetScan(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3) 588 t.AssertNil(err) 589 t.Assert(user.NickName, "name_3") 590 }) 591 gtest.C(t, func(t *gtest.T) { 592 type User struct { 593 Id int 594 Passport string 595 Password string 596 NickName string 597 CreateTime *gtime.Time 598 } 599 user := new(User) 600 err := db.GetScan(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3) 601 t.AssertNil(err) 602 t.Assert(user.NickName, "name_3") 603 }) 604 } 605 606 func Test_DB_GetStructs(t *testing.T) { 607 table := createInitTable() 608 defer dropTable(table) 609 gtest.C(t, func(t *gtest.T) { 610 type User struct { 611 Id int 612 Passport string 613 Password string 614 NickName string 615 CreateTime gtime.Time 616 } 617 var users []User 618 err := db.GetScan(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>?", table), 1) 619 t.AssertNil(err) 620 t.Assert(len(users), TableSize-1) 621 t.Assert(users[0].Id, 2) 622 t.Assert(users[1].Id, 3) 623 t.Assert(users[2].Id, 4) 624 t.Assert(users[0].NickName, "name_2") 625 t.Assert(users[1].NickName, "name_3") 626 t.Assert(users[2].NickName, "name_4") 627 }) 628 629 gtest.C(t, func(t *gtest.T) { 630 type User struct { 631 Id int 632 Passport string 633 Password string 634 NickName string 635 CreateTime *gtime.Time 636 } 637 var users []User 638 err := db.GetScan(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>?", table), 1) 639 t.AssertNil(err) 640 t.Assert(len(users), TableSize-1) 641 t.Assert(users[0].Id, 2) 642 t.Assert(users[1].Id, 3) 643 t.Assert(users[2].Id, 4) 644 t.Assert(users[0].NickName, "name_2") 645 t.Assert(users[1].NickName, "name_3") 646 t.Assert(users[2].NickName, "name_4") 647 }) 648 } 649 650 func Test_DB_GetScan(t *testing.T) { 651 table := createInitTable() 652 defer dropTable(table) 653 gtest.C(t, func(t *gtest.T) { 654 type User struct { 655 Id int 656 Passport string 657 Password string 658 NickName string 659 CreateTime gtime.Time 660 } 661 user := new(User) 662 err := db.GetScan(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3) 663 t.AssertNil(err) 664 t.Assert(user.NickName, "name_3") 665 }) 666 gtest.C(t, func(t *gtest.T) { 667 type User struct { 668 Id int 669 Passport string 670 Password string 671 NickName string 672 CreateTime *gtime.Time 673 } 674 user := new(User) 675 err := db.GetScan(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3) 676 t.AssertNil(err) 677 t.Assert(user.NickName, "name_3") 678 }) 679 680 gtest.C(t, func(t *gtest.T) { 681 type User struct { 682 Id int 683 Passport string 684 Password string 685 NickName string 686 CreateTime gtime.Time 687 } 688 var users []User 689 err := db.GetScan(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>?", table), 1) 690 t.AssertNil(err) 691 t.Assert(len(users), TableSize-1) 692 t.Assert(users[0].Id, 2) 693 t.Assert(users[1].Id, 3) 694 t.Assert(users[2].Id, 4) 695 t.Assert(users[0].NickName, "name_2") 696 t.Assert(users[1].NickName, "name_3") 697 t.Assert(users[2].NickName, "name_4") 698 }) 699 700 gtest.C(t, func(t *gtest.T) { 701 type User struct { 702 Id int 703 Passport string 704 Password string 705 NickName string 706 CreateTime *gtime.Time 707 } 708 var users []User 709 err := db.GetScan(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>?", table), 1) 710 t.AssertNil(err) 711 t.Assert(len(users), TableSize-1) 712 t.Assert(users[0].Id, 2) 713 t.Assert(users[1].Id, 3) 714 t.Assert(users[2].Id, 4) 715 t.Assert(users[0].NickName, "name_2") 716 t.Assert(users[1].NickName, "name_3") 717 t.Assert(users[2].NickName, "name_4") 718 }) 719 } 720 721 func Test_DB_Delete(t *testing.T) { 722 table := createInitTable() 723 defer dropTable(table) 724 gtest.C(t, func(t *gtest.T) { 725 result, err := db.Delete(table, 1) 726 t.AssertNil(err) 727 n, _ := result.RowsAffected() 728 t.Assert(n, TableSize) 729 }) 730 } 731 732 func Test_DB_Time(t *testing.T) { 733 table := createTable() 734 defer dropTable(table) 735 736 gtest.C(t, func(t *gtest.T) { 737 result, err := db.Insert(table, g.Map{ 738 "id": 200, 739 "passport": "t200", 740 "password": "123456", 741 "nickname": "T200", 742 "create_time": time.Now(), 743 }) 744 if err != nil { 745 gtest.Error(err) 746 } 747 n, _ := result.RowsAffected() 748 t.Assert(n, 1) 749 value, err := db.GetValue(fmt.Sprintf("select `passport` from `%s` where id=?", table), 200) 750 t.AssertNil(err) 751 t.Assert(value.String(), "t200") 752 }) 753 754 gtest.C(t, func(t *gtest.T) { 755 t1 := time.Now() 756 result, err := db.Insert(table, g.Map{ 757 "id": 300, 758 "passport": "t300", 759 "password": "123456", 760 "nickname": "T300", 761 "create_time": &t1, 762 }) 763 if err != nil { 764 gtest.Error(err) 765 } 766 n, _ := result.RowsAffected() 767 t.Assert(n, 1) 768 value, err := db.GetValue(fmt.Sprintf("select `passport` from `%s` where id=?", table), 300) 769 t.AssertNil(err) 770 t.Assert(value.String(), "t300") 771 }) 772 773 gtest.C(t, func(t *gtest.T) { 774 result, err := db.Delete(table, 1) 775 t.AssertNil(err) 776 n, _ := result.RowsAffected() 777 t.Assert(n, 2) 778 }) 779 } 780 781 func Test_DB_ToJson(t *testing.T) { 782 table := createInitTable() 783 defer dropTable(table) 784 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 785 gtest.AssertNil(err) 786 787 gtest.C(t, func(t *gtest.T) { 788 result, err := db.Model(table).Fields("*").Where("id =? ", 1).Select() 789 if err != nil { 790 gtest.Fatal(err) 791 } 792 793 type User struct { 794 Id int 795 Passport string 796 Password string 797 NickName string 798 CreateTime string 799 } 800 801 users := make([]User, 0) 802 803 err = result.Structs(users) 804 t.AssertNE(err, nil) 805 806 err = result.Structs(&users) 807 if err != nil { 808 gtest.Fatal(err) 809 } 810 811 //ToJson 812 resultJson, err := gjson.LoadContent(result.Json()) 813 if err != nil { 814 gtest.Fatal(err) 815 } 816 817 t.Assert(users[0].Id, resultJson.GetInt("0.id")) 818 t.Assert(users[0].Passport, resultJson.GetString("0.passport")) 819 t.Assert(users[0].Password, resultJson.GetString("0.password")) 820 t.Assert(users[0].NickName, resultJson.GetString("0.nickname")) 821 t.Assert(users[0].CreateTime, resultJson.GetString("0.create_time")) 822 823 result = nil 824 err = result.Structs(&users) 825 t.AssertNil(err) 826 }) 827 828 gtest.C(t, func(t *gtest.T) { 829 result, err := db.Model(table).Fields("*").Where("id =? ", 1).One() 830 if err != nil { 831 gtest.Fatal(err) 832 } 833 834 type User struct { 835 Id int 836 Passport string 837 Password string 838 NickName string 839 CreateTime string 840 } 841 842 users := User{} 843 844 err = result.Struct(&users) 845 if err != nil { 846 gtest.Fatal(err) 847 } 848 849 result = nil 850 err = result.Struct(&users) 851 t.AssertNE(err, nil) 852 }) 853 } 854 855 func Test_DB_ToXml(t *testing.T) { 856 table := createInitTable() 857 defer dropTable(table) 858 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 859 gtest.AssertNil(err) 860 861 gtest.C(t, func(t *gtest.T) { 862 record, err := db.Model(table).Fields("*").Where("id = ?", 1).One() 863 if err != nil { 864 gtest.Fatal(err) 865 } 866 867 type User struct { 868 Id int 869 Passport string 870 Password string 871 NickName string 872 CreateTime string 873 } 874 875 user := User{} 876 err = record.Struct(&user) 877 if err != nil { 878 gtest.Fatal(err) 879 } 880 881 result, err := gxml.Decode([]byte(record.Xml("doc"))) 882 if err != nil { 883 gtest.Fatal(err) 884 } 885 886 resultXml := result["doc"].(map[string]interface{}) 887 if v, ok := resultXml["id"]; ok { 888 t.Assert(user.Id, v) 889 } else { 890 gtest.Fatal("FAIL") 891 } 892 893 if v, ok := resultXml["passport"]; ok { 894 t.Assert(user.Passport, v) 895 } else { 896 gtest.Fatal("FAIL") 897 } 898 899 if v, ok := resultXml["password"]; ok { 900 t.Assert(user.Password, v) 901 } else { 902 gtest.Fatal("FAIL") 903 } 904 905 if v, ok := resultXml["nickname"]; ok { 906 t.Assert(user.NickName, v) 907 } else { 908 gtest.Fatal("FAIL") 909 } 910 911 if v, ok := resultXml["create_time"]; ok { 912 t.Assert(user.CreateTime, v) 913 } else { 914 gtest.Fatal("FAIL") 915 } 916 917 }) 918 } 919 920 func Test_DB_ToStringMap(t *testing.T) { 921 922 table := createInitTable() 923 defer dropTable(table) 924 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 925 gtest.AssertNil(err) 926 gtest.C(t, func(t *gtest.T) { 927 id := "1" 928 result, err := db.Model(table).Fields("*").Where("id = ?", 1).Select() 929 if err != nil { 930 gtest.Fatal(err) 931 } 932 933 type t_user struct { 934 Id int 935 Passport string 936 Password string 937 NickName string 938 CreateTime string 939 } 940 941 t_users := make([]t_user, 0) 942 err = result.Structs(&t_users) 943 if err != nil { 944 gtest.Fatal(err) 945 } 946 947 resultStringMap := result.MapKeyStr("id") 948 t.Assert(t_users[0].Id, resultStringMap[id]["id"]) 949 t.Assert(t_users[0].Passport, resultStringMap[id]["passport"]) 950 t.Assert(t_users[0].Password, resultStringMap[id]["password"]) 951 t.Assert(t_users[0].NickName, resultStringMap[id]["nickname"]) 952 t.Assert(t_users[0].CreateTime, resultStringMap[id]["create_time"]) 953 }) 954 } 955 956 func Test_DB_ToIntMap(t *testing.T) { 957 958 table := createInitTable() 959 defer dropTable(table) 960 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 961 gtest.AssertNil(err) 962 963 gtest.C(t, func(t *gtest.T) { 964 id := 1 965 result, err := db.Model(table).Fields("*").Where("id = ?", id).Select() 966 if err != nil { 967 gtest.Fatal(err) 968 } 969 970 type t_user struct { 971 Id int 972 Passport string 973 Password string 974 NickName string 975 CreateTime string 976 } 977 978 t_users := make([]t_user, 0) 979 err = result.Structs(&t_users) 980 if err != nil { 981 gtest.Fatal(err) 982 } 983 984 resultIntMap := result.MapKeyInt("id") 985 t.Assert(t_users[0].Id, resultIntMap[id]["id"]) 986 t.Assert(t_users[0].Passport, resultIntMap[id]["passport"]) 987 t.Assert(t_users[0].Password, resultIntMap[id]["password"]) 988 t.Assert(t_users[0].NickName, resultIntMap[id]["nickname"]) 989 t.Assert(t_users[0].CreateTime, resultIntMap[id]["create_time"]) 990 }) 991 } 992 993 func Test_DB_ToUintMap(t *testing.T) { 994 table := createInitTable() 995 defer dropTable(table) 996 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 997 gtest.AssertNil(err) 998 999 gtest.C(t, func(t *gtest.T) { 1000 id := 1 1001 result, err := db.Model(table).Fields("*").Where("id = ?", id).Select() 1002 if err != nil { 1003 gtest.Fatal(err) 1004 } 1005 1006 type t_user struct { 1007 Id int 1008 Passport string 1009 Password string 1010 NickName string 1011 CreateTime string 1012 } 1013 1014 t_users := make([]t_user, 0) 1015 err = result.Structs(&t_users) 1016 if err != nil { 1017 gtest.Fatal(err) 1018 } 1019 1020 resultUintMap := result.MapKeyUint("id") 1021 t.Assert(t_users[0].Id, resultUintMap[uint(id)]["id"]) 1022 t.Assert(t_users[0].Passport, resultUintMap[uint(id)]["passport"]) 1023 t.Assert(t_users[0].Password, resultUintMap[uint(id)]["password"]) 1024 t.Assert(t_users[0].NickName, resultUintMap[uint(id)]["nickname"]) 1025 t.Assert(t_users[0].CreateTime, resultUintMap[uint(id)]["create_time"]) 1026 1027 }) 1028 } 1029 1030 func Test_DB_ToStringRecord(t *testing.T) { 1031 table := createInitTable() 1032 defer dropTable(table) 1033 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 1034 gtest.AssertNil(err) 1035 1036 gtest.C(t, func(t *gtest.T) { 1037 id := 1 1038 ids := "1" 1039 result, err := db.Model(table).Fields("*").Where("id = ?", id).Select() 1040 if err != nil { 1041 gtest.Fatal(err) 1042 } 1043 1044 type t_user struct { 1045 Id int 1046 Passport string 1047 Password string 1048 NickName string 1049 CreateTime string 1050 } 1051 1052 t_users := make([]t_user, 0) 1053 err = result.Structs(&t_users) 1054 if err != nil { 1055 gtest.Fatal(err) 1056 } 1057 1058 resultStringRecord := result.RecordKeyStr("id") 1059 t.Assert(t_users[0].Id, resultStringRecord[ids]["id"].Int()) 1060 t.Assert(t_users[0].Passport, resultStringRecord[ids]["passport"].String()) 1061 t.Assert(t_users[0].Password, resultStringRecord[ids]["password"].String()) 1062 t.Assert(t_users[0].NickName, resultStringRecord[ids]["nickname"].String()) 1063 t.Assert(t_users[0].CreateTime, resultStringRecord[ids]["create_time"].String()) 1064 1065 }) 1066 } 1067 1068 func Test_DB_ToIntRecord(t *testing.T) { 1069 table := createInitTable() 1070 defer dropTable(table) 1071 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 1072 gtest.AssertNil(err) 1073 1074 gtest.C(t, func(t *gtest.T) { 1075 id := 1 1076 result, err := db.Model(table).Fields("*").Where("id = ?", id).Select() 1077 if err != nil { 1078 gtest.Fatal(err) 1079 } 1080 1081 type t_user struct { 1082 Id int 1083 Passport string 1084 Password string 1085 NickName string 1086 CreateTime string 1087 } 1088 1089 t_users := make([]t_user, 0) 1090 err = result.Structs(&t_users) 1091 if err != nil { 1092 gtest.Fatal(err) 1093 } 1094 1095 resultIntRecord := result.RecordKeyInt("id") 1096 t.Assert(t_users[0].Id, resultIntRecord[id]["id"].Int()) 1097 t.Assert(t_users[0].Passport, resultIntRecord[id]["passport"].String()) 1098 t.Assert(t_users[0].Password, resultIntRecord[id]["password"].String()) 1099 t.Assert(t_users[0].NickName, resultIntRecord[id]["nickname"].String()) 1100 t.Assert(t_users[0].CreateTime, resultIntRecord[id]["create_time"].String()) 1101 1102 }) 1103 } 1104 1105 func Test_DB_ToUintRecord(t *testing.T) { 1106 table := createInitTable() 1107 defer dropTable(table) 1108 _, err := db.Update(table, "create_time='2010-10-10 00:00:01'", "id=?", 1) 1109 gtest.AssertNil(err) 1110 1111 gtest.C(t, func(t *gtest.T) { 1112 id := 1 1113 result, err := db.Model(table).Fields("*").Where("id = ?", id).Select() 1114 if err != nil { 1115 gtest.Fatal(err) 1116 } 1117 1118 type t_user struct { 1119 Id int 1120 Passport string 1121 Password string 1122 NickName string 1123 CreateTime string 1124 } 1125 1126 t_users := make([]t_user, 0) 1127 err = result.Structs(&t_users) 1128 if err != nil { 1129 gtest.Fatal(err) 1130 } 1131 1132 resultUintRecord := result.RecordKeyUint("id") 1133 t.Assert(t_users[0].Id, resultUintRecord[uint(id)]["id"].Int()) 1134 t.Assert(t_users[0].Passport, resultUintRecord[uint(id)]["passport"].String()) 1135 t.Assert(t_users[0].Password, resultUintRecord[uint(id)]["password"].String()) 1136 t.Assert(t_users[0].NickName, resultUintRecord[uint(id)]["nickname"].String()) 1137 t.Assert(t_users[0].CreateTime, resultUintRecord[uint(id)]["create_time"].String()) 1138 }) 1139 } 1140 1141 func Test_DB_TableField(t *testing.T) { 1142 name := "field_test" 1143 dropTable(name) 1144 defer dropTable(name) 1145 _, err := db.Exec(fmt.Sprintf(` 1146 CREATE TABLE %s ( 1147 field_tinyint tinyint(8) NULL , 1148 field_int int(8) NULL , 1149 field_integer integer(8) NULL , 1150 field_bigint bigint(8) NULL , 1151 field_bit bit(3) NULL , 1152 field_real real(8,0) NULL , 1153 field_double double(12,2) NULL , 1154 field_varchar varchar(10) NULL , 1155 field_varbinary varbinary(255) NULL 1156 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1157 `, name)) 1158 if err != nil { 1159 gtest.Fatal(err) 1160 } 1161 1162 data := gdb.Map{ 1163 "field_tinyint": 1, 1164 "field_int": 2, 1165 "field_integer": 3, 1166 "field_bigint": 4, 1167 "field_bit": 6, 1168 "field_real": 123, 1169 "field_double": 123.25, 1170 "field_varchar": "abc", 1171 "field_varbinary": "aaa", 1172 } 1173 res, err := db.Model(name).Data(data).Insert() 1174 if err != nil { 1175 gtest.Fatal(err) 1176 } 1177 1178 n, err := res.RowsAffected() 1179 if err != nil { 1180 gtest.Fatal(err) 1181 } else { 1182 gtest.Assert(n, 1) 1183 } 1184 1185 result, err := db.Model(name).Fields("*").Where("field_int = ?", 2).Select() 1186 if err != nil { 1187 gtest.Fatal(err) 1188 } 1189 1190 gtest.Assert(result[0], data) 1191 } 1192 1193 func Test_DB_Prefix(t *testing.T) { 1194 db := dbPrefix 1195 name := fmt.Sprintf(`%s_%d`, TableName, gtime.TimestampNano()) 1196 table := TableNamePrefix1 + name 1197 createTableWithDb(db, table) 1198 defer dropTable(table) 1199 1200 gtest.C(t, func(t *gtest.T) { 1201 id := 10000 1202 result, err := db.Insert(name, g.Map{ 1203 "id": id, 1204 "passport": fmt.Sprintf(`user_%d`, id), 1205 "password": fmt.Sprintf(`pass_%d`, id), 1206 "nickname": fmt.Sprintf(`name_%d`, id), 1207 "create_time": gtime.NewFromStr("2018-10-24 10:00:00").String(), 1208 }) 1209 t.AssertNil(err) 1210 1211 n, e := result.RowsAffected() 1212 t.Assert(e, nil) 1213 t.Assert(n, 1) 1214 }) 1215 1216 gtest.C(t, func(t *gtest.T) { 1217 id := 10000 1218 result, err := db.Replace(name, g.Map{ 1219 "id": id, 1220 "passport": fmt.Sprintf(`user_%d`, id), 1221 "password": fmt.Sprintf(`pass_%d`, id), 1222 "nickname": fmt.Sprintf(`name_%d`, id), 1223 "create_time": gtime.NewFromStr("2018-10-24 10:00:01").String(), 1224 }) 1225 t.AssertNil(err) 1226 1227 n, e := result.RowsAffected() 1228 t.Assert(e, nil) 1229 t.Assert(n, 2) 1230 }) 1231 1232 gtest.C(t, func(t *gtest.T) { 1233 id := 10000 1234 result, err := db.Save(name, g.Map{ 1235 "id": id, 1236 "passport": fmt.Sprintf(`user_%d`, id), 1237 "password": fmt.Sprintf(`pass_%d`, id), 1238 "nickname": fmt.Sprintf(`name_%d`, id), 1239 "create_time": gtime.NewFromStr("2018-10-24 10:00:02").String(), 1240 }) 1241 t.AssertNil(err) 1242 1243 n, e := result.RowsAffected() 1244 t.Assert(e, nil) 1245 t.Assert(n, 2) 1246 }) 1247 1248 gtest.C(t, func(t *gtest.T) { 1249 id := 10000 1250 result, err := db.Update(name, g.Map{ 1251 "id": id, 1252 "passport": fmt.Sprintf(`user_%d`, id), 1253 "password": fmt.Sprintf(`pass_%d`, id), 1254 "nickname": fmt.Sprintf(`name_%d`, id), 1255 "create_time": gtime.NewFromStr("2018-10-24 10:00:03").String(), 1256 }, "id=?", id) 1257 t.AssertNil(err) 1258 1259 n, e := result.RowsAffected() 1260 t.Assert(e, nil) 1261 t.Assert(n, 1) 1262 }) 1263 1264 gtest.C(t, func(t *gtest.T) { 1265 id := 10000 1266 result, err := db.Delete(name, "id=?", id) 1267 t.AssertNil(err) 1268 1269 n, e := result.RowsAffected() 1270 t.Assert(e, nil) 1271 t.Assert(n, 1) 1272 }) 1273 1274 gtest.C(t, func(t *gtest.T) { 1275 array := garray.New(true) 1276 for i := 1; i <= TableSize; i++ { 1277 array.Append(g.Map{ 1278 "id": i, 1279 "passport": fmt.Sprintf(`user_%d`, i), 1280 "password": fmt.Sprintf(`pass_%d`, i), 1281 "nickname": fmt.Sprintf(`name_%d`, i), 1282 "create_time": gtime.NewFromStr("2018-10-24 10:00:00").String(), 1283 }) 1284 } 1285 1286 result, err := db.Insert(name, array.Slice()) 1287 t.AssertNil(err) 1288 1289 n, e := result.RowsAffected() 1290 t.Assert(e, nil) 1291 t.Assert(n, TableSize) 1292 }) 1293 1294 } 1295 1296 func Test_Model_InnerJoin(t *testing.T) { 1297 gtest.C(t, func(t *gtest.T) { 1298 table1 := createInitTable("user1") 1299 table2 := createInitTable("user2") 1300 1301 defer dropTable(table1) 1302 defer dropTable(table2) 1303 1304 res, err := db.Model(table1).Where("id > ?", 5).Delete() 1305 if err != nil { 1306 t.Fatal(err) 1307 } 1308 1309 n, err := res.RowsAffected() 1310 if err != nil { 1311 t.Fatal(err) 1312 } 1313 1314 t.Assert(n, 5) 1315 1316 result, err := db.Model(table1+" u1").InnerJoin(table2+" u2", "u1.id = u2.id").OrderBy("u1.id").Select() 1317 if err != nil { 1318 t.Fatal(err) 1319 } 1320 1321 t.Assert(len(result), 5) 1322 1323 result, err = db.Model(table1+" u1").InnerJoin(table2+" u2", "u1.id = u2.id").Where("u1.id > ?", 1).OrderBy("u1.id").Select() 1324 if err != nil { 1325 t.Fatal(err) 1326 } 1327 1328 t.Assert(len(result), 4) 1329 }) 1330 } 1331 1332 func Test_Model_LeftJoin(t *testing.T) { 1333 gtest.C(t, func(t *gtest.T) { 1334 table1 := createInitTable("user1") 1335 table2 := createInitTable("user2") 1336 1337 defer dropTable(table1) 1338 defer dropTable(table2) 1339 1340 res, err := db.Model(table2).Where("id > ?", 3).Delete() 1341 if err != nil { 1342 t.Fatal(err) 1343 } 1344 1345 n, err := res.RowsAffected() 1346 if err != nil { 1347 t.Fatal(err) 1348 } else { 1349 t.Assert(n, 7) 1350 } 1351 1352 result, err := db.Model(table1+" u1").LeftJoin(table2+" u2", "u1.id = u2.id").Select() 1353 if err != nil { 1354 t.Fatal(err) 1355 } 1356 1357 t.Assert(len(result), 10) 1358 1359 result, err = db.Model(table1+" u1").LeftJoin(table2+" u2", "u1.id = u2.id").Where("u1.id > ? ", 2).Select() 1360 if err != nil { 1361 t.Fatal(err) 1362 } 1363 1364 t.Assert(len(result), 8) 1365 }) 1366 } 1367 1368 func Test_Model_RightJoin(t *testing.T) { 1369 gtest.C(t, func(t *gtest.T) { 1370 table1 := createInitTable("user1") 1371 table2 := createInitTable("user2") 1372 1373 defer dropTable(table1) 1374 defer dropTable(table2) 1375 1376 res, err := db.Model(table1).Where("id > ?", 3).Delete() 1377 if err != nil { 1378 t.Fatal(err) 1379 } 1380 1381 n, err := res.RowsAffected() 1382 if err != nil { 1383 t.Fatal(err) 1384 } 1385 1386 t.Assert(n, 7) 1387 1388 result, err := db.Model(table1+" u1").RightJoin(table2+" u2", "u1.id = u2.id").Select() 1389 if err != nil { 1390 t.Fatal(err) 1391 } 1392 t.Assert(len(result), 10) 1393 1394 result, err = db.Model(table1+" u1").RightJoin(table2+" u2", "u1.id = u2.id").Where("u1.id > 2").Select() 1395 if err != nil { 1396 t.Fatal(err) 1397 } 1398 t.Assert(len(result), 1) 1399 }) 1400 } 1401 1402 func Test_Empty_Slice_Argument(t *testing.T) { 1403 table := createInitTable() 1404 defer dropTable(table) 1405 gtest.C(t, func(t *gtest.T) { 1406 result, err := db.GetAll(fmt.Sprintf(`select * from %s where id in(?)`, table), g.Slice{}) 1407 t.AssertNil(err) 1408 t.Assert(len(result), 0) 1409 }) 1410 } 1411 1412 // update counter test 1413 func Test_DB_UpdateCounter(t *testing.T) { 1414 tableName := "gf_update_counter_test_" + gtime.TimestampNanoStr() 1415 _, err := db.Exec(fmt.Sprintf(` 1416 CREATE TABLE IF NOT EXISTS %s ( 1417 id int(10) unsigned NOT NULL, 1418 views int(8) unsigned DEFAULT '0' NOT NULL , 1419 updated_time int(10) unsigned DEFAULT '0' NOT NULL 1420 ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 1421 `, tableName)) 1422 if err != nil { 1423 gtest.Fatal(err) 1424 } 1425 defer dropTable(tableName) 1426 1427 gtest.C(t, func(t *gtest.T) { 1428 insertData := g.Map{ 1429 "id": 1, 1430 "views": 0, 1431 "updated_time": 0, 1432 } 1433 _, err = db.Insert(tableName, insertData) 1434 t.AssertNil(err) 1435 }) 1436 1437 gtest.C(t, func(t *gtest.T) { 1438 gdbCounter := &gdb.Counter{ 1439 Field: "id", 1440 Value: 1, 1441 } 1442 updateData := g.Map{ 1443 "views": gdbCounter, 1444 } 1445 result, err := db.Update(tableName, updateData, "id", 1) 1446 t.AssertNil(err) 1447 n, _ := result.RowsAffected() 1448 t.Assert(n, 1) 1449 one, err := db.Model(tableName).Where("id", 1).One() 1450 t.AssertNil(err) 1451 t.Assert(one["id"].Int(), 1) 1452 t.Assert(one["views"].Int(), 2) 1453 }) 1454 1455 gtest.C(t, func(t *gtest.T) { 1456 gdbCounter := &gdb.Counter{ 1457 Field: "views", 1458 Value: -1, 1459 } 1460 updateData := g.Map{ 1461 "views": gdbCounter, 1462 "updated_time": gtime.Now().Unix(), 1463 } 1464 result, err := db.Update(tableName, updateData, "id", 1) 1465 t.AssertNil(err) 1466 n, _ := result.RowsAffected() 1467 t.Assert(n, 1) 1468 one, err := db.Model(tableName).Where("id", 1).One() 1469 t.AssertNil(err) 1470 t.Assert(one["id"].Int(), 1) 1471 t.Assert(one["views"].Int(), 1) 1472 }) 1473 } 1474 1475 func Test_DB_Ctx(t *testing.T) { 1476 gtest.C(t, func(t *gtest.T) { 1477 ctx, cancel := context.WithTimeout(context.Background(), time.Second) 1478 defer cancel() 1479 _, err := db.Ctx(ctx).Query("SELECT SLEEP(10)") 1480 t.Assert(gstr.Contains(err.Error(), "deadline"), true) 1481 }) 1482 } 1483 1484 func Test_DB_Ctx_Logger(t *testing.T) { 1485 gtest.C(t, func(t *gtest.T) { 1486 defer db.SetDebug(db.GetDebug()) 1487 db.SetDebug(true) 1488 ctx := context.WithValue(context.Background(), "Trace-Id", "123456789") 1489 _, err := db.Ctx(ctx).Query("SELECT 1") 1490 t.AssertNil(err) 1491 }) 1492 }