diff options
-rw-r--r-- | src/cli.rs | 8 | ||||
-rw-r--r-- | src/commands/db.rs | 26 |
2 files changed, 25 insertions, 9 deletions
@@ -155,6 +155,14 @@ pub fn cli<'a>() -> App<'a> { .takes_value(false) .about("Format output as CSV") ) + .arg(Arg::new("with_pkg") + .required(false) + .multiple(false) + .long("with-pkg") + .takes_value(true) + .value_name("PKG") + .about("Only list submits that contained package PKG") + ) ) .subcommand(App::new("jobs") diff --git a/src/commands/db.rs b/src/commands/db.rs index 38e1de5..9f438c9 100644 --- a/src/commands/db.rs +++ b/src/commands/db.rs @@ -219,18 +219,26 @@ fn images(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { } fn submits(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { - use crate::schema::submits::dsl; - let csv = matches.is_present("csv"); let hdrs = mk_header(vec!["id", "time", "uuid"]); let conn = crate::db::establish_connection(conn_cfg)?; - let data = dsl::submits - .load::<models::Submit>(&conn)? - .into_iter() - .map(|submit| { - vec![format!("{}", submit.id), submit.submit_time.to_string(), submit.uuid.to_string()] - }) - .collect::<Vec<_>>(); + + let data = if let Some(pkgname) = matches.value_of("with_pkg").map(String::from) { + schema::packages::table + .filter(schema::packages::name.eq(pkgname)) + .inner_join(schema::jobs::table) + .inner_join(schema::submits::table) + .select(schema::submits::all_columns) + .load::<models::Submit>(&conn)? + } else { + schema::submits::table + .load::<models::Submit>(&conn)? + } + .into_iter() + .map(|submit| { + vec![format!("{}", submit.id), submit.submit_time.to_string(), submit.uuid.to_string()] + }) + .collect::<Vec<_>>(); if data.is_empty() { info!("No submits in database"); |