[ https://issues.apache.org/jira/browse/CALCITE-7073?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Lucas Brenner updated CALCITE-7073: ----------------------------------- Description: Calcite uses {{org.apache.calcite.avatica.util.ByteString}} internally to represent {{{}VARBINARY{}}}. However, when introducing a custom function that returns {{{}ByteString{}}}, such as {{UNBASE64}} (which decodes a Base64 string to bytes), its return type defaults to {{{}OTHER{}}}. This occurs because there is no explicit mapping for {{ByteString}} in the {{JavaToSqlTypeConversionRules}} class. [This PR|https://github.com/apache/calcite/pull/4440] adds the necessary mapping. The test added test {{testUnbase64DirectComparison}} provides a scenario where this bug occurs. If we remove the mapping introduced in the PR, we get the following error: {{Error while executing SQL "select "adhoc".unbase64(cast('dGVzdA==' as varchar)) = x'74657374' as C}} {{": From line 1, column 16 to line 1, column 66: Cannot apply '=' to arguments of type '<OTHER> = <BINARY(4)>'. Supported form(s): '<COMPARABLE_TYPE> = <COMPARABLE_TYPE>'}} This shows us that UNBASE64 is wrongfully defaulting to the type OTHER. was: Calcite uses {{org.apache.calcite.avatica.util.ByteString}} internally to represent {{{}VARBINARY{}}}. However, when introducing a custom function that returns {{{}ByteString{}}}, such as {{UNBASE64}} (which decodes a Base64 string to bytes), its return type defaults to {{{}OTHER{}}}. This occurs because there is no explicit mapping for {{ByteString}} in the {{JavaToSqlTypeConversionRules}} class. [This PR|https://github.com/apache/calcite/pull/4440] adds the necessary mapping. > Fix: Calcite Fails to Map ByteString to VARBINARY > ------------------------------------------------- > > Key: CALCITE-7073 > URL: https://issues.apache.org/jira/browse/CALCITE-7073 > Project: Calcite > Issue Type: Bug > Components: core > Reporter: Lucas Brenner > Priority: Minor > Labels: pull-request-available > > Calcite uses {{org.apache.calcite.avatica.util.ByteString}} internally to > represent {{{}VARBINARY{}}}. However, when introducing a custom function that > returns {{{}ByteString{}}}, such as {{UNBASE64}} (which decodes a Base64 > string to bytes), its return type defaults to {{{}OTHER{}}}. This occurs > because there is no explicit mapping for {{ByteString}} in the > {{JavaToSqlTypeConversionRules}} class. > > [This PR|https://github.com/apache/calcite/pull/4440] adds the necessary > mapping. > The test added test {{testUnbase64DirectComparison}} provides a scenario > where this bug occurs. If we remove the mapping introduced in the PR, we get > the following error: > {{Error while executing SQL "select "adhoc".unbase64(cast('dGVzdA==' as > varchar)) = x'74657374' as C}} > {{": From line 1, column 16 to line 1, column 66: Cannot apply '=' to > arguments of type '<OTHER> = <BINARY(4)>'. Supported form(s): > '<COMPARABLE_TYPE> = <COMPARABLE_TYPE>'}} > This shows us that UNBASE64 is wrongfully defaulting to the type OTHER. -- This message was sent by Atlassian Jira (v8.20.10#820010)