private static com.netflix.iceberg.expressions.Expression convert(Operation op,
Expression left,
Expression right) {
Pair<Transform, String> attrPair = null;
Operation leftOperation = null;
Literal lit = null;
if (right instanceof Literal) {
lit = (Literal) right;
attrPair = convertAttr(left);
leftOperation = op;
} else if (left instanceof Literal) {
lit = (Literal) left;
attrPair = convertAttr(right);
leftOperation = op.flipLR();
}
if (attrPair != null) {
switch (attrPair.first()) {
case IDENTITY:
return predicate(leftOperation, attrPair.second(), valueFromSpark(lit));
case YEAR:
return filter(leftOperation, attrPair.second(), (int) lit.value(),
SparkExpressions::yearToTimestampMicros);
case DAY:
return filter(leftOperation, attrPair.second(), (int) lit.value(),
SparkExpressions::dayToTimestampMicros);
default:
}
}
return null;
}