Skip to content

Commit f7e8dba

Browse files
committed
add min_group_by_columns, and fix some bugs.
1 parent 3d66d5e commit f7e8dba

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

datafusion/core/tests/fuzz_cases/aggregation_fuzzer/query_builder.rs

+18-7
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,9 @@ pub struct QueryBuilder {
6969
/// Max columns num in randomly generated `groupings`
7070
max_group_by_columns: usize,
7171

72+
/// Min columns num in randomly generated `groupings`
73+
min_group_by_columns: usize,
74+
7275
/// The sort keys of dataset
7376
///
7477
/// Due to optimizations will be triggered when all or some
@@ -181,8 +184,14 @@ impl QueryBuilder {
181184
/// Add max columns num in group by(default: 3), for example if it is set to 1,
182185
/// the generated sql will group by at most 1 column
183186
#[allow(dead_code)]
184-
pub fn with_max_group_by_columns(mut self, group_by_columns: usize) -> Self {
185-
self.max_group_by_columns = group_by_columns;
187+
pub fn with_max_group_by_columns(mut self, max_group_by_columns: usize) -> Self {
188+
self.max_group_by_columns = max_group_by_columns;
189+
self
190+
}
191+
192+
#[allow(dead_code)]
193+
pub fn with_min_group_by_columns(mut self, min_group_by_columns: usize) -> Self {
194+
self.min_group_by_columns = min_group_by_columns;
186195
self
187196
}
188197

@@ -237,6 +246,7 @@ impl QueryBuilder {
237246

238247
fn generate_query(&self) -> String {
239248
let group_by = self.random_group_by();
249+
dbg!(&group_by);
240250
let mut query = String::from("SELECT ");
241251
query.push_str(&group_by.join(", "));
242252
if !group_by.is_empty() {
@@ -267,7 +277,7 @@ impl QueryBuilder {
267277
fn random_aggregate_functions(&self, group_by_cols: &[String]) -> Vec<String> {
268278
const MAX_NUM_FUNCTIONS: usize = 5;
269279
let mut rng = thread_rng();
270-
let num_aggregate_functions = rng.gen_range(1..MAX_NUM_FUNCTIONS);
280+
let num_aggregate_functions = rng.gen_range(1..=MAX_NUM_FUNCTIONS);
271281

272282
let mut alias_gen = 1;
273283

@@ -349,12 +359,13 @@ impl QueryBuilder {
349359

350360
/// Pick a random number of fields to group by (non-repeating)
351361
///
352-
/// Limited to 3 group by columns to ensure coverage for large groups. With
353-
/// larger numbers of columns, each group has many fewer values.
362+
/// Limited to `max_group_by_columns` group by columns to ensure coverage for large groups.
363+
/// With larger numbers of columns, each group has many fewer values.
354364
fn random_group_by(&self) -> Vec<String> {
355365
let mut rng = thread_rng();
356-
let max_groups = self.group_by_columns.len().max(self.max_group_by_columns);
357-
let num_group_by = rng.gen_range(1..max_groups);
366+
let min_groups = self.max_group_by_columns;
367+
let max_groups = self.min_group_by_columns;
368+
let num_group_by = rng.gen_range(min_groups..=max_groups);
358369

359370
let mut already_used = HashSet::new();
360371
let mut group_by = vec![];

0 commit comments

Comments
 (0)