Add method for retrieiving column names (#2148)
* Add method for retrieiving column names * Address PR comments as well as add test
This commit is contained in:
parent
7fdeb8a4be
commit
c724ec5751
@ -115,6 +115,41 @@ impl QueryResult {
|
|||||||
{
|
{
|
||||||
Ok(T::try_get_many_by_index(self)?)
|
Ok(T::try_get_many_by_index(self)?)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Retrieves the names of the columns in the result set
|
||||||
|
pub fn column_names(&self) -> Vec<String> {
|
||||||
|
#[cfg(feature = "sqlx-dep")]
|
||||||
|
use sqlx::Column;
|
||||||
|
|
||||||
|
match &self.row {
|
||||||
|
#[cfg(feature = "sqlx-mysql")]
|
||||||
|
QueryResultRow::SqlxMySql(row) => {
|
||||||
|
row.columns().iter().map(|c| c.name().to_string()).collect()
|
||||||
|
}
|
||||||
|
#[cfg(feature = "sqlx-postgres")]
|
||||||
|
QueryResultRow::SqlxPostgres(row) => {
|
||||||
|
row.columns().iter().map(|c| c.name().to_string()).collect()
|
||||||
|
}
|
||||||
|
#[cfg(feature = "sqlx-sqlite")]
|
||||||
|
QueryResultRow::SqlxSqlite(row) => {
|
||||||
|
row.columns().iter().map(|c| c.name().to_string()).collect()
|
||||||
|
}
|
||||||
|
#[cfg(feature = "mock")]
|
||||||
|
QueryResultRow::Mock(row) => row
|
||||||
|
.clone()
|
||||||
|
.into_column_value_tuples()
|
||||||
|
.map(|(c, _)| c.to_string())
|
||||||
|
.collect(),
|
||||||
|
#[cfg(feature = "proxy")]
|
||||||
|
QueryResultRow::Proxy(row) => row
|
||||||
|
.clone()
|
||||||
|
.into_column_value_tuples()
|
||||||
|
.map(|(c, _)| c.to_string())
|
||||||
|
.collect(),
|
||||||
|
#[allow(unreachable_patterns)]
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[allow(unused_variables)]
|
#[allow(unused_variables)]
|
||||||
@ -1258,7 +1293,11 @@ try_from_u64_err!(uuid::Uuid);
|
|||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::TryGetError;
|
use std::collections::BTreeMap;
|
||||||
|
|
||||||
|
use sea_query::Value;
|
||||||
|
|
||||||
|
use super::*;
|
||||||
use crate::error::*;
|
use crate::error::*;
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
@ -1347,4 +1386,21 @@ mod tests {
|
|||||||
)
|
)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn column_names_from_query_result() {
|
||||||
|
let mut values = BTreeMap::new();
|
||||||
|
values.insert("id".to_string(), Value::Int(Some(1)));
|
||||||
|
values.insert(
|
||||||
|
"name".to_string(),
|
||||||
|
Value::String(Some(Box::new("Abc".to_owned()))),
|
||||||
|
);
|
||||||
|
let query_result = QueryResult {
|
||||||
|
row: QueryResultRow::Mock(crate::MockRow { values }),
|
||||||
|
};
|
||||||
|
assert_eq!(
|
||||||
|
query_result.column_names(),
|
||||||
|
vec!["id".to_owned(), "name".to_owned()]
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user