luoyuxia created FLINK-27402: -------------------------------- Summary: Unexpected boolean expression simplification for AND expression Key: FLINK-27402 URL: https://issues.apache.org/jira/browse/FLINK-27402 Project: Flink Issue Type: Bug Components: Table SQL / Planner Reporter: luoyuxia
Flink supports to compare between string and boolean, so the following sql can work fine {code:java} create table (c1 int, c2 string); select * from c2 = true; {code} But the following sql will throw excpetion {code:java} select * from c1 = 1 and c2 = true; {code} The reason it that Flink will try to simplify BOOLEAN expressions if possible in "c1 = 1 and c2 = true". So "c2 = true" will be simplified to "c2" by the following code in Flink: {code:java} RexSimplify#simplifyAnd2ForUnknownAsFalse // Simplify BOOLEAN expressions if possible while (term.getKind() == SqlKind.EQUALS) { RexCall call = (RexCall) term; if (call.getOperands().get(0).isAlwaysTrue()) { term = call.getOperands().get(1); terms.set(i, term); continue; } else if (call.getOperands().get(1).isAlwaysTrue()) { term = call.getOperands().get(0); terms.set(i, term); continue; } break; } {code} So the expression will be reduced to ""c1 = 1 and c2". But AND requries both sides are boolean expression and c2 is not a boolean expression for it actually is a string. Then the exception "Boolean expression type expected" is thrown. -- This message was sent by Atlassian Jira (v8.20.7#820007)