github.com/zhongdalu/gf@v1.0.0/g/database/gdb/gdb_unit_z_transaction_test.go (about) 1 // Copyright 2019 gf Author(https://github.com/zhongdalu/gf). 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/zhongdalu/gf. 6 7 package gdb_test 8 9 import ( 10 "fmt" 11 "testing" 12 13 "github.com/zhongdalu/gf/g" 14 "github.com/zhongdalu/gf/g/os/gtime" 15 "github.com/zhongdalu/gf/g/test/gtest" 16 ) 17 18 func Test_TX_Query(t *testing.T) { 19 tx, err := db.Begin() 20 if err != nil { 21 gtest.Error(err) 22 } 23 if rows, err := tx.Query("SELECT ?", 1); err != nil { 24 gtest.Error(err) 25 } else { 26 rows.Close() 27 } 28 if rows, err := tx.Query("SELECT ?+?", 1, 2); err != nil { 29 gtest.Error(err) 30 } else { 31 rows.Close() 32 } 33 if rows, err := tx.Query("SELECT ?+?", g.Slice{1, 2}); err != nil { 34 gtest.Error(err) 35 } else { 36 rows.Close() 37 } 38 if _, err := tx.Query("ERROR"); err == nil { 39 gtest.Error("FAIL") 40 } 41 if err := tx.Commit(); err != nil { 42 gtest.Error(err) 43 } 44 } 45 46 func Test_TX_Exec(t *testing.T) { 47 tx, err := db.Begin() 48 if err != nil { 49 gtest.Error(err) 50 } 51 if _, err := tx.Exec("SELECT ?", 1); err != nil { 52 gtest.Error(err) 53 } 54 if _, err := tx.Exec("SELECT ?+?", 1, 2); err != nil { 55 gtest.Error(err) 56 } 57 if _, err := tx.Exec("SELECT ?+?", g.Slice{1, 2}); err != nil { 58 gtest.Error(err) 59 } 60 if _, err := tx.Exec("ERROR"); err == nil { 61 gtest.Error("FAIL") 62 } 63 if err := tx.Commit(); err != nil { 64 gtest.Error(err) 65 } 66 } 67 68 func Test_TX_Commit(t *testing.T) { 69 tx, err := db.Begin() 70 if err != nil { 71 gtest.Error(err) 72 } 73 if err := tx.Commit(); err != nil { 74 gtest.Error(err) 75 } 76 } 77 78 func Test_TX_Rollback(t *testing.T) { 79 tx, err := db.Begin() 80 if err != nil { 81 gtest.Error(err) 82 } 83 if err := tx.Rollback(); err != nil { 84 gtest.Error(err) 85 } 86 } 87 88 func Test_TX_Prepare(t *testing.T) { 89 tx, err := db.Begin() 90 if err != nil { 91 gtest.Error(err) 92 } 93 st, err := tx.Prepare("SELECT 100") 94 if err != nil { 95 gtest.Error(err) 96 } 97 rows, err := st.Query() 98 if err != nil { 99 gtest.Error(err) 100 } 101 array, err := rows.Columns() 102 if err != nil { 103 gtest.Error(err) 104 } 105 gtest.Assert(array[0], "100") 106 if err := rows.Close(); err != nil { 107 gtest.Error(err) 108 } 109 if err := tx.Commit(); err != nil { 110 gtest.Error(err) 111 } 112 } 113 114 func Test_TX_Insert(t *testing.T) { 115 table := createTable() 116 defer dropTable(table) 117 118 gtest.Case(t, func() { 119 tx, err := db.Begin() 120 if err != nil { 121 gtest.Error(err) 122 } 123 if _, err := tx.Insert(table, g.Map{ 124 "id": 1, 125 "passport": "t1", 126 "password": "25d55ad283aa400af464c76d713c07ad", 127 "nickname": "T1", 128 "create_time": gtime.Now().String(), 129 }); err != nil { 130 gtest.Error(err) 131 } 132 if err := tx.Commit(); err != nil { 133 gtest.Error(err) 134 } 135 if n, err := db.Table(table).Count(); err != nil { 136 gtest.Error(err) 137 } else { 138 gtest.Assert(n, 1) 139 } 140 }) 141 } 142 143 func Test_TX_BatchInsert(t *testing.T) { 144 table := createTable() 145 defer dropTable(table) 146 147 gtest.Case(t, func() { 148 tx, err := db.Begin() 149 if err != nil { 150 gtest.Error(err) 151 } 152 if _, err := tx.BatchInsert(table, g.List{ 153 { 154 "id": 2, 155 "passport": "t", 156 "password": "25d55ad283aa400af464c76d713c07ad", 157 "nickname": "T2", 158 "create_time": gtime.Now().String(), 159 }, 160 { 161 "id": 3, 162 "passport": "t3", 163 "password": "25d55ad283aa400af464c76d713c07ad", 164 "nickname": "T3", 165 "create_time": gtime.Now().String(), 166 }, 167 }, 10); err != nil { 168 gtest.Error(err) 169 } 170 if err := tx.Commit(); err != nil { 171 gtest.Error(err) 172 } 173 if n, err := db.Table(table).Count(); err != nil { 174 gtest.Error(err) 175 } else { 176 gtest.Assert(n, 2) 177 } 178 }) 179 } 180 181 func Test_TX_BatchReplace(t *testing.T) { 182 table := createInitTable() 183 defer dropTable(table) 184 185 gtest.Case(t, func() { 186 tx, err := db.Begin() 187 if err != nil { 188 gtest.Error(err) 189 } 190 if _, err := tx.BatchReplace(table, g.List{ 191 { 192 "id": 2, 193 "passport": "USER_2", 194 "password": "PASS_2", 195 "nickname": "NAME_2", 196 "create_time": gtime.Now().String(), 197 }, 198 { 199 "id": 4, 200 "passport": "USER_4", 201 "password": "PASS_4", 202 "nickname": "NAME_4", 203 "create_time": gtime.Now().String(), 204 }, 205 }, 10); err != nil { 206 gtest.Error(err) 207 } 208 if err := tx.Commit(); err != nil { 209 gtest.Error(err) 210 } 211 if n, err := db.Table(table).Count(); err != nil { 212 gtest.Error(err) 213 } else { 214 gtest.Assert(n, INIT_DATA_SIZE) 215 } 216 if value, err := db.Table(table).Fields("password").Where("id", 2).Value(); err != nil { 217 gtest.Error(err) 218 } else { 219 gtest.Assert(value.String(), "PASS_2") 220 } 221 }) 222 } 223 224 func Test_TX_BatchSave(t *testing.T) { 225 table := createInitTable() 226 defer dropTable(table) 227 228 gtest.Case(t, func() { 229 tx, err := db.Begin() 230 if err != nil { 231 gtest.Error(err) 232 } 233 if _, err := tx.BatchSave(table, g.List{ 234 { 235 "id": 4, 236 "passport": "USER_4", 237 "password": "PASS_4", 238 "nickname": "NAME_4", 239 "create_time": gtime.Now().String(), 240 }, 241 }, 10); err != nil { 242 gtest.Error(err) 243 } 244 if err := tx.Commit(); err != nil { 245 gtest.Error(err) 246 } 247 248 if n, err := db.Table(table).Count(); err != nil { 249 gtest.Error(err) 250 } else { 251 gtest.Assert(n, INIT_DATA_SIZE) 252 } 253 254 if value, err := db.Table(table).Fields("password").Where("id", 4).Value(); err != nil { 255 gtest.Error(err) 256 } else { 257 gtest.Assert(value.String(), "PASS_4") 258 } 259 }) 260 } 261 262 func Test_TX_Replace(t *testing.T) { 263 table := createInitTable() 264 defer dropTable(table) 265 266 gtest.Case(t, func() { 267 tx, err := db.Begin() 268 if err != nil { 269 gtest.Error(err) 270 } 271 if _, err := tx.Replace(table, g.Map{ 272 "id": 1, 273 "passport": "USER_1", 274 "password": "PASS_1", 275 "nickname": "NAME_1", 276 "create_time": gtime.Now().String(), 277 }); err != nil { 278 gtest.Error(err) 279 } 280 if err := tx.Rollback(); err != nil { 281 gtest.Error(err) 282 } 283 if value, err := db.Table(table).Fields("nickname").Where("id", 1).Value(); err != nil { 284 gtest.Error(err) 285 } else { 286 gtest.Assert(value.String(), "name_1") 287 } 288 }) 289 290 } 291 292 func Test_TX_Save(t *testing.T) { 293 table := createInitTable() 294 defer dropTable(table) 295 296 gtest.Case(t, func() { 297 tx, err := db.Begin() 298 if err != nil { 299 gtest.Error(err) 300 } 301 if _, err := tx.Save(table, g.Map{ 302 "id": 1, 303 "passport": "USER_1", 304 "password": "PASS_1", 305 "nickname": "NAME_1", 306 "create_time": gtime.Now().String(), 307 }); err != nil { 308 gtest.Error(err) 309 } 310 if err := tx.Commit(); err != nil { 311 gtest.Error(err) 312 } 313 if value, err := db.Table(table).Fields("nickname").Where("id", 1).Value(); err != nil { 314 gtest.Error(err) 315 } else { 316 gtest.Assert(value.String(), "NAME_1") 317 } 318 }) 319 } 320 321 func Test_TX_Update(t *testing.T) { 322 table := createInitTable() 323 defer dropTable(table) 324 325 gtest.Case(t, func() { 326 tx, err := db.Begin() 327 if err != nil { 328 gtest.Error(err) 329 } 330 if result, err := tx.Update(table, "create_time='2019-10-24 10:00:00'", "id=3"); err != nil { 331 gtest.Error(err) 332 } else { 333 n, _ := result.RowsAffected() 334 gtest.Assert(n, 1) 335 } 336 if err := tx.Commit(); err != nil { 337 gtest.Error(err) 338 } 339 _, err = tx.Table(table).Fields("create_time").Where("id", 3).Value() 340 gtest.AssertNE(err, nil) 341 342 if value, err := db.Table(table).Fields("create_time").Where("id", 3).Value(); err != nil { 343 gtest.Error(err) 344 } else { 345 gtest.Assert(value.String(), "2019-10-24 10:00:00") 346 } 347 }) 348 } 349 350 func Test_TX_GetAll(t *testing.T) { 351 table := createInitTable() 352 defer dropTable(table) 353 354 gtest.Case(t, func() { 355 tx, err := db.Begin() 356 if err != nil { 357 gtest.Error(err) 358 } 359 if result, err := tx.GetAll(fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 1); err != nil { 360 gtest.Error(err) 361 } else { 362 gtest.Assert(len(result), 1) 363 } 364 if err := tx.Commit(); err != nil { 365 gtest.Error(err) 366 } 367 }) 368 } 369 370 func Test_TX_GetOne(t *testing.T) { 371 table := createInitTable() 372 defer dropTable(table) 373 374 gtest.Case(t, func() { 375 tx, err := db.Begin() 376 if err != nil { 377 gtest.Error(err) 378 } 379 if record, err := tx.GetOne(fmt.Sprintf("SELECT * FROM %s WHERE passport=?", table), "user_2"); err != nil { 380 gtest.Error(err) 381 } else { 382 if record == nil { 383 gtest.Error("FAIL") 384 } 385 gtest.Assert(record["nickname"].String(), "name_2") 386 } 387 if err := tx.Commit(); err != nil { 388 gtest.Error(err) 389 } 390 }) 391 } 392 393 func Test_TX_GetValue(t *testing.T) { 394 table := createInitTable() 395 defer dropTable(table) 396 397 gtest.Case(t, func() { 398 tx, err := db.Begin() 399 if err != nil { 400 gtest.Error(err) 401 } 402 if value, err := tx.GetValue(fmt.Sprintf("SELECT id FROM %s WHERE passport=?", table), "user_3"); err != nil { 403 gtest.Error(err) 404 } else { 405 gtest.Assert(value.Int(), 3) 406 } 407 if err := tx.Commit(); err != nil { 408 gtest.Error(err) 409 } 410 }) 411 412 } 413 414 func Test_TX_GetCount(t *testing.T) { 415 table := createInitTable() 416 defer dropTable(table) 417 418 gtest.Case(t, func() { 419 tx, err := db.Begin() 420 if err != nil { 421 gtest.Error(err) 422 } 423 if count, err := tx.GetCount("SELECT * FROM " + table); err != nil { 424 gtest.Error(err) 425 } else { 426 gtest.Assert(count, INIT_DATA_SIZE) 427 } 428 if err := tx.Commit(); err != nil { 429 gtest.Error(err) 430 } 431 }) 432 } 433 434 func Test_TX_GetStruct(t *testing.T) { 435 table := createInitTable() 436 defer dropTable(table) 437 438 gtest.Case(t, func() { 439 tx, err := db.Begin() 440 if err != nil { 441 gtest.Error(err) 442 } 443 type User struct { 444 Id int 445 Passport string 446 Password string 447 NickName string 448 CreateTime gtime.Time 449 } 450 user := new(User) 451 if err := tx.GetStruct(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3); err != nil { 452 gtest.Error(err) 453 } 454 gtest.Assert(user.NickName, "name_3") 455 gtest.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 456 if err := tx.Commit(); err != nil { 457 gtest.Error(err) 458 } 459 }) 460 gtest.Case(t, func() { 461 tx, err := db.Begin() 462 if err != nil { 463 gtest.Error(err) 464 } 465 type User struct { 466 Id int 467 Passport string 468 Password string 469 NickName string 470 CreateTime *gtime.Time 471 } 472 user := new(User) 473 if err := tx.GetStruct(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3); err != nil { 474 gtest.Error(err) 475 } 476 gtest.Assert(user.NickName, "name_3") 477 gtest.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 478 if err := tx.Commit(); err != nil { 479 gtest.Error(err) 480 } 481 }) 482 } 483 484 func Test_TX_GetStructs(t *testing.T) { 485 table := createInitTable() 486 defer dropTable(table) 487 488 gtest.Case(t, func() { 489 tx, err := db.Begin() 490 if err != nil { 491 gtest.Error(err) 492 } 493 type User struct { 494 Id int 495 Passport string 496 Password string 497 NickName string 498 CreateTime gtime.Time 499 } 500 var users []User 501 if err := tx.GetStructs(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>=?", table), 1); err != nil { 502 gtest.Error(err) 503 } 504 gtest.Assert(len(users), INIT_DATA_SIZE) 505 gtest.Assert(users[0].Id, 1) 506 gtest.Assert(users[1].Id, 2) 507 gtest.Assert(users[2].Id, 3) 508 gtest.Assert(users[0].NickName, "name_1") 509 gtest.Assert(users[1].NickName, "name_2") 510 gtest.Assert(users[2].NickName, "name_3") 511 gtest.Assert(users[2].CreateTime.String(), "2018-10-24 10:00:00") 512 if err := tx.Commit(); err != nil { 513 gtest.Error(err) 514 } 515 }) 516 517 gtest.Case(t, func() { 518 tx, err := db.Begin() 519 if err != nil { 520 gtest.Error(err) 521 } 522 type User struct { 523 Id int 524 Passport string 525 Password string 526 NickName string 527 CreateTime *gtime.Time 528 } 529 var users []User 530 if err := tx.GetStructs(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>=?", table), 1); err != nil { 531 gtest.Error(err) 532 } 533 gtest.Assert(len(users), INIT_DATA_SIZE) 534 gtest.Assert(users[0].Id, 1) 535 gtest.Assert(users[1].Id, 2) 536 gtest.Assert(users[2].Id, 3) 537 gtest.Assert(users[0].NickName, "name_1") 538 gtest.Assert(users[1].NickName, "name_2") 539 gtest.Assert(users[2].NickName, "name_3") 540 gtest.Assert(users[2].CreateTime.String(), "2018-10-24 10:00:00") 541 if err := tx.Commit(); err != nil { 542 gtest.Error(err) 543 } 544 }) 545 } 546 547 func Test_TX_GetScan(t *testing.T) { 548 table := createInitTable() 549 defer dropTable(table) 550 551 gtest.Case(t, func() { 552 tx, err := db.Begin() 553 if err != nil { 554 gtest.Error(err) 555 } 556 type User struct { 557 Id int 558 Passport string 559 Password string 560 NickName string 561 CreateTime gtime.Time 562 } 563 user := new(User) 564 if err := tx.GetScan(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3); err != nil { 565 gtest.Error(err) 566 } 567 gtest.Assert(user.NickName, "name_3") 568 gtest.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 569 if err := tx.Commit(); err != nil { 570 gtest.Error(err) 571 } 572 }) 573 gtest.Case(t, func() { 574 tx, err := db.Begin() 575 if err != nil { 576 gtest.Error(err) 577 } 578 type User struct { 579 Id int 580 Passport string 581 Password string 582 NickName string 583 CreateTime *gtime.Time 584 } 585 user := new(User) 586 if err := tx.GetScan(user, fmt.Sprintf("SELECT * FROM %s WHERE id=?", table), 3); err != nil { 587 gtest.Error(err) 588 } 589 gtest.Assert(user.NickName, "name_3") 590 gtest.Assert(user.CreateTime.String(), "2018-10-24 10:00:00") 591 if err := tx.Commit(); err != nil { 592 gtest.Error(err) 593 } 594 }) 595 596 gtest.Case(t, func() { 597 tx, err := db.Begin() 598 if err != nil { 599 gtest.Error(err) 600 } 601 type User struct { 602 Id int 603 Passport string 604 Password string 605 NickName string 606 CreateTime gtime.Time 607 } 608 var users []User 609 if err := tx.GetScan(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>=?", table), 1); err != nil { 610 gtest.Error(err) 611 } 612 gtest.Assert(len(users), INIT_DATA_SIZE) 613 gtest.Assert(users[0].Id, 1) 614 gtest.Assert(users[1].Id, 2) 615 gtest.Assert(users[2].Id, 3) 616 gtest.Assert(users[0].NickName, "name_1") 617 gtest.Assert(users[1].NickName, "name_2") 618 gtest.Assert(users[2].NickName, "name_3") 619 gtest.Assert(users[2].CreateTime.String(), "2018-10-24 10:00:00") 620 if err := tx.Commit(); err != nil { 621 gtest.Error(err) 622 } 623 }) 624 625 gtest.Case(t, func() { 626 tx, err := db.Begin() 627 if err != nil { 628 gtest.Error(err) 629 } 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 if err := tx.GetScan(&users, fmt.Sprintf("SELECT * FROM %s WHERE id>=?", table), 1); err != nil { 639 gtest.Error(err) 640 } 641 gtest.Assert(len(users), INIT_DATA_SIZE) 642 gtest.Assert(users[0].Id, 1) 643 gtest.Assert(users[1].Id, 2) 644 gtest.Assert(users[2].Id, 3) 645 gtest.Assert(users[0].NickName, "name_1") 646 gtest.Assert(users[1].NickName, "name_2") 647 gtest.Assert(users[2].NickName, "name_3") 648 gtest.Assert(users[2].CreateTime.String(), "2018-10-24 10:00:00") 649 if err := tx.Commit(); err != nil { 650 gtest.Error(err) 651 } 652 }) 653 } 654 655 func Test_TX_Delete(t *testing.T) { 656 table := createInitTable() 657 defer dropTable(table) 658 659 gtest.Case(t, func() { 660 tx, err := db.Begin() 661 if err != nil { 662 gtest.Error(err) 663 } 664 if _, err := tx.Delete(table, nil); err != nil { 665 gtest.Error(err) 666 } 667 if err := tx.Commit(); err != nil { 668 gtest.Error(err) 669 } 670 if n, err := db.Table(table).Count(); err != nil { 671 gtest.Error(err) 672 } else { 673 gtest.Assert(n, 0) 674 } 675 }) 676 677 }