11use std:: time:: Duration ;
22
33use criterion:: { black_box, criterion_group, criterion_main, Criterion } ;
4- use itertools:: Itertools ;
5- use rand:: { Rng , SeedableRng } ;
64
75use partiql_eval:: env:: basic:: MapBindings ;
86use partiql_eval:: eval:: EvalPlan ;
97use partiql_eval:: plan:: EvaluatorPlanner ;
108use partiql_logical:: { BindingsOp , LogicalPlan } ;
119
10+ use crate :: multi_like_data:: { employee_data, QUERY_1 , QUERY_15 , QUERY_30 } ;
1211use partiql_parser:: { Parser , ParserResult } ;
13- use partiql_value:: { partiql_tuple , Bag , Tuple , Value } ;
12+ use partiql_value:: Value ;
1413
1514// Benchmarks:
1615// - parsing,
@@ -21,315 +20,7 @@ use partiql_value::{partiql_tuple, Bag, Tuple, Value};
2120// of queries that filter against 1, 15, or 30 `OR`ed `LIKE` expressions
2221// over 10201 rows of tuples containing an id and a string
2322
24- fn employee_data ( ) -> Vec < Value > {
25- let name1 = vec ! [
26- "Bob" ,
27- "Madden" ,
28- "Brycen" ,
29- "Bryanna" ,
30- "Zayne" ,
31- "Jocelynn" ,
32- "Breanna" ,
33- "Margaret" ,
34- "Jasmine" ,
35- "Kenyon" ,
36- "Aryanna" ,
37- "Zackery" ,
38- "Jorden" ,
39- "Malia" ,
40- "Raven" ,
41- "Neveah" ,
42- "Finley" ,
43- "Austin" ,
44- "Jaxson" ,
45- "Tobias" ,
46- "Dominique" ,
47- "Devan" ,
48- "Colby" ,
49- "Tanner" ,
50- "Mckenna" ,
51- "Kristina" ,
52- "Cristal" ,
53- "River" ,
54- "Taliyah" ,
55- "Abagail" ,
56- "Spencer" ,
57- "Gage" ,
58- "Ronnie" ,
59- "Amari" ,
60- "Jabari" ,
61- "Alanna" ,
62- "Anderson" ,
63- "Saniya" ,
64- "Baylee" ,
65- "Elisa" ,
66- "Savannah" ,
67- "Jakobe" ,
68- "Sandra" ,
69- "Simone" ,
70- "Frank" ,
71- "Braedon" ,
72- "Clark" ,
73- "Francisco" ,
74- "Roman" ,
75- "Matias" ,
76- "Messi" ,
77- "Elisha" ,
78- "Alexander" ,
79- "Kadence" ,
80- "Karsyn" ,
81- "Adonis" ,
82- "Ishaan" ,
83- "Trevon" ,
84- "Ryan" ,
85- "Jaelynn" ,
86- "Marilyn" ,
87- "Emma" ,
88- "Avah" ,
89- "Jordan" ,
90- "Riley" ,
91- "Amelie" ,
92- "Denisse" ,
93- "Darion" ,
94- "Lydia" ,
95- "Marley" ,
96- "Brogan" ,
97- "Trace" ,
98- "Maeve" ,
99- "Elijah" ,
100- "Kareem" ,
101- "Erick" ,
102- "Hope" ,
103- "Elisabeth" ,
104- "Antwan" ,
105- "Francesca" ,
106- "Layla" ,
107- "Jase" ,
108- "Angel" ,
109- "Addyson" ,
110- "Mckinley" ,
111- "Julianna" ,
112- "Winston" ,
113- "Royce" ,
114- "Paola" ,
115- "Issac" ,
116- "Zachary" ,
117- "Niko" ,
118- "Shania" ,
119- "Colin" ,
120- "Jesse" ,
121- "Pedro" ,
122- "Cheyenne" ,
123- "Ashley" ,
124- "Karli" ,
125- "Bianca" ,
126- "Mario" ,
127- ] ;
128- let name2 = vec ! [
129- "Smith" ,
130- "Oconnell" ,
131- "Whitehead" ,
132- "Carrillo" ,
133- "Parrish" ,
134- "Monroe" ,
135- "Summers" ,
136- "Hurst" ,
137- "Durham" ,
138- "Hardin" ,
139- "Hunt" ,
140- "Mitchell" ,
141- "Pennington" ,
142- "Woodward" ,
143- "Franklin" ,
144- "Martinez" ,
145- "Shepard" ,
146- "Khan" ,
147- "Mcfarland" ,
148- "Frey" ,
149- "Mckenzie" ,
150- "Blair" ,
151- "Mercer" ,
152- "Callahan" ,
153- "Cameron" ,
154- "Gilmore" ,
155- "Bowers" ,
156- "Donovan" ,
157- "Meyers" ,
158- "Horne" ,
159- "Rice" ,
160- "Castillo" ,
161- "Cain" ,
162- "Dickson" ,
163- "Valenzuela" ,
164- "Silva" ,
165- "Prince" ,
166- "Vance" ,
167- "Berry" ,
168- "Coffey" ,
169- "Young" ,
170- "Walker" ,
171- "Burch" ,
172- "Ross" ,
173- "Mejia" ,
174- "Zuniga" ,
175- "Haney" ,
176- "Jordan" ,
177- "Love" ,
178- "Larsen" ,
179- "Bowman" ,
180- "Werner" ,
181- "Greer" ,
182- "Krause" ,
183- "Bishop" ,
184- "Day" ,
185- "Luna" ,
186- "Patrick" ,
187- "Adkins" ,
188- "Benson" ,
189- "Mcconnell" ,
190- "Sanchez" ,
191- "Villa" ,
192- "Wu" ,
193- "Duke" ,
194- "Fisher" ,
195- "Hess" ,
196- "Lawrence" ,
197- "Perry" ,
198- "Hardy" ,
199- "Wyatt" ,
200- "Mcknight" ,
201- "Thomas" ,
202- "Trevino" ,
203- "Flowers" ,
204- "Cisneros" ,
205- "Coleman" ,
206- "Sanders" ,
207- "Good" ,
208- "Newton" ,
209- "Carpenter" ,
210- "Garza" ,
211- "Barber" ,
212- "Swanson" ,
213- "Owen" ,
214- "Anderson" ,
215- "Bright" ,
216- "Beck" ,
217- "Lawson" ,
218- "Jones" ,
219- "Davila" ,
220- "Porter" ,
221- "Dougherty" ,
222- "Stevenson" ,
223- "Malone" ,
224- "Garrison" ,
225- "Bates" ,
226- "Wheeler" ,
227- "Petty" ,
228- "Rojas" ,
229- "Townsend" ,
230- ] ;
231-
232- // cartesian product of name1 x name2 (e.g., "Bob Smith", ... "Mario Townsend")
233- let combined = name1
234- . iter ( )
235- . cartesian_product ( name2. iter ( ) )
236- . map ( |( n1, n2) | format ! ( "{n1} {n2}" ) ) ;
237-
238- // seed the rng with a known value to assure same data across runs
239- let mut rng = rand:: rngs:: StdRng :: from_seed ( [ 42 ; 32 ] ) ;
240- use rand:: distributions:: Distribution ;
241- let chars = rand:: distributions:: Alphanumeric ;
242- let random_size = rand:: distributions:: uniform:: Uniform :: from ( 5 ..=100 ) ;
243-
244- // add random string prefix and suffix to each combined name
245- let employee_data: Vec < Value > = combined
246- . enumerate ( )
247- . map ( |( id, person) | {
248- let prefix_size = random_size. sample ( & mut rng) ;
249- let suffix_size = random_size. sample ( & mut rng) ;
250- let prefix: String = ( 0 ..prefix_size)
251- . map ( |_| rng. sample ( chars) as char )
252- . collect ( ) ;
253- let suffix: String = ( 0 ..suffix_size)
254- . map ( |_| rng. sample ( chars) as char )
255- . collect ( ) ;
256- let full_name = format ! ( "{prefix} {person} {suffix}" ) ;
257- partiql_tuple ! [ ( "id" , id) , ( "name" , full_name) ] . into ( )
258- } )
259- . collect_vec ( ) ;
260-
261- employee_data
262- }
263-
264- fn data ( ) -> MapBindings < Value > {
265- let data = partiql_tuple ! [ (
266- "hr" ,
267- partiql_tuple![ ( "employees" , Bag :: from( employee_data( ) ) ) ]
268- ) ] ;
269-
270- data. into ( )
271- }
272-
273- const QUERY_1 : & str = "
274- SELECT *
275- FROM hr.employees as emp
276- WHERE lower(emp.name) LIKE '%bob smith%'
277- " ;
278-
279- const QUERY_15 : & str = "
280- SELECT *
281- FROM hr.employees as emp
282- WHERE lower(emp.name) LIKE '%bob smith%'
283- OR lower(emp.name) LIKE '%gage swanson%'
284- OR lower(emp.name) LIKE '%riley perry%'
285- OR lower(emp.name) LIKE '%sandra woodward%'
286- OR lower(emp.name) LIKE '%abagail oconnell%'
287- OR lower(emp.name) LIKE '%amari duke%'
288- OR lower(emp.name) LIKE '%elisha wyatt%'
289- OR lower(emp.name) LIKE '%aryanna hess%'
290- OR lower(emp.name) LIKE '%bryanna jones%'
291- OR lower(emp.name) LIKE '%trace gilmore%'
292- OR lower(emp.name) LIKE '%antwan stevenson%'
293- OR lower(emp.name) LIKE '%julianna callahan%'
294- OR lower(emp.name) LIKE '%jaelynn trevino%'
295- OR lower(emp.name) LIKE '%kadence bates%'
296- OR lower(emp.name) LIKE '%jakobe townsend%'
297- " ;
298-
299- const QUERY_30 : & str = "
300- SELECT *
301- FROM hr.employees as emp
302- WHERE lower(emp.name) LIKE '%bob smith%'
303- OR lower(emp.name) LIKE '%gage swanson%'
304- OR lower(emp.name) LIKE '%riley perry%'
305- OR lower(emp.name) LIKE '%sandra woodward%'
306- OR lower(emp.name) LIKE '%abagail oconnell%'
307- OR lower(emp.name) LIKE '%amari duke%'
308- OR lower(emp.name) LIKE '%elisha wyatt%'
309- OR lower(emp.name) LIKE '%aryanna hess%'
310- OR lower(emp.name) LIKE '%bryanna jones%'
311- OR lower(emp.name) LIKE '%trace gilmore%'
312- OR lower(emp.name) LIKE '%antwan stevenson%'
313- OR lower(emp.name) LIKE '%julianna callahan%'
314- OR lower(emp.name) LIKE '%jaelynn trevino%'
315- OR lower(emp.name) LIKE '%kadence bates%'
316- OR lower(emp.name) LIKE '%jakobe townsend%'
317- OR lower(emp.name) LIKE '%austin pennington%'
318- OR lower(emp.name) LIKE '%colby woodward%'
319- OR lower(emp.name) LIKE '%brycen blair%'
320- OR lower(emp.name) LIKE '%cristal mercer%'
321- OR lower(emp.name) LIKE '%river gilmore%'
322- OR lower(emp.name) LIKE '%saniya bowers%'
323- OR lower(emp.name) LIKE '%braedon ross%'
324- OR lower(emp.name) LIKE '%clark mejia%'
325- OR lower(emp.name) LIKE '%ryan day%'
326- OR lower(emp.name) LIKE '%marilyn luna%'
327- OR lower(emp.name) LIKE '%avah sanchez%'
328- OR lower(emp.name) LIKE '%amelie wu%'
329- OR lower(emp.name) LIKE '%paola duke%'
330- OR lower(emp.name) LIKE '%jesse trevino%'
331- OR lower(emp.name) LIKE '%bianca cisneros%'
332- " ;
23+ mod multi_like_data;
33324
33425#[ inline]
33526fn parse ( text : & str ) -> ParserResult {
@@ -413,7 +104,7 @@ fn bench_eval(c: &mut Criterion) {
413104 let compiled_15 = compile ( & parse ( QUERY_15 ) . unwrap ( ) ) ;
414105 let compiled_30 = compile ( & parse ( QUERY_30 ) . unwrap ( ) ) ;
415106
416- let bindings = data ( ) ;
107+ let bindings = employee_data ( ) ;
417108
418109 c. bench_function ( "eval-1" , |b| {
419110 b. iter ( || {
0 commit comments