summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Beyer <mail@beyermatthias.de>2021-03-04 12:59:00 +0100
committerMatthias Beyer <mail@beyermatthias.de>2021-03-04 12:59:00 +0100
commite83155b64527de035b55d57c12c96463f0443b84 (patch)
treeeec2fc412c18fff64079c4776fee68cf4686deb2
parent2aaae5bccd18633df218c3ffafb5dda64ec7f806 (diff)
parent2ef64316d1af14e36d7946ccdf64a2dd97202fc0 (diff)
Merge branch 'fix-env-filter-jobs'
-rw-r--r--src/commands/db.rs56
-rw-r--r--src/util/mod.rs1
2 files changed, 33 insertions, 24 deletions
diff --git a/src/commands/db.rs b/src/commands/db.rs
index 0ef9893..349fa79 100644
--- a/src/commands/db.rs
+++ b/src/commands/db.rs
@@ -306,6 +306,11 @@ fn jobs(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
"Env",
]);
let conn = crate::db::establish_connection(conn_cfg)?;
+ let env_filter_tpl = matches
+ .value_of("filter_env")
+ .map(crate::util::env::parse_to_env)
+ .transpose()?;
+
let jobs = matches
.value_of("submit_uuid")
.map(uuid::Uuid::parse_str)
@@ -316,46 +321,49 @@ fn jobs(conn_cfg: DbConnectionConfig, matches: &ArgMatches) -> Result<()> {
.inner_join(schema::endpoints::table)
.inner_join(schema::packages::table)
.left_outer_join(schema::job_envs::table.inner_join(schema::envvars::table))
- .filter(schema::submits::uuid.eq(&submit_uuid));
+ .filter(schema::submits::uuid.eq(&submit_uuid))
+ .into_boxed();
- if let Some((env_name, env_value)) = matches
- .value_of("filter_env")
- .map(crate::util::env::parse_to_env)
- .transpose()?
- {
- sel.filter({
- use crate::diesel::BoolExpressionMethods;
+ let sel = if let Some((name, val)) = env_filter_tpl.as_ref() {
+ use crate::diesel::BoolExpressionMethods;
- schema::envvars::dsl::name
- .eq(env_name.as_ref())
- .and(schema::envvars::dsl::value.eq(env_value))
+ sel.filter({
+ schema::envvars::dsl::name.eq(name.as_ref())
+ .and(schema::envvars::dsl::value.eq(val))
})
- .load::<(
- models::Job,
- models::Submit,
- models::Endpoint,
- models::Package,
- Option<(models::JobEnv, models::EnvVar)>,
- )>(&conn)
- .map_err(Error::from)
} else {
- sel.load::<(
+ sel
+ };
+
+ sel.load::<(
models::Job,
models::Submit,
models::Endpoint,
models::Package,
Option<(models::JobEnv, models::EnvVar)>,
)>(&conn)
- .map_err(Error::from)
- }
+ .map_err(Error::from)
})
.unwrap_or_else(|| {
- dsl::jobs
+ let sel = dsl::jobs
.inner_join(crate::schema::submits::table)
.inner_join(crate::schema::endpoints::table)
.inner_join(crate::schema::packages::table)
.left_outer_join(schema::job_envs::table.inner_join(schema::envvars::table))
- .load::<(
+ .into_boxed();
+
+ let sel = if let Some((name, val)) = env_filter_tpl.as_ref() {
+ use crate::diesel::BoolExpressionMethods;
+
+ sel.filter({
+ schema::envvars::dsl::name.eq(name.as_ref())
+ .and(schema::envvars::dsl::value.eq(val))
+ })
+ } else {
+ sel
+ };
+
+ sel.load::<(
models::Job,
models::Submit,
models::Endpoint,
diff --git a/src/util/mod.rs b/src/util/mod.rs
index 8b78b2a..c8216b7 100644
--- a/src/util/mod.rs
+++ b/src/util/mod.rs
@@ -39,6 +39,7 @@ impl AsRef<str> for EnvironmentVariableName {
}
}
+
pub mod docker;
pub mod env;
pub mod filters;