|
13 | 13 | use PhpMyAdmin\Template; |
14 | 14 | use PhpMyAdmin\Tests\Stubs\DbiDummy; |
15 | 15 | use PhpMyAdmin\Transformations; |
| 16 | +use ReflectionMethod; |
16 | 17 | use stdClass; |
17 | 18 |
|
18 | 19 | use const MYSQLI_TYPE_SHORT; |
@@ -613,4 +614,128 @@ public function testExecuteQueryAndSendQueryResponse(): void |
613 | 614 | $this->assertStringContainsString('data-type="string"', $actual); |
614 | 615 | $this->assertStringContainsString('data-type="timestamp"', $actual); |
615 | 616 | } |
| 617 | + |
| 618 | + public function testGetDetailedProfilingStatsWithoutData(): void |
| 619 | + { |
| 620 | + $method = new ReflectionMethod($this->sql, 'getDetailedProfilingStats'); |
| 621 | + $this->assertSame( |
| 622 | + ['total_time' => 0, 'states' => [], 'chart' => [], 'profile' => []], |
| 623 | + $method->invoke($this->sql, []), |
| 624 | + ); |
| 625 | + } |
| 626 | + |
| 627 | + public function testGetDetailedProfilingStatsWithData(): void |
| 628 | + { |
| 629 | + $method = new ReflectionMethod($this->sql, 'getDetailedProfilingStats'); |
| 630 | + $profiling = [ |
| 631 | + ['Status' => 'Starting', 'Duration' => '0.000017'], |
| 632 | + ['Status' => 'checking permissions', 'Duration' => '0.000003'], |
| 633 | + ['Status' => 'Opening tables', 'Duration' => '0.000152'], |
| 634 | + ['Status' => 'After opening tables', 'Duration' => '0.000004'], |
| 635 | + ['Status' => 'System lock', 'Duration' => '0.000002'], |
| 636 | + ['Status' => 'table lock', 'Duration' => '0.000003'], |
| 637 | + ['Status' => 'Opening tables', 'Duration' => '0.000008'], |
| 638 | + ['Status' => 'After opening tables', 'Duration' => '0.000002'], |
| 639 | + ['Status' => 'System lock', 'Duration' => '0.000002'], |
| 640 | + ['Status' => 'table lock', 'Duration' => '0.000012'], |
| 641 | + ['Status' => 'Unlocking tables', 'Duration' => '0.000003'], |
| 642 | + ['Status' => 'closing tables', 'Duration' => '0.000005'], |
| 643 | + ['Status' => 'init', 'Duration' => '0.000007'], |
| 644 | + ['Status' => 'Optimizing', 'Duration' => '0.000004'], |
| 645 | + ['Status' => 'Statistics', 'Duration' => '0.000006'], |
| 646 | + ['Status' => 'Preparing', 'Duration' => '0.000006'], |
| 647 | + ['Status' => 'Executing', 'Duration' => '0.000002'], |
| 648 | + ['Status' => 'Sending data', 'Duration' => '0.000029'], |
| 649 | + ['Status' => 'End of update loop', 'Duration' => '0.000003'], |
| 650 | + ['Status' => 'Query end', 'Duration' => '0.000002'], |
| 651 | + ['Status' => 'Commit', 'Duration' => '0.000002'], |
| 652 | + ['Status' => 'closing tables', 'Duration' => '0.000002'], |
| 653 | + ['Status' => 'Unlocking tables', 'Duration' => '0.000001'], |
| 654 | + ['Status' => 'closing tables', 'Duration' => '0.000002'], |
| 655 | + ['Status' => 'Starting cleanup', 'Duration' => '0.000002'], |
| 656 | + ['Status' => 'Freeing items', 'Duration' => '0.000002'], |
| 657 | + ['Status' => 'Updating status', 'Duration' => '0.000007'], |
| 658 | + ['Status' => 'Reset for next command', 'Duration' => '0.000009'], |
| 659 | + ]; |
| 660 | + $expected = [ |
| 661 | + 'total_time' => 0.000299, |
| 662 | + 'states' => [ |
| 663 | + 'Starting' => ['total_time' => '0.000017', 'calls' => 1], |
| 664 | + 'Checking Permissions' => ['total_time' => '0.000003', 'calls' => 1], |
| 665 | + 'Opening Tables' => ['total_time' => 0.00016, 'calls' => 2], |
| 666 | + 'After Opening Tables' => ['total_time' => 6.0E-6, 'calls' => 2], |
| 667 | + 'System Lock' => ['total_time' => 4.0E-6, 'calls' => 2], |
| 668 | + 'Table Lock' => ['total_time' => 1.5E-5, 'calls' => 2], |
| 669 | + 'Unlocking Tables' => ['total_time' => 4.0E-6, 'calls' => 2], |
| 670 | + 'Closing Tables' => ['total_time' => 9.0E-6, 'calls' => 3], |
| 671 | + 'Init' => ['total_time' => '0.000007', 'calls' => 1], |
| 672 | + 'Optimizing' => ['total_time' => '0.000004', 'calls' => 1], |
| 673 | + 'Statistics' => ['total_time' => '0.000006', 'calls' => 1], |
| 674 | + 'Preparing' => ['total_time' => '0.000006', 'calls' => 1], |
| 675 | + 'Executing' => ['total_time' => '0.000002', 'calls' => 1], |
| 676 | + 'Sending Data' => ['total_time' => '0.000029', 'calls' => 1], |
| 677 | + 'End Of Update Loop' => ['total_time' => '0.000003', 'calls' => 1], |
| 678 | + 'Query End' => ['total_time' => '0.000002', 'calls' => 1], |
| 679 | + 'Commit' => ['total_time' => '0.000002', 'calls' => 1], |
| 680 | + 'Starting Cleanup' => ['total_time' => '0.000002', 'calls' => 1], |
| 681 | + 'Freeing Items' => ['total_time' => '0.000002', 'calls' => 1], |
| 682 | + 'Updating Status' => ['total_time' => '0.000007', 'calls' => 1], |
| 683 | + 'Reset For Next Command' => ['total_time' => '0.000009', 'calls' => 1], |
| 684 | + ], |
| 685 | + 'chart' => [ |
| 686 | + 'Starting' => '0.000017', |
| 687 | + 'Checking Permissions' => '0.000003', |
| 688 | + 'Opening Tables' => 0.00016, |
| 689 | + 'After Opening Tables' => 6.0E-6, |
| 690 | + 'System Lock' => 4.0E-6, |
| 691 | + 'Table Lock' => 1.5E-5, |
| 692 | + 'Unlocking Tables' => 4.0E-6, |
| 693 | + 'Closing Tables' => 9.0E-6, |
| 694 | + 'Init' => '0.000007', |
| 695 | + 'Optimizing' => '0.000004', |
| 696 | + 'Statistics' => '0.000006', |
| 697 | + 'Preparing' => '0.000006', |
| 698 | + 'Executing' => '0.000002', |
| 699 | + 'Sending Data' => '0.000029', |
| 700 | + 'End Of Update Loop' => '0.000003', |
| 701 | + 'Query End' => '0.000002', |
| 702 | + 'Commit' => '0.000002', |
| 703 | + 'Starting Cleanup' => '0.000002', |
| 704 | + 'Freeing Items' => '0.000002', |
| 705 | + 'Updating Status' => '0.000007', |
| 706 | + 'Reset For Next Command' => '0.000009', |
| 707 | + ], |
| 708 | + 'profile' => [ |
| 709 | + ['status' => 'Starting', 'duration' => '17 µ', 'duration_raw' => '0.000017'], |
| 710 | + ['status' => 'Checking Permissions', 'duration' => '3 µ', 'duration_raw' => '0.000003'], |
| 711 | + ['status' => 'Opening Tables', 'duration' => '152 µ', 'duration_raw' => '0.000152'], |
| 712 | + ['status' => 'After Opening Tables', 'duration' => '4 µ', 'duration_raw' => '0.000004'], |
| 713 | + ['status' => 'System Lock', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 714 | + ['status' => 'Table Lock', 'duration' => '3 µ', 'duration_raw' => '0.000003'], |
| 715 | + ['status' => 'Opening Tables', 'duration' => '8 µ', 'duration_raw' => '0.000008'], |
| 716 | + ['status' => 'After Opening Tables', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 717 | + ['status' => 'System Lock', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 718 | + ['status' => 'Table Lock', 'duration' => '12 µ', 'duration_raw' => '0.000012'], |
| 719 | + ['status' => 'Unlocking Tables', 'duration' => '3 µ', 'duration_raw' => '0.000003'], |
| 720 | + ['status' => 'Closing Tables', 'duration' => '5 µ', 'duration_raw' => '0.000005'], |
| 721 | + ['status' => 'Init', 'duration' => '7 µ', 'duration_raw' => '0.000007'], |
| 722 | + ['status' => 'Optimizing', 'duration' => '4 µ', 'duration_raw' => '0.000004'], |
| 723 | + ['status' => 'Statistics', 'duration' => '6 µ', 'duration_raw' => '0.000006'], |
| 724 | + ['status' => 'Preparing', 'duration' => '6 µ', 'duration_raw' => '0.000006'], |
| 725 | + ['status' => 'Executing', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 726 | + ['status' => 'Sending Data', 'duration' => '29 µ', 'duration_raw' => '0.000029'], |
| 727 | + ['status' => 'End Of Update Loop', 'duration' => '3 µ', 'duration_raw' => '0.000003'], |
| 728 | + ['status' => 'Query End', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 729 | + ['status' => 'Commit', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 730 | + ['status' => 'Closing Tables', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 731 | + ['status' => 'Unlocking Tables', 'duration' => '1 µ', 'duration_raw' => '0.000001'], |
| 732 | + ['status' => 'Closing Tables', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 733 | + ['status' => 'Starting Cleanup', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 734 | + ['status' => 'Freeing Items', 'duration' => '2 µ', 'duration_raw' => '0.000002'], |
| 735 | + ['status' => 'Updating Status', 'duration' => '7 µ', 'duration_raw' => '0.000007'], |
| 736 | + ['status' => 'Reset For Next Command', 'duration' => '9 µ', 'duration_raw' => '0.000009'], |
| 737 | + ], |
| 738 | + ]; |
| 739 | + $this->assertSame($expected, $method->invoke($this->sql, $profiling)); |
| 740 | + } |
616 | 741 | } |
0 commit comments