fix cannot find issue when performing collect on an eager dataframe (#15577)

# Description
Performing a `polars collect` on an eager dataframe should be a no-op
operation. However, when used with a pipeline and not saving to a value
a cache error occurs. This addresses that cache error.
This commit is contained in:
Jack Wright 2025-04-15 12:25:11 -07:00 committed by GitHub
parent 2229370b13
commit 8f81812ef9
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -5,7 +5,9 @@ use crate::{
};
use nu_plugin::{EngineInterface, EvaluatedCall, PluginCommand};
use nu_protocol::{Category, Example, LabeledError, PipelineData, Signature, Span, Type, Value};
use nu_protocol::{
Category, Example, LabeledError, PipelineData, ShellError, Signature, Span, Type, Value,
};
#[derive(Clone)]
pub struct LazyCollect;
@ -78,13 +80,21 @@ impl PluginCommand for LazyCollect {
// This should just increment the cache value.
// We can return a value back without incrementing the
// cache value or the value will be dropped (issue #12828)
let _ = plugin.cache.get(&df.id, true)?;
let cv =
plugin
.cache
.get(&df.id, true)?
.ok_or_else(|| ShellError::GenericError {
error: format!("Failed to get cached value {}", df.id),
msg: "".into(),
span: Some(call.head),
help: None,
inner: vec![],
})?;
let df = NuDataFrame::from_cache_value(cv.value.clone())?;
// just return the dataframe, add to cache again to be safe
Ok(PipelineData::Value(
df.cache(plugin, engine, call.head)?.into_value(call.head),
None,
))
Ok(PipelineData::Value(df.into_value(call.head), None))
}
_ => Err(cant_convert_err(
&value,