@@ -355,49 +355,36 @@ impl Lab {
355355 ) -> Result < Vec < Aggregate > > {
356356 let pool = ctx. data :: < Arc < PgPool > > ( ) . expect ( "Pool must be in context." ) ;
357357
358- // will give the total count
359- let mut query = sqlx:: QueryBuilder :: new (
360- r#"
361- SELECT
362- all_dates.date,
363- p.present_count
364- FROM (
358+ let results: Vec < Aggregate > = sqlx:: query_as :: < _ , Aggregate > (
359+ "
365360 SELECT
366- date,
367- COUNT(*) AS total_count
368- FROM attendance
369- WHERE date BETWEEN "# ,
370- ) ;
371-
372- query. push_bind ( start_date) ;
373- query. push ( " AND " ) ;
374- query. push_bind ( end_date) ;
375- query. push ( " GROUP BY date ) AS all_dates " ) ;
376-
377- // sub query of present members joined with the above total countS
378- query. push (
379- "LEFT JOIN (
361+ all_dates.date,
362+ p.present_count
363+ FROM (
364+ SELECT
365+ date,
366+ COUNT(*) AS total_count
367+ FROM attendance
368+ WHERE date BETWEEN $1 AND $2
369+ GROUP BY date
370+ ) AS all_dates
371+ LEFT JOIN (
380372 SELECT
381373 date,
382374 COUNT(*) AS present_count
383375 FROM attendance
384- WHERE is_present = 't'
385- AND date BETWEEN " ,
386- ) ;
387- query. push_bind ( start_date) ;
388- query. push ( " AND " ) ;
389- query. push_bind ( end_date) ;
390- query. push (
391- " GROUP BY date
376+ WHERE is_present = TRUE
377+ AND date BETWEEN $1 AND $2
378+ GROUP BY date
392379 ) AS p
393380 ON all_dates.date = p.date
394- ORDER BY all_dates.date;" ,
395- ) ;
396-
397- let results : Vec < Aggregate > = query
398- . build_query_as :: < Aggregate > ( )
399- . fetch_all ( pool. as_ref ( ) )
400- . await ?;
381+ ORDER BY all_dates.date;
382+ " ,
383+ )
384+ . bind ( start_date )
385+ . bind ( end_date )
386+ . fetch_all ( pool. as_ref ( ) )
387+ . await ?;
401388
402389 Ok ( results)
403390 }
0 commit comments