chucheng92 commented on code in PR #3395:
URL: https://github.com/apache/calcite/pull/3395#discussion_r1328761843
##########
core/src/test/resources/sql/misc.iq:
##########
@@ -2167,12 +2167,12 @@ select array[1,null,2] as a from (values (1));
values array['a',null,'bcd'],
array['efgh'];
-+----------------+
-| EXPR$0 |
-+----------------+
-| [a, null, bcd] |
-| [efgh] |
-+----------------+
++------------------+
+| EXPR$0 |
++------------------+
+| [a , null, bcd] |
Review Comment:
@JiajunBernoulli thanks for reviewing. this is a import change in this PR.
if we have `array('A', 'AB')`, the derived component type is `char(2)`, the
old behavior not cast 'A' to `char(2)` in runtime to match derived component
type. The correct behavior let 'A' match the `char(2)`, 'A' cast to `char(2)`,
then it will fill with extra spaces by default in calcite.
This is calcite and sql standard limitation. Of course, this does look
weird, actually calcite has other ways to remove spaces. We can activate
`SqlConformanceEnum.PRAGMATIC_2003` to let
`shouldConvertRaggedUnionTypesToVarying` be true, it will change array/map char
type to varchar type to skip these spaces.
More details can be found in javadoc
https://github.com/apache/calcite/blob/d9dd3ac8a9f695e111a0a5e77f45b61b90f4b5b6/core/src/main/java/org/apache/calcite/sql/validate/SqlConformance.java#L465C7-L465C7
I also have added some cases in the PR to show this difference.
##########
core/src/test/resources/sql/misc.iq:
##########
@@ -2167,12 +2167,12 @@ select array[1,null,2] as a from (values (1));
values array['a',null,'bcd'],
array['efgh'];
-+----------------+
-| EXPR$0 |
-+----------------+
-| [a, null, bcd] |
-| [efgh] |
-+----------------+
++------------------+
+| EXPR$0 |
++------------------+
+| [a , null, bcd] |
Review Comment:
@JiajunBernoulli thanks for reviewing. this is a import change in this PR.
if we have `array('A', 'AB')`, the derived component type is `char(2)`, the
old behavior not cast 'A' to `char(2)` in runtime to match derived component
type. The correct behavior let 'A' match the `char(2)`, 'A' cast to `char(2)`,
then it will fill with extra spaces by default in calcite.
This is calcite and sql standard limitation. Of course, this does look
weird, actually calcite has other ways to remove spaces. We can activate
`SqlConformanceEnum.PRAGMATIC_2003` to let
`shouldConvertRaggedUnionTypesToVarying` be true, it will change array/map char
type to varchar type to skip these spaces.
More details can be found in javadoc
https://github.com/apache/calcite/blob/d9dd3ac8a9f695e111a0a5e77f45b61b90f4b5b6/core/src/main/java/org/apache/calcite/sql/validate/SqlConformance.java#L465C7-L465C7
I also have added some cases in the PR to show this difference.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]