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 Expressionbind(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 booleanisBound(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 exceptionis 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
IllegalStateExceptionwill be thrown.- Parameters:
struct- Thestruct typeto resolve references by name.expr- Anexpressionto 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.
-