Package org.apache.iceberg.expressions
Class Binder
java.lang.Object
org.apache.iceberg.expressions.Binder
Rewrites
expressions
by replacing unbound named references with references to
fields in a struct schema.-
Method Summary
Modifier and TypeMethodDescriptionstatic Expression
bind
(Types.StructType struct, Expression expr, boolean caseSensitive) Replaces all unbound/named references with bound references to fields in the given struct.boundReferences
(Types.StructType struct, List<Expression> exprs, boolean caseSensitive) static boolean
isBound
(Expression expr) Returns whether an expression is bound.
-
Method Details
-
bind
Replaces all unbound/named references with bound references to fields in the given struct.When a reference is resolved, any literal used in a predicate for that field is converted to the field's type using
Literal.to(Type)
. If automatic conversion to that type isn't allowed, avalidation exception
is thrown.The result expression may be simplified when constructed. For example,
isNull("a")
is replaced withalwaysFalse()
when"a"
is resolved to a required field.The expression cannot contain references that are already bound, or an
IllegalStateException
will be thrown.- Parameters:
struct
- Thestruct type
to resolve references by name.expr
- Anexpression
to rewrite with bound references.caseSensitive
- A boolean flag to control whether the bind should enforce case sensitivity.- Returns:
- the expression rewritten with bound references
- Throws:
ValidationException
- if literals do not match bound referencesIllegalStateException
- if any references are already bound
-
boundReferences
public static Set<Integer> boundReferences(Types.StructType struct, List<Expression> exprs, boolean caseSensitive) -
isBound
Returns whether an expression is bound.An expression is bound if all of its predicates are bound.
- Parameters:
expr
- anExpression
- Returns:
- true if the expression is bound
- Throws:
IllegalArgumentException
- if the expression has both bound and unbound predicates.
-