@@ -573,7 +573,6 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
573
573
use diesel:: types:: { Bool , BigInt , Nullable } ;
574
574
use diesel:: expression:: functions:: date_and_time:: { now, date} ;
575
575
use diesel:: expression:: sql_literal:: sql;
576
- use diesel:: query_source:: joins:: LeftOuter ;
577
576
578
577
let conn = req. db_conn ( ) ?;
579
578
let ( offset, limit) = req. pagination ( 10 , 100 ) ?;
@@ -585,13 +584,11 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
585
584
let recent_downloads = sql :: < Nullable < BigInt > > ( "SUM(crate_downloads.downloads)" ) ;
586
585
587
586
let mut query = crates:: table
588
- . join (
589
- crate_downloads:: table,
590
- LeftOuter ,
587
+ . left_join ( crate_downloads:: table. on (
591
588
crates:: id. eq ( crate_downloads:: crate_id) . and (
592
589
crate_downloads:: date. gt ( date ( now - 90 . days ( ) ) ) ,
593
590
) ,
594
- )
591
+ ) )
595
592
. group_by ( crates:: id)
596
593
. select ( (
597
594
ALL_COLUMNS ,
@@ -775,7 +772,7 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
775
772
. map ( |versions| Version :: max ( versions. into_iter ( ) . map ( |v| v. num ) ) )
776
773
. zip ( krates)
777
774
. map ( |( max_version, krate) | {
778
- Ok ( krate. minimal_encodable ( max_version, None , false , Some ( 0 ) ) )
775
+ Ok ( krate. minimal_encodable ( max_version, None , false , None ) )
779
776
} )
780
777
. collect ( )
781
778
} ;
@@ -833,6 +830,8 @@ pub fn summary(req: &mut Request) -> CargoResult<Response> {
833
830
834
831
/// Handles the `GET /crates/:crate_id` route.
835
832
pub fn show ( req : & mut Request ) -> CargoResult < Response > {
833
+ use diesel:: expression:: dsl:: * ;
834
+
836
835
let name = & req. params ( ) [ "crate_id" ] ;
837
836
let conn = req. db_conn ( ) ?;
838
837
let krate = Crate :: by_name ( name) . first :: < Crate > ( & * conn) ?;
@@ -849,6 +848,10 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
849
848
. inner_join ( categories:: table)
850
849
. select ( categories:: all_columns)
851
850
. load ( & * conn) ?;
851
+ let recent_downloads = CrateDownload :: belonging_to ( & krate)
852
+ . filter ( crate_downloads:: date. gt ( date ( now - 90 . days ( ) ) ) )
853
+ . select ( sum ( crate_downloads:: downloads) )
854
+ . get_result ( & * conn) ?;
852
855
853
856
let badges = badges:: table. filter ( badges:: crate_id. eq ( krate. id ) ) . load (
854
857
& * conn,
@@ -872,7 +875,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
872
875
Some ( & cats) ,
873
876
Some ( badges) ,
874
877
false ,
875
- Some ( 0 ) ,
878
+ recent_downloads ,
876
879
) ,
877
880
versions : versions
878
881
. into_iter ( )
@@ -1037,7 +1040,7 @@ pub fn new(req: &mut Request) -> CargoResult<Response> {
1037
1040
warnings : Warnings < ' a > ,
1038
1041
}
1039
1042
Ok ( req. json ( & R {
1040
- krate : krate. minimal_encodable ( max_version, None , false , Some ( 0 ) ) ,
1043
+ krate : krate. minimal_encodable ( max_version, None , false , None ) ,
1041
1044
warnings : warnings,
1042
1045
} ) )
1043
1046
} )
0 commit comments