2
2
3
3
extern crate cargo_registry;
4
4
extern crate chrono;
5
- #[ macro_use]
6
5
extern crate diesel;
7
- #[ macro_use]
8
- extern crate diesel_codegen;
9
6
10
- use chrono:: NaiveDate ;
11
7
use diesel:: prelude:: * ;
12
- use diesel:: pg:: upsert:: * ;
13
8
use std:: env;
14
9
use std:: time:: Duration ;
15
10
@@ -18,14 +13,6 @@ use cargo_registry::schema::*;
18
13
19
14
static LIMIT : i64 = 1000 ;
20
15
21
- #[ derive( Insertable ) ]
22
- #[ table_name = "crate_downloads" ]
23
- struct CrateDownload {
24
- crate_id : i32 ,
25
- downloads : i32 ,
26
- date : NaiveDate ,
27
- }
28
-
29
16
#[ allow( dead_code) ] // dead in tests
30
17
fn main ( ) {
31
18
let daemon = env:: args ( ) . nth ( 1 ) . as_ref ( ) . map ( |s| & s[ ..] ) == Some ( "daemon" ) ;
@@ -62,7 +49,7 @@ fn update(conn: &PgConnection) -> QueryResult<()> {
62
49
}
63
50
64
51
fn collect ( conn : & PgConnection , rows : & [ VersionDownload ] ) -> QueryResult < ( ) > {
65
- use diesel:: { insert , update} ;
52
+ use diesel:: { insert_into , update} ;
66
53
67
54
// Anything older than 24 hours ago will be frozen and will not be queried
68
55
// against again.
@@ -93,23 +80,23 @@ fn collect(conn: &PgConnection, rows: &[VersionDownload]) -> QueryResult<()> {
93
80
let crate_id = update ( versions:: table. find ( download. version_id ) )
94
81
. set ( versions:: downloads. eq ( versions:: downloads + amt) )
95
82
. returning ( versions:: crate_id)
96
- . get_result ( conn) ?;
83
+ . get_result :: < i32 > ( conn) ?;
97
84
98
85
// Update the total number of crate downloads
99
86
update ( crates:: table. find ( crate_id) )
100
87
. set ( crates:: downloads. eq ( crates:: downloads + amt) )
101
88
. execute ( conn) ?;
102
89
103
90
// Update the total number of crate downloads for today
104
- let crate_download = CrateDownload {
105
- crate_id : crate_id ,
106
- downloads : amt ,
107
- date : download . date ,
108
- } ;
109
- insert ( & crate_download . on_conflict (
110
- ( crate_downloads:: crate_id , crate_downloads :: date ) ,
111
- do_update ( ) . set ( crate_downloads :: downloads . eq ( crate_downloads :: downloads + amt ) ) ,
112
- ) ) . into ( crate_downloads:: table )
91
+ insert_into ( crate_downloads :: table )
92
+ . values ( (
93
+ crate_downloads :: crate_id . eq ( crate_id ) ,
94
+ crate_downloads :: downloads . eq ( amt ) ,
95
+ crate_downloads :: date . eq ( download . date ) ,
96
+ ) )
97
+ . on_conflict ( crate_downloads:: table . primary_key ( ) )
98
+ . do_update ( )
99
+ . set ( crate_downloads:: downloads . eq ( crate_downloads :: downloads + amt ) )
113
100
. execute ( conn) ?;
114
101
}
115
102
@@ -128,7 +115,8 @@ mod test {
128
115
129
116
use std:: collections:: HashMap ;
130
117
131
- use diesel:: expression:: dsl:: sql;
118
+ use diesel:: dsl:: sql;
119
+ use diesel:: insert_into;
132
120
use diesel:: types:: Integer ;
133
121
use super :: * ;
134
122
use cargo_registry:: env;
@@ -177,35 +165,24 @@ mod test {
177
165
178
166
#[ test]
179
167
fn increment ( ) {
168
+ use diesel:: dsl:: * ;
169
+
180
170
let conn = conn ( ) ;
181
171
let user = user ( & conn) ;
182
172
let ( krate, version) = crate_and_version ( & conn, user. id ) ;
183
- // FIXME: Diesel 1.0 can do this:
184
- // insert((version_id.eq(version.id),))
185
- // .into(version_downloads)
186
- // .execute(&conn)
187
- // .unwrap();
188
- // insert((
189
- // version_id.eq(version.id),
190
- // date.eq(now - 1.day()),
191
- // processed.eq(true)
192
- // )).into(version_downloads)
193
- // .execute(&conn)
194
- // .unwrap();
195
- sql :: < Integer > (
196
- "INSERT INTO version_downloads \
197
- (version_id)
198
- VALUES ($1)" ,
199
- ) . bind :: < Integer , _ > ( version. id )
173
+ insert_into ( version_downloads:: table)
174
+ . values ( version_downloads:: version_id. eq ( version. id ) )
200
175
. execute ( & conn)
201
176
. unwrap ( ) ;
202
- sql :: < Integer > (
203
- "INSERT INTO version_downloads \
204
- (version_id, date, processed)
205
- VALUES ($1, current_date - interval '1 day', true)" ,
206
- ) . bind :: < Integer , _ > ( version. id )
177
+ insert_into ( version_downloads:: table)
178
+ . values ( (
179
+ version_downloads:: version_id. eq ( version. id ) ,
180
+ version_downloads:: date. eq ( date ( now - 1 . day ( ) ) ) ,
181
+ version_downloads:: processed. eq ( true ) ,
182
+ ) )
207
183
. execute ( & conn)
208
184
. unwrap ( ) ;
185
+
209
186
:: update ( & conn) . unwrap ( ) ;
210
187
let version_downloads = versions:: table
211
188
. find ( version. id )
@@ -228,14 +205,19 @@ mod test {
228
205
229
206
#[ test]
230
207
fn set_processed_true ( ) {
208
+ use diesel:: dsl:: * ;
209
+
231
210
let conn = conn ( ) ;
232
211
let user = user ( & conn) ;
233
212
let ( _, version) = crate_and_version ( & conn, user. id ) ;
234
- sql :: < Integer > (
235
- "INSERT INTO version_downloads \
236
- (version_id, downloads, counted, date, processed)
237
- VALUES ($1, 2, 2, current_date - interval '2 days', false)" ,
238
- ) . bind :: < Integer , _ > ( version. id )
213
+ insert_into ( version_downloads:: table)
214
+ . values ( (
215
+ version_downloads:: version_id. eq ( version. id ) ,
216
+ version_downloads:: downloads. eq ( 2 ) ,
217
+ version_downloads:: counted. eq ( 2 ) ,
218
+ version_downloads:: date. eq ( date ( now - 2 . days ( ) ) ) ,
219
+ version_downloads:: processed. eq ( false ) ,
220
+ ) )
239
221
. execute ( & conn)
240
222
. unwrap ( ) ;
241
223
:: update ( & conn) . unwrap ( ) ;
@@ -268,7 +250,7 @@ mod test {
268
250
269
251
#[ test]
270
252
fn increment_a_little ( ) {
271
- use diesel:: expression :: dsl:: * ;
253
+ use diesel:: dsl:: * ;
272
254
use diesel:: update;
273
255
274
256
let conn = conn ( ) ;
@@ -330,7 +312,7 @@ mod test {
330
312
#[ test]
331
313
fn set_processed_no_set_updated_at ( ) {
332
314
use diesel:: update;
333
- use diesel:: expression :: dsl:: * ;
315
+ use diesel:: dsl:: * ;
334
316
335
317
let conn = conn ( ) ;
336
318
let user = user ( & conn) ;
0 commit comments