mirror of
https://github.com/nushell/nushell.git
synced 2025-04-29 23:54:26 +02:00
This moves to predominantly supporting only lazy dataframes for most operations. It removes a lot of the type conversion between lazy and eager dataframes based on what was inputted into the command. For the most part the changes will mean: * You will need to run `polars collect` after performing operations * The into-lazy command has been removed as it is redundant. * When opening files a lazy frame will be outputted by default if the reader supports lazy frames A list of individual command changes can be found [here](https://hackmd.io/@nucore/Bk-3V-hW0) --------- Co-authored-by: Ian Manske <ian.manske@pm.me>
89 lines
2.7 KiB
Rust
89 lines
2.7 KiB
Rust
use nu_protocol::{span as span_join, ShellError, Span, Spanned, Value};
|
|
|
|
// Default value used when selecting rows from dataframe
|
|
pub const DEFAULT_ROWS: usize = 5;
|
|
|
|
// Converts a Vec<Value> to a Vec<Spanned<String>> with a Span marking the whole
|
|
// location of the columns for error referencing
|
|
// todo - fix
|
|
#[allow(dead_code)]
|
|
pub(crate) fn convert_columns(
|
|
columns: Vec<Value>,
|
|
span: Span,
|
|
) -> Result<(Vec<Spanned<String>>, Span), ShellError> {
|
|
// First column span
|
|
let mut col_span = columns
|
|
.first()
|
|
.ok_or_else(|| ShellError::GenericError {
|
|
error: "Empty column list".into(),
|
|
msg: "Empty list found for command".into(),
|
|
span: Some(span),
|
|
help: None,
|
|
inner: vec![],
|
|
})
|
|
.map(|v| v.span())?;
|
|
|
|
let res = columns
|
|
.into_iter()
|
|
.map(|value| {
|
|
let span = value.span();
|
|
match value {
|
|
Value::String { val, .. } => {
|
|
col_span = span_join(&[col_span, span]);
|
|
Ok(Spanned { item: val, span })
|
|
}
|
|
_ => Err(ShellError::GenericError {
|
|
error: "Incorrect column format".into(),
|
|
msg: "Only string as column name".into(),
|
|
span: Some(span),
|
|
help: None,
|
|
inner: vec![],
|
|
}),
|
|
}
|
|
})
|
|
.collect::<Result<Vec<Spanned<String>>, _>>()?;
|
|
|
|
Ok((res, col_span))
|
|
}
|
|
|
|
// Converts a Vec<Value> to a Vec<String> with a Span marking the whole
|
|
// location of the columns for error referencing
|
|
pub(crate) fn convert_columns_string(
|
|
columns: Vec<Value>,
|
|
span: Span,
|
|
) -> Result<(Vec<String>, Span), ShellError> {
|
|
// First column span
|
|
let mut col_span = columns
|
|
.first()
|
|
.ok_or_else(|| ShellError::GenericError {
|
|
error: "Empty column list".into(),
|
|
msg: "Empty list found for command".into(),
|
|
span: Some(span),
|
|
help: None,
|
|
inner: vec![],
|
|
})
|
|
.map(|v| v.span())?;
|
|
|
|
let res = columns
|
|
.into_iter()
|
|
.map(|value| {
|
|
let span = value.span();
|
|
match value {
|
|
Value::String { val, .. } => {
|
|
col_span = span_join(&[col_span, span]);
|
|
Ok(val)
|
|
}
|
|
_ => Err(ShellError::GenericError {
|
|
error: "Incorrect column format".into(),
|
|
msg: "Only string as column name".into(),
|
|
span: Some(span),
|
|
help: None,
|
|
inner: vec![],
|
|
}),
|
|
}
|
|
})
|
|
.collect::<Result<Vec<String>, _>>()?;
|
|
|
|
Ok((res, col_span))
|
|
}
|