@@ -119,9 +119,13 @@ pub async fn get_update_data(
119119 let db_pool: & DbPoolConnection = get_db_connection ( ) ;
120120 let mut query_res_list: Vec < QueryRow > = Vec :: with_capacity ( limit as usize ) ;
121121 let rows: Vec < QueryRow > = get_some_row_id ( limit, db_pool) . await ;
122- let mut sql: String = format ! ( "UPDATE {} SET randomNumber = CASE id " , TABLE_NAME_WORLD ) ;
122+ let mut sql: String = String :: with_capacity ( rows. len ( ) * 32 ) ;
123+ sql. push_str ( & format ! (
124+ "UPDATE {} SET randomNumber = CASE id " ,
125+ TABLE_NAME_WORLD
126+ ) ) ;
123127 let mut id_list: Vec < i32 > = Vec :: with_capacity ( rows. len ( ) ) ;
124- let mut value_list: Vec < String > = Vec :: with_capacity ( rows. len ( ) * 2 ) ;
128+ let mut value_list: Vec < String > = Vec :: with_capacity ( rows. len ( ) ) ;
125129 let mut random_numbers: Vec < i32 > = Vec :: with_capacity ( rows. len ( ) ) ;
126130 for ( i, row) in rows. iter ( ) . enumerate ( ) {
127131 let new_random_number: i32 = get_random_id ( ) as i32 ;
@@ -131,10 +135,8 @@ pub async fn get_update_data(
131135 query_res_list. push ( QueryRow :: new ( row. id , new_random_number) ) ;
132136 }
133137 sql. push_str ( & value_list. join ( " " ) ) ;
134- let id_params: String = id_list
135- . iter ( )
136- . enumerate ( )
137- . map ( |( i, _) | format ! ( "${}" , ( rows. len( ) * 2 + 1 ) + i) )
138+ let id_params: String = ( 0 ..rows. len ( ) )
139+ . map ( |i| format ! ( "${}" , ( rows. len( ) * 2 + 1 ) + i) )
138140 . collect :: < Vec < _ > > ( )
139141 . join ( "," ) ;
140142 sql. push_str ( & format ! (
@@ -174,7 +176,7 @@ pub async fn query_world_row(db_pool: &DbPoolConnection, id: Queries) -> QueryRo
174176pub async fn update_world_rows ( limit : Queries ) -> Vec < QueryRow > {
175177 let db_pool: & DbPoolConnection = get_db_connection ( ) ;
176178 let ( sql, data, id_list, random_numbers) = get_update_data ( limit) . await ;
177- let mut query_builder: query :: Query < ' _ , Postgres , postgres :: PgArguments > = query ( & sql) ;
179+ let mut query_builder = query ( & sql) ;
178180 for ( id, random_number) in id_list. iter ( ) . zip ( random_numbers. iter ( ) ) {
179181 query_builder = query_builder. bind ( id) . bind ( random_number) ;
180182 }
@@ -194,18 +196,18 @@ pub async fn all_world_row() -> Vec<PgRow> {
194196
195197pub async fn get_some_row_id ( limit : Queries , db_pool : & DbPoolConnection ) -> Vec < QueryRow > {
196198 let semaphore: Arc < Semaphore > = Arc :: new ( Semaphore :: new ( 32 ) ) ;
197- let mut tasks: Vec < JoinHandle < QueryRow > > = Vec :: with_capacity ( limit as usize ) ;
198- for _ in 0 ..limit {
199- let _ = semaphore. clone ( ) . acquire_owned ( ) . await . map ( |permit| {
200- let db_pool: DbPoolConnection = db_pool. clone ( ) ;
201- tasks. push ( spawn ( async move {
199+ let tasks: Vec < _ > = ( 0 ..limit)
200+ . map ( |_| {
201+ let semaphore: Arc < Semaphore > = semaphore. clone ( ) ;
202+ let db_pool: Pool < Postgres > = db_pool. clone ( ) ;
203+ spawn ( async move {
204+ let _permit: Result < OwnedSemaphorePermit , AcquireError > =
205+ semaphore. acquire_owned ( ) . await ;
202206 let id: i32 = get_random_id ( ) ;
203- let res: QueryRow = query_world_row ( & db_pool, id) . await ;
204- drop ( permit) ;
205- res
206- } ) ) ;
207- } ) ;
208- }
207+ query_world_row ( & db_pool, id) . await
208+ } )
209+ } )
210+ . collect ( ) ;
209211 join_all ( tasks)
210212 . await
211213 . into_iter ( )
0 commit comments