17
17
18
18
use std:: { collections:: HashSet , str:: FromStr } ;
19
19
20
- use rand:: { seq:: SliceRandom , thread_rng , Rng } ;
20
+ use rand:: { rng , seq:: SliceRandom , Rng } ;
21
21
22
22
/// Random aggregate query builder
23
23
///
@@ -277,8 +277,8 @@ impl QueryBuilder {
277
277
/// * `alias` is a unique alias `colN` for the column (to avoid duplicate column names)
278
278
fn random_aggregate_functions ( & self , group_by_cols : & [ String ] ) -> Vec < String > {
279
279
const MAX_NUM_FUNCTIONS : usize = 5 ;
280
- let mut rng = thread_rng ( ) ;
281
- let num_aggregate_functions = rng. gen_range ( 1 ..=MAX_NUM_FUNCTIONS ) ;
280
+ let mut rng = rng ( ) ;
281
+ let num_aggregate_functions = rng. random_range ( 1 ..=MAX_NUM_FUNCTIONS ) ;
282
282
283
283
let mut alias_gen = 1 ;
284
284
@@ -292,7 +292,7 @@ impl QueryBuilder {
292
292
}
293
293
294
294
while aggregate_functions. len ( ) < num_aggregate_functions {
295
- let idx = rng. gen_range ( 0 ..self . aggregate_functions . len ( ) ) ;
295
+ let idx = rng. random_range ( 0 ..self . aggregate_functions . len ( ) ) ;
296
296
let ( function_name, is_distinct) = & self . aggregate_functions [ idx] ;
297
297
let argument = self . random_argument ( ) ;
298
298
let alias = format ! ( "col{alias_gen}" ) ;
@@ -320,8 +320,8 @@ impl QueryBuilder {
320
320
321
321
/// Pick a random aggregate function argument
322
322
fn random_argument ( & self ) -> String {
323
- let mut rng = thread_rng ( ) ;
324
- let idx = rng. gen_range ( 0 ..self . arguments . len ( ) ) ;
323
+ let mut rng = rng ( ) ;
324
+ let idx = rng. random_range ( 0 ..self . arguments . len ( ) ) ;
325
325
self . arguments [ idx] . clone ( )
326
326
}
327
327
@@ -333,25 +333,25 @@ impl QueryBuilder {
333
333
. cloned ( )
334
334
. collect ( ) ;
335
335
336
- available_columns. shuffle ( & mut thread_rng ( ) ) ;
336
+ available_columns. shuffle ( & mut rng ( ) ) ;
337
337
338
338
let num_of_order_by_col = 12 ;
339
339
let column_count = std:: cmp:: min ( num_of_order_by_col, available_columns. len ( ) ) ;
340
340
341
341
let selected_columns = & available_columns[ 0 ..column_count] ;
342
342
343
- let mut rng = thread_rng ( ) ;
343
+ let mut rng = rng ( ) ;
344
344
let mut result = String :: from_str ( " order by " ) . unwrap ( ) ;
345
345
for col in selected_columns {
346
- let order = if rng. gen_bool ( 0.5 ) { "ASC" } else { "DESC" } ;
346
+ let order = if rng. random_bool ( 0.5 ) { "ASC" } else { "DESC" } ;
347
347
result. push_str ( & format ! ( "{col} {order}," ) ) ;
348
348
}
349
349
350
350
result. strip_suffix ( "," ) . unwrap ( ) . to_string ( )
351
351
}
352
352
353
353
fn null_opt ( & self ) -> String {
354
- if thread_rng ( ) . gen_bool ( 0.5 ) {
354
+ if rng ( ) . random_bool ( 0.5 ) {
355
355
"RESPECT NULLS" . to_string ( )
356
356
} else {
357
357
"IGNORE NULLS" . to_string ( )
@@ -363,18 +363,18 @@ impl QueryBuilder {
363
363
/// Limited to `max_group_by_columns` group by columns to ensure coverage for large groups.
364
364
/// With larger numbers of columns, each group has many fewer values.
365
365
fn random_group_by ( & self ) -> Vec < String > {
366
- let mut rng = thread_rng ( ) ;
366
+ let mut rng = rng ( ) ;
367
367
let min_groups = self . min_group_by_columns ;
368
368
let max_groups = self . max_group_by_columns ;
369
369
assert ! ( min_groups <= max_groups) ;
370
- let num_group_by = rng. gen_range ( min_groups..=max_groups) ;
370
+ let num_group_by = rng. random_range ( min_groups..=max_groups) ;
371
371
372
372
let mut already_used = HashSet :: new ( ) ;
373
373
let mut group_by = vec ! [ ] ;
374
374
while group_by. len ( ) < num_group_by
375
375
&& already_used. len ( ) != self . group_by_columns . len ( )
376
376
{
377
- let idx = rng. gen_range ( 0 ..self . group_by_columns . len ( ) ) ;
377
+ let idx = rng. random_range ( 0 ..self . group_by_columns . len ( ) ) ;
378
378
if already_used. insert ( idx) {
379
379
group_by. push ( self . group_by_columns [ idx] . clone ( ) ) ;
380
380
}
0 commit comments