@pnowojski Thanks for looking into it.
I think there are bugs in all your 4 sqls, so we can't get the conclusions
from them.
- In mysql, trailing spaces are removed when CHAR values are retrieved from a
table.
- You use literal of length 3('aa ') to compare to CHAR(4) and VARCHAR(4).
- Except for mysql, other database will not remove trailing spaces so that the
result of `case when` contains blanks.
What result type of `case when`? Should we change case when result type to
varchar? I think we can get the answer form the following sqls.
1. Mysql
There are no doubt, since mysql Reference Manual says the return type is
VARCHAR.
2. Oracle
[http://sqlfiddle.com/#!4/cd577/2/0](http://sqlfiddle.com/#!4/cd577/2/0)
3. PostgreSql
[http://sqlfiddle.com/#!17/c20bd/3/0](http://sqlfiddle.com/#!17/c20bd/3/0)
4. SqlServer
[http://sqlfiddle.com/#!18/c20bd/10/0](http://sqlfiddle.com/#!18/c20bd/10/0)
>From the results, we can see that
- There are no trailing spaces
- The result type length should not be 1, i.e., can not be char(1) or
varchar(1). It should be char(3) or varchar(3)
- Result of `concat(CAST('a' AS char(3)), '|')` contains blanks while
`concat(CAST('a' AS varchar(3)), '|')` not, so the result type of `case when`
should be varchar.
In Calcite, character constant, for example 'Hello, world!', '', _N'Bonjour',
_ISO-8859-1'It''s superman!' COLLATE SHIFT_JIS$ja_JP$2. These are always CHAR,
never VARCHAR. So it seems not possible or acceptable to change all literals to
VARCHAR in Calcite.
I think it is meaningful to turn the result type of `case when` to VARCHAR.
What do you think?
Thanks, Hequn
[ Full content available at: https://github.com/apache/flink/pull/6519 ]
This message was relayed via gitbox.apache.org for [email protected]