From 09525eb8aae8801468a75b867361106f6f830e7c Mon Sep 17 00:00:00 2001 From: Teddy Wing Date: Sun, 20 Mar 2022 01:46:27 +0100 Subject: select: Exclude primary key column unless given excluded columns If no excluded columns are given, exclude the primary key column by default. Otherwise, exclude only those columns in the `exclude_columns` list. --- src/main.rs | 6 +++--- src/select.rs | 18 +++++++++++++----- 2 files changed, 16 insertions(+), 8 deletions(-) diff --git a/src/main.rs b/src/main.rs index 0fe52aa..1d918d0 100644 --- a/src/main.rs +++ b/src/main.rs @@ -32,7 +32,7 @@ enum Command { record_id: String, #[clap(long)] - exclude_column: Vec, + exclude_column: Option>, }, } @@ -85,14 +85,14 @@ fn main() { &table_name, &pk, &record_id, - &exclude_column, + exclude_column.as_deref(), ).unwrap(), None => yaqlite::select( &dbconn, &table_name, &record_id, - &exclude_column, + exclude_column.as_deref(), ).unwrap(), }; diff --git a/src/select.rs b/src/select.rs index fb1b977..cc82cb5 100644 --- a/src/select.rs +++ b/src/select.rs @@ -2,7 +2,7 @@ pub fn select( dbconn: &rusqlite::Connection, table_name: &str, record_id: &str, - exclude_columns: &[C], + exclude_columns: Option<&[C]>, ) -> Result where C: AsRef + PartialEq { @@ -20,7 +20,7 @@ pub fn select_by_column( table_name: &str, primary_key_column: &str, record_id: &str, - exclude_columns: &[C], + exclude_columns: Option<&[C]>, ) -> Result where C: AsRef + PartialEq { @@ -53,9 +53,17 @@ where C: AsRef + PartialEq let mut data = yaml_rust::yaml::Hash::new(); for (i, column) in column_names.iter().enumerate() { - // Don't include excluded columns in the resulting hash. - if exclude_columns.iter().any(|c| c == column) { - continue + // Don't include excluded columns in the resulting hash. If + // `exclude_columns` is None, exclude the primary key column. + match exclude_columns { + Some(exclude_columns) => + if exclude_columns.iter().any(|c| c == column) { + continue + } + None => + if column == primary_key_column { + continue + } } let column_name = column.to_owned(); -- cgit v1.2.3