From aed48bb665bcbaa775fc460dff4c7e5faa380deb Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Thu, 14 Aug 2025 19:13:40 +0300 Subject: [PATCH 1/3] sim: reduce frequency of compound selects and complex joins --- simulator/generation/query.rs | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/simulator/generation/query.rs b/simulator/generation/query.rs index fa02858bf..541821f19 100644 --- a/simulator/generation/query.rs +++ b/simulator/generation/query.rs @@ -25,7 +25,12 @@ impl Arbitrary for Create { impl ArbitraryFrom<&Vec> for FromClause { fn arbitrary_from(rng: &mut R, tables: &Vec
) -> Self { - let query_size = (rng.gen_range(0.0..=15.0_f32).log2().ceil() as usize).saturating_sub(2); + let num_joins = match rng.gen_range(0..=100) { + 0..=80 => 0, + 81..=95 => 1, + 96..=100 => 2, + _ => unreachable!(), + }; let mut tables = tables.clone(); let mut table = pick(&tables, rng).clone(); @@ -34,7 +39,7 @@ impl ArbitraryFrom<&Vec
> for FromClause { let name = table.name.clone(); - let joins: Vec<_> = (0..query_size) + let joins: Vec<_> = (0..num_joins) .filter_map(|_| { if tables.is_empty() { return None; @@ -172,22 +177,25 @@ impl ArbitraryFrom<&SimulatorEnv> for SelectFree { impl ArbitraryFrom<&SimulatorEnv> for Select { fn arbitrary_from(rng: &mut R, env: &SimulatorEnv) -> Self { - let query_size = (rng.gen_range(0.0..=15.0_f32).log2().ceil() as usize).saturating_sub(2); - let table = pick(&env.tables, rng); // Generate a number of selects based on the query size // If experimental indexes are enabled, we can have selects with compounds // Otherwise, we just have a single select with no compounds - let num_selects = if env.opts.experimental_indexes { - rng.gen_range(0..=query_size) + let num_compound_selects = if env.opts.experimental_indexes { + match rng.gen_range(0..=100) { + 0..=90 => 0, + 91..=97 => 1, + 98..=100 => 2, + _ => unreachable!(), + } } else { 0 }; let first = SelectInner::arbitrary_from(rng, env); - let rest: Vec = (0..num_selects) + let rest: Vec = (0..num_compound_selects) .map(|_| { let mut select = first.clone(); select.where_clause = Predicate::arbitrary_from(rng, table); From f5438d14dec2bb01560795f93772c9831b1b6257 Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Thu, 14 Aug 2025 19:34:33 +0300 Subject: [PATCH 2/3] make big compound selects even less likely --- simulator/generation/query.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/simulator/generation/query.rs b/simulator/generation/query.rs index 541821f19..963ba319c 100644 --- a/simulator/generation/query.rs +++ b/simulator/generation/query.rs @@ -184,9 +184,9 @@ impl ArbitraryFrom<&SimulatorEnv> for Select { // Otherwise, we just have a single select with no compounds let num_compound_selects = if env.opts.experimental_indexes { match rng.gen_range(0..=100) { - 0..=90 => 0, - 91..=97 => 1, - 98..=100 => 2, + 0..=95 => 0, + 96..=99 => 1, + 100 => 2, _ => unreachable!(), } } else { From 165f2aed231fd6af820e8649ce8670157620eb71 Mon Sep 17 00:00:00 2001 From: Jussi Saurio Date: Thu, 14 Aug 2025 19:34:54 +0300 Subject: [PATCH 3/3] make big joins even less likely --- simulator/generation/query.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/simulator/generation/query.rs b/simulator/generation/query.rs index 963ba319c..fa0932e46 100644 --- a/simulator/generation/query.rs +++ b/simulator/generation/query.rs @@ -26,9 +26,9 @@ impl Arbitrary for Create { impl ArbitraryFrom<&Vec
> for FromClause { fn arbitrary_from(rng: &mut R, tables: &Vec
) -> Self { let num_joins = match rng.gen_range(0..=100) { - 0..=80 => 0, - 81..=95 => 1, - 96..=100 => 2, + 0..=90 => 0, + 91..=97 => 1, + 98..=100 => 2, _ => unreachable!(), };