diff options
author | Matthias Beyer <matthias.beyer@atos.net> | 2021-04-22 09:40:01 +0200 |
---|---|---|
committer | Matthias Beyer <matthias.beyer@atos.net> | 2021-04-22 10:16:08 +0200 |
commit | e342a2b39edeca20519a1d28dbba394ad5da6a10 (patch) | |
tree | 03412355dfd89560c6f544b59d1dceaaf242256c /src | |
parent | 36fb70bb5d671af2d9c388c5d523a593422bed7a (diff) |
Refactor into three query blocks
This should be equivalent to the previous version.
The first if-block should be equivalent because of the changed join schema,
which should select all submits for jobs where packages have the appropriate
name.
Signed-off-by: Matthias Beyer <matthias.beyer@atos.net>
Diffstat (limited to 'src')
-rw-r--r-- | src/commands/db.rs | 35 |
1 files changed, 13 insertions, 22 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs index bafc661..312f268 100644 --- a/src/commands/db.rs +++ b/src/commands/db.rs @@ -234,37 +234,28 @@ fn submits(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> { let hdrs = crate::commands::util::mk_header(vec!["id", "time", "uuid"]); let conn = crate::db::establish_connection(conn_cfg)?; - // Helper to get all submits that were made _for_ a package - let submits_for = |pkgname: &str| { - schema::submits::table - .inner_join(schema::packages::table) - .filter(schema::packages::dsl::name.eq(&pkgname)) - .select(schema::submits::all_columns) - .load::<models::Submit>(&conn) - }; + let query = schema::submits::table.into_boxed(); let submits = if let Some(pkgname) = matches.value_of("with_pkg").map(String::from) { - // Get all submits which included the package, but were not made _for_ the package - let submits_with_pkg = schema::submits::table + // Get all submits which included the package, but were not necessarily made _for_ the package + query .inner_join(schema::jobs::table) - .inner_join(schema::packages::table) + .inner_join(schema::packages::table.on(schema::jobs::package_id.eq(schema::packages::id))) .filter(schema::packages::name.eq(&pkgname)) .select(schema::submits::all_columns) - .load::<models::Submit>(&conn)?; - - let submits_for_pkg = submits_for(&pkgname)?; - - submits_with_pkg - .into_iter() - .chain(submits_for_pkg.into_iter()) - .collect() + .load::<models::Submit>(&conn)? } else if let Some(pkgname) = matches.value_of("for_pkg") { // Get all submits _for_ the package - submits_for(pkgname)? + query + .inner_join({ + schema::packages::table.on(schema::submits::requested_package_id.eq(schema::packages::id)) + }) + .filter(schema::packages::dsl::name.eq(&pkgname)) + .select(schema::submits::all_columns) + .load::<models::Submit>(&conn)? } else { // default: Get all submits - schema::submits::table - .load::<models::Submit>(&conn)? + query.load::<models::Submit>(&conn)? }; // Helper to map Submit -> Vec<String> |