Steve Carlin created CALCITE-7132: ------------------------------------- Summary: Inconsistency with type coercion and character types Key: CALCITE-7132 URL: https://issues.apache.org/jira/browse/CALCITE-7132 Project: Calcite Issue Type: Bug Reporter: Steve Carlin
I'm filing this as a bug because I think someone should look at this. Something doesn't seem right to me here. Behavior changed on my upgrade from 1.37 to 1.40, but there are multiple layers to this problem and I"m not sure of the right thing to do. In my code, I have a binary comparison between a VARCHAR(6) and a CHAR(6) (e.g WHERE myvarchar_col = char_col). However, the type coercion is different when I reverse the parameters, (e.g. WHERE char_col = myvarchar_col). The inconsistency didn't exist in 1.37. So The AbstractTypeCoercion.commonTypeForBinaryComparison method is inconsistent in what it returns here. While there has been some new code added, it has always been inconsistent, even in 1.37. It returns the 2nd type with this line: [https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/sql/validate/implicit/AbstractTypeCoercion.java#L593] (aside, in 1.37, it returned the first type, but I don't think that's relevant to this since it's still inconsistent). The AbstractTypeCoersion.needToCast() function also changed, and this is why I now hit the problem. It used to skip casting before CALCITE-6350, but now it will do the casting because of this line: [https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/sql/validate/implicit/AbstractTypeCoercion.java#L290] My guess would be that the fix for CALCITE-6350 is correct, but it exposed the problem with the inconsistent return above? cc: [~mbudiu] -- This message was sent by Atlassian Jira (v8.20.10#820010)