You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by "xuzifu666 (via GitHub)" <gi...@apache.org> on 2025/07/01 01:34:16 UTC

Re: [PR] [CALCITE-7063] Result type inferred for CONCAT_FUNCTION is incorrect for BINARY arguments [calcite]

xuzifu666 commented on code in PR #4431:
URL: https://github.com/apache/calcite/pull/4431#discussion_r2176230766


##########
testkit/src/main/java/org/apache/calcite/test/SqlOperatorTest.java:
##########
@@ -2545,6 +2545,30 @@ void testCastToBoolean(CastType castType, SqlOperatorFixture f) {
     f.checkNull("cast(null as integer array) || array[1]");
   }
 
+  /** Test case for <a href="https://issues.apache.org/jira/browse/CALCITE-7063">
+   * Result type inferred for CONCAT_FUNCTION is incorrect for BINARY arguments</a>. */
+  @Test void testConcatFuncMysql() {
+    final SqlOperatorFixture f = fixture().withLibrary(SqlLibrary.MYSQL);
+
+    // test for ByteString
+    f.setFor(SqlLibraryOperators.CONCAT_FUNCTION_MYSQL);
+    f.checkString("concat('a', x'61')", "6161", "BINARY(2) NOT NULL");
+    f.checkString("concat('abc', 'bb', 'cc')", "abcbbcc", "VARCHAR(7) NOT NULL");
+    f.checkString("concat(x'616263',x'62')", "61626362", "BINARY(4) NOT NULL");
+    f.checkString("concat(x'616263','abc')", "616263616263", "BINARY(6) NOT NULL");
+    f.checkString("concat(x'61',x'62')", "6162", "BINARY(2) NOT NULL");
+    f.checkString("concat(cast(x'61' as binary), cast(x'62' as binary), "

Review Comment:
   Had added the case, but currently Calcite type deduction can only identify calculations based on the type in advance. If Chinese characters are included, it seems difficult to accurately calculate the precision. For example, the following test returns binary(4) because Char(3) and binary(1) are received when the type is deduced. However, each Chinese character occupies 3 bytes. In addition, if the chars are mixed with Chinese and English, it is even more difficult to deduce. Can we use varbinary, a type without precision? @mihaibudiu 
   ```
   f.checkString("concat(_UTF8'方解石', x'61')", "e696b9e8a7a3e79fb361", "BINARY(4) NOT NULL");
   ```



-- 
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: commits-unsubscribe@calcite.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org