@@ -2,6 +2,7 @@ use criterion::{criterion_group, criterion_main, Criterion};
22use cubesql:: compile:: test:: rewrite_engine:: {
33 cube_context, query_to_logical_plan, rewrite_rules, rewrite_runner,
44} ;
5+ use itertools:: Itertools ;
56use std:: sync:: Arc ;
67
78macro_rules! bench_func {
@@ -348,9 +349,83 @@ pub fn power_bi_sum_wrap(c: &mut Criterion) {
348349 bench_func ! ( "power_bi_sum_wrap" , get_power_bi_sum_wrap( ) , c) ;
349350}
350351
352+ fn get_simple_long_in_expr ( ) -> String {
353+ const N : usize = 50 ;
354+ let set = ( 1 ..=N ) . join ( ", " ) ;
355+ format ! ( "SELECT * FROM NumberCube WHERE someNumber IN ({set})" )
356+ }
357+
358+ pub fn long_simple_in_expr ( c : & mut Criterion ) {
359+ std:: env:: set_var ( "CUBESQL_SQL_PUSH_DOWN" , "true" ) ;
360+ bench_func ! ( "long_simple_in_expr" , get_simple_long_in_expr( ) , c) ;
361+ }
362+
363+ fn get_long_in_expr ( ) -> String {
364+ r#"
365+ SELECT
366+ "WideCube"."dim1" as "column1",
367+ "WideCube"."dim2" as "column2",
368+ "WideCube"."dim3" as "column3",
369+ "WideCube"."dim4" as "column4",
370+ "WideCube"."dim5" as "column5",
371+ "WideCube"."dim6" as "column6",
372+ "WideCube"."dim7" as "column7",
373+ "WideCube"."dim8" as "column8",
374+ "WideCube"."dim9" as "column9",
375+ "WideCube"."dim10" as "column10",
376+ "WideCube"."dim11" as "column11",
377+ "WideCube"."dim12" as "column12",
378+ "WideCube"."dim13" as "column13",
379+ "WideCube"."dim14" as "column14",
380+ "WideCube"."dim15" as "column15",
381+ SUM("WideCube"."dim16") as "some_sum"
382+ FROM
383+ "WideCube"
384+ WHERE
385+ "WideCube"."dim1" = 1
386+ AND "WideCube"."dim2" = 2
387+ AND "WideCube"."dim3" = 3
388+ AND "WideCube"."dim4" = 4
389+ AND "WideCube"."dim5" = 5
390+ AND "WideCube"."dim6" = 6
391+ AND "WideCube"."dim7" = 7
392+ AND "WideCube"."dim8" = 8
393+ AND "WideCube"."dim9" = 9
394+ AND "WideCube"."dim10" = 10
395+ AND ("WideCube"."dim11" = 42 OR "WideCube"."dim11" IS NULL)
396+ AND (
397+ "WideCube"."dim12" IN (
398+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
399+ 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50
400+ ) OR "WideCube"."dim12" IS NULL
401+ ) AND "WideCube"."dim20" = 55
402+ GROUP BY
403+ "WideCube"."dim1",
404+ "WideCube"."dim2",
405+ "WideCube"."dim3",
406+ "WideCube"."dim4",
407+ "WideCube"."dim5",
408+ "WideCube"."dim6",
409+ "WideCube"."dim7",
410+ "WideCube"."dim8",
411+ "WideCube"."dim9",
412+ "WideCube"."dim10",
413+ "WideCube"."dim11",
414+ "WideCube"."dim12",
415+ "WideCube"."dim13",
416+ "WideCube"."dim14",
417+ "WideCube"."dim15"
418+ "# . into ( )
419+ }
420+
421+ pub fn long_in_expr ( c : & mut Criterion ) {
422+ std:: env:: set_var ( "CUBESQL_SQL_PUSH_DOWN" , "true" ) ;
423+ bench_func ! ( "long_in_expr" , get_long_in_expr( ) , c) ;
424+ }
425+
351426criterion_group ! {
352427 name = benches;
353428 config = Criterion :: default ( ) . measurement_time( std:: time:: Duration :: from_secs( 15 ) ) . sample_size( 10 ) ;
354- targets = split_query, split_query_count_distinct, wrapped_query, power_bi_wrap, power_bi_sum_wrap
429+ targets = split_query, split_query_count_distinct, wrapped_query, power_bi_wrap, power_bi_sum_wrap, long_in_expr , long_simple_in_expr
355430}
356431criterion_main ! ( benches) ;
0 commit comments