MCPcopy Create free account
hub / github.com/apache/datafusion / rewrite_expr

Function rewrite_expr

datafusion/expr/src/expr_rewriter/guarantees.rs:100–128  ·  view source on GitHub ↗
(
    expr: Expr,
    guarantees: &HashMap<&Expr, &NullableInterval>,
)

Source from the content-addressed store, hash-verified

98}
99
100fn rewrite_expr(
101 expr: Expr,
102 guarantees: &HashMap<&Expr, &NullableInterval>,
103) -> Result<Transformed<Expr>> {
104 // If an expression collapses to a single value, replace it with a literal
105 if let Some(interval) = guarantees.get(&expr)
106 && let Some(value) = interval.single_value()
107 {
108 return Ok(Transformed::yes(lit(value)));
109 }
110
111 let result = match expr {
112 Expr::IsNull(inner) => match guarantees.get(inner.as_ref()) {
113 Some(NullableInterval::Null { .. }) => Transformed::yes(lit(true)),
114 Some(NullableInterval::NotNull { .. }) => Transformed::yes(lit(false)),
115 _ => Transformed::no(Expr::IsNull(inner)),
116 },
117 Expr::IsNotNull(inner) => match guarantees.get(inner.as_ref()) {
118 Some(NullableInterval::Null { .. }) => Transformed::yes(lit(false)),
119 Some(NullableInterval::NotNull { .. }) => Transformed::yes(lit(true)),
120 _ => Transformed::no(Expr::IsNotNull(inner)),
121 },
122 Expr::Between(b) => rewrite_between(b, guarantees)?,
123 Expr::BinaryExpr(b) => rewrite_binary_expr(b, guarantees)?,
124 Expr::InList(i) => rewrite_inlist(i, guarantees)?,
125 expr => Transformed::no(expr),
126 };
127 Ok(result)
128}
129
130fn rewrite_between(
131 between: Between,

Callers 2

f_upMethod · 0.70

Calls 9

IsNullClass · 0.85
IsNotNullClass · 0.85
rewrite_betweenFunction · 0.85
rewrite_binary_exprFunction · 0.85
rewrite_inlistFunction · 0.85
single_valueMethod · 0.80
litFunction · 0.50
getMethod · 0.45
as_refMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…