55use support \bootstrap \Date ;
66use support \bootstrap \db \Raw as Db ;
77use support \Response ;
8- use PDO ;
8+ use function json_encode ;
9+ use function max ;
10+ use function min ;
11+ use function mt_rand ;
912
1013class Index
1114{
@@ -29,7 +32,7 @@ public function json()
2932 public function db ()
3033 {
3134 $ statement = Db::$ random ;
32- $ statement ->execute ([\ mt_rand (1 , 10000 )]);
35+ $ statement ->execute ([mt_rand (1 , 10000 )]);
3336
3437 return new Response (200 , [
3538 'Content-Type ' => 'application/json ' ,
@@ -63,14 +66,11 @@ public function queries(Request $request, $q = 1)
6366 {
6467 $ statement = Db::$ random ;
6568
66- $ query_count = 1 ;
67- if ((int ) $ q > 1 ) {
68- $ query_count = \min ($ q , 500 );
69- }
69+ $ query_count = min (max ((int ) $ q , 1 ), 500 );
7070
7171 $ arr = [];
7272 while ($ query_count --) {
73- $ statement ->execute ([\ mt_rand (1 , 10000 )]);
73+ $ statement ->execute ([mt_rand (1 , 10000 )]);
7474 $ arr [] = $ statement ->fetch ();
7575 }
7676
@@ -82,29 +82,31 @@ public function queries(Request $request, $q = 1)
8282
8383 public function updates (Request $ request , $ q = 1 )
8484 {
85- $ random = Db:: $ random ;
85+ static $ updates = [] ;
8686
87- $ query_count = 1 ;
88- if ((int ) $ q > 1 ) {
89- $ query_count = \min ($ q , 500 );
87+ $ random = Db::$ random ;
88+ $ pdo = Db::$ pdo ;
89+ $ count = min (max ((int ) $ q , 1 ), 500 );
90+
91+ $ worlds = $ keys = $ values = [];
92+ for ($ i = 0 ; $ i < $ count ; ++ $ i ) {
93+ $ values [] = $ keys [] = $ id = mt_rand (1 , 10000 );
94+ $ random ->execute ([$ id ]);
95+ $ row = $ random ->fetch ();
96+ $ values [] = $ row ['randomNumber ' ] = mt_rand (1 , 10000 );
97+ $ worlds [] = $ row ;
9098 }
91-
92- $ worlds = [];
93-
94- while ($ query_count --) {
95- $ random ->execute ([\mt_rand (1 , 10000 )]);
96- $ world = $ random ->fetch ();
97- $ world ['randomNumber ' ] = \mt_rand (1 , 10000 );
98-
99- $ worlds [] = $ world ;
99+ if (!isset ($ updates [$ count ])) {
100+ $ sql = 'UPDATE World SET randomNumber = CASE id ' . str_repeat (' WHEN ?::INTEGER THEN ?::INTEGER ' , $ count ) . 'END WHERE id IN ( ' . str_repeat ('?::INTEGER, ' , $ count - 1 ) . '?::INTEGER) ' ;
101+ $ updates [$ count ] = $ pdo ->prepare ($ sql );
100102 }
101-
102- Db::update ($ worlds );
103+ $ updates [$ count ]->execute ([...$ values , ...$ keys ]);
103104
104105 return new Response (200 , [
105106 'Content-Type ' => 'application/json ' ,
106107 'Date ' => Date::$ date
107- ], \json_encode ($ worlds ));
108+ ], json_encode ($ worlds ));
109+
108110 }
109111
110112
0 commit comments