Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
pola-rs
GitHub Repository: pola-rs/polars
Path: blob/main/crates/polars-plan/src/plans/conversion/dsl_to_ir/utils.rs
7889 views
1
use super::scans::SourcesToFileInfo;
2
use super::*;
3
4
pub(super) struct DslConversionContext<'a> {
5
pub(super) expr_arena: &'a mut Arena<AExpr>,
6
pub(super) lp_arena: &'a mut Arena<IR>,
7
pub(super) conversion_optimizer: ConversionOptimizer,
8
pub(super) opt_flags: &'a mut OptFlags,
9
pub(super) nodes_scratch: &'a mut UnitVec<Node>,
10
pub(super) cache_file_info: SourcesToFileInfo,
11
pub(super) pushdown_maintain_errors: bool,
12
pub(super) verbose: bool,
13
pub(super) seen_caches: PlHashMap<UniqueId, Node>,
14
}
15
16
pub(super) fn expand_expressions(
17
input: Node,
18
exprs: Vec<Expr>,
19
lp_arena: &Arena<IR>,
20
expr_arena: &mut Arena<AExpr>,
21
opt_flags: &mut OptFlags,
22
) -> PolarsResult<Vec<ExprIR>> {
23
let schema = lp_arena.get(input).schema(lp_arena);
24
let exprs = rewrite_projections(exprs, &Default::default(), &schema, opt_flags)?;
25
to_expr_irs(
26
exprs,
27
&mut ExprToIRContext::new_with_opt_eager(expr_arena, &schema, opt_flags),
28
)
29
}
30
31
pub(super) fn empty_df() -> IR {
32
IR::DataFrameScan {
33
df: Arc::new(Default::default()),
34
schema: Arc::new(Default::default()),
35
output_schema: None,
36
}
37
}
38
39
pub(super) fn validate_expression(
40
node: Node,
41
expr_arena: &Arena<AExpr>,
42
input_schema: &Schema,
43
operation_name: &str,
44
) -> PolarsResult<()> {
45
let iter = aexpr_to_leaf_names_iter(node, expr_arena);
46
validate_columns_in_input(iter, input_schema, operation_name)
47
}
48
49
pub(super) fn validate_expressions<N: Into<Node>, I: IntoIterator<Item = N>>(
50
nodes: I,
51
expr_arena: &Arena<AExpr>,
52
input_schema: &Schema,
53
operation_name: &str,
54
) -> PolarsResult<()> {
55
let nodes = nodes.into_iter();
56
57
for node in nodes {
58
validate_expression(node.into(), expr_arena, input_schema, operation_name)?
59
}
60
Ok(())
61
}
62
63