@@ -178,26 +178,29 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
178
178
// TODO: can rust-postgres do this for us?
179
179
let mut versions = Vec :: new ( ) ;
180
180
let mut set = HashSet :: new ( ) ;
181
- let query = format ! ( "'{{{:#}}}'::int[]" , ids. as_slice( ) ) ;
182
- let stmt = try!( conn. prepare ( format ! ( "SELECT * FROM versions \
183
- WHERE id = ANY({})",
184
- query) . as_slice ( ) ) ) ;
185
- for row in try!( stmt. query ( & [ ] ) ) {
186
- let v: Version = Model :: from_row ( & row) ;
187
- set. insert ( v. crate_id ) ;
188
- versions. push ( v) ;
181
+ if ids. len ( ) > 0 {
182
+ let stmt = try!( conn. prepare ( format ! ( "SELECT * FROM versions \
183
+ WHERE id IN({:#})",
184
+ ids) . as_slice ( ) ) ) ;
185
+ for row in try!( stmt. query ( & [ ] ) ) {
186
+ let v: Version = Model :: from_row ( & row) ;
187
+ set. insert ( v. crate_id ) ;
188
+ versions. push ( v) ;
189
+ }
189
190
}
190
191
191
192
// Load all crates
192
- let ids = set. into_iter ( ) . collect :: < Vec < i32 > > ( ) ;
193
- let query = format ! ( "'{{{:#}}}'::int[]" , ids. as_slice( ) ) ;
194
- let stmt = try!( conn. prepare ( format ! ( "SELECT * FROM crates \
195
- WHERE id = ANY({})",
196
- query) . as_slice ( ) ) ) ;
197
193
let mut map = HashMap :: new ( ) ;
198
- for row in try!( stmt. query ( & [ ] ) ) {
199
- let p: Crate = Model :: from_row ( & row) ;
200
- map. insert ( p. id , p) ;
194
+ if set. len ( ) > 0 {
195
+ let ids = set. into_iter ( ) . collect :: < Vec < i32 > > ( ) ;
196
+ let stmt = try!( conn. prepare ( format ! ( "SELECT id, name FROM crates \
197
+ WHERE id IN({:#})",
198
+ ids) . as_slice ( ) ) ) ;
199
+ for row in try!( stmt. query ( & [ ] ) ) {
200
+ let id: i32 = row. get ( "id" ) ;
201
+ let name: String = row. get ( "name" ) ;
202
+ map. insert ( id, name) ;
203
+ }
201
204
}
202
205
203
206
// And respond!
0 commit comments