ILuffZhe commented on code in PR #3558:
URL: https://github.com/apache/calcite/pull/3558#discussion_r1874371055
##########
core/src/test/java/org/apache/calcite/test/JdbcTest.java:
##########
@@ -6827,6 +6827,35 @@ private void checkGetTimestamp(Connection con) throws
SQLException {
"Cannot apply = to the two different charsets ISO-8859-1 and
UTF-16LE");
}
+ /** Test case for
+ * <a
href="https://issues.apache.org/jira/browse/CALCITE-6146">[CALCITE-6146]
+ * Target charset should be used when comparing two strings through
+ * CONVERT/TRANSLATE function during validation</a>. */
+ @Test void testStringComparisonWithConvertFunc() {
+ CalciteAssert.AssertThat with = CalciteAssert.hr();
+ with.query("select \"name\", \"empid\" from \"hr\".\"emps\"\n"
+ + "where convert(\"name\" using GBK)=_GBK'Eric'")
+ .returns("name=Eric; empid=200\n");
+ with.query("select \"name\", \"empid\" from \"hr\".\"emps\"\n"
+ + "where _BIG5'Eric'=translate(\"name\" using BIG5)")
+ .returns("name=Eric; empid=200\n");
+ with.query("select \"name\", \"empid\" from \"hr\".\"emps\"\n"
+ + "where convert(convert(\"name\" using GBK) using BIG5)=_BIG5'Eric'")
+ .returns("name=Eric; empid=200\n");
+ // the charset of char(5) is ISO-8859-1 preserved in Collate
+ with.query("select \"name\", \"empid\" from \"hr\".\"emps\"\n"
+ + "where cast(convert(\"name\" using GBK) as char(5))=_BIG5'Eric'")
+ .throws_(
+ "Cannot apply = to the two different charsets ISO-8859-1 and
Big5");
Review Comment:
> Have you tried a similar test as a SqlOperatorTest as well, just to make
sure that it triggers there as well? I don't think this change is JDBC specific.
I've added some tests in SqlOperatorTest, however the tests
`testStringComparisonWithConvertFunc` in JdbcTest still fail.
When creating a new JavaType with different charset(by
`createTypeWithCharsetAndCollation`) during validation, the wrapped charset in
this JavaType is overwritten through canonizing process due to the
`DATATYPE_CACHE`.
I'm not sure this is a bug or specific designed, and I think considering the
charset for JavaType's(java.lang.String) digest computing might be a way to go.
--
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]