| 394 | } |
| 395 | |
| 396 | func TestTxNestedTransactionCommit(t *testing.T) { |
| 397 | t.Parallel() |
| 398 | |
| 399 | conn := mustConnectString(t, os.Getenv("PGX_TEST_DATABASE")) |
| 400 | defer closeConn(t, conn) |
| 401 | |
| 402 | createSql := ` |
| 403 | create temporary table foo( |
| 404 | id integer, |
| 405 | unique (id) |
| 406 | ); |
| 407 | ` |
| 408 | |
| 409 | if _, err := conn.Exec(context.Background(), createSql); err != nil { |
| 410 | t.Fatalf("Failed to create table: %v", err) |
| 411 | } |
| 412 | |
| 413 | tx, err := conn.Begin(context.Background()) |
| 414 | if err != nil { |
| 415 | t.Fatal(err) |
| 416 | } |
| 417 | |
| 418 | _, err = tx.Exec(context.Background(), "insert into foo(id) values (1)") |
| 419 | if err != nil { |
| 420 | t.Fatalf("tx.Exec failed: %v", err) |
| 421 | } |
| 422 | |
| 423 | nestedTx, err := tx.Begin(context.Background()) |
| 424 | if err != nil { |
| 425 | t.Fatal(err) |
| 426 | } |
| 427 | |
| 428 | _, err = nestedTx.Exec(context.Background(), "insert into foo(id) values (2)") |
| 429 | if err != nil { |
| 430 | t.Fatalf("nestedTx.Exec failed: %v", err) |
| 431 | } |
| 432 | |
| 433 | doubleNestedTx, err := nestedTx.Begin(context.Background()) |
| 434 | if err != nil { |
| 435 | t.Fatal(err) |
| 436 | } |
| 437 | |
| 438 | _, err = doubleNestedTx.Exec(context.Background(), "insert into foo(id) values (3)") |
| 439 | if err != nil { |
| 440 | t.Fatalf("doubleNestedTx.Exec failed: %v", err) |
| 441 | } |
| 442 | |
| 443 | err = doubleNestedTx.Commit(context.Background()) |
| 444 | if err != nil { |
| 445 | t.Fatalf("doubleNestedTx.Commit failed: %v", err) |
| 446 | } |
| 447 | |
| 448 | err = nestedTx.Commit(context.Background()) |
| 449 | if err != nil { |
| 450 | t.Fatalf("nestedTx.Commit failed: %v", err) |
| 451 | } |
| 452 | |
| 453 | err = tx.Commit(context.Background()) |