[ 
https://issues.apache.org/jira/browse/CALCITE-5685?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17720284#comment-17720284
 ] 

ZheHu commented on CALCITE-5685:
--------------------------------

Here is a tricky point I've encountered. When parsing *SIGNED* and 
{*}UNSIGNED{*}, according to 
[mysql-doc|https://dev.mysql.com/doc/refman/8.0/en/cast-functions.html#function_cast],
 the former can be treated as {*}BigInt{*}, however, *UNSIGNED* values from 0 
to "2^64-1", which we may not match a corresponding RelDataType(need to be 
validated in CAST).

During test, I've also find two confusing issues:
 # The following SQL in *function.iq* returns 2 instead of 2.00
{code:java}
select cast('2' as decimal(10, 2)) as alia;
{code}

 # Testing two SQL(following SQL1 and SQL2) in JdbcTest, both the results are 
beyond expectations
{code:java}
SQL1: select cast('2.1' as decimal(10, 2)) as "u";
{code}
I get: *u=2.1*, which should be *2.10*.
{code:java}
SQL2: 
final String s = "select cast(\"unit_sales\" as decimal(10, 2)) as \"u\"\n"
            + "from \"sales_fact_1997\" as \"sales_fact_1997\"\n";
    CalciteAssert.that()
        .with(CalciteAssert.Config.FOODMART_CLONE)
        .query(s)
        .returnsUnordered("1.00");
{code}
The result has 4 scale, like '1.0000'.

> Support MySQL CONVERT function that works on data types
> -------------------------------------------------------
>
>                 Key: CALCITE-5685
>                 URL: https://issues.apache.org/jira/browse/CALCITE-5685
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.34.0
>            Reporter: ZheHu
>            Assignee: ZheHu
>            Priority: Minor
>
> CONVERT function in MySQL has two usage:
>  # convert(s USING transcodingName): as described in 
> [CALCITE-5664|https://issues.apache.org/jira/projects/CALCITE/issues/CALCITE-5664]
>  # convert(value, type): equivalent to CAST function that converts value to 
> specific type.
> Here are some examples:
>  * convert(150, CHAR)
>  * convert(now(), DATE)
>  * convert('9.5', DECIMAL(10, 2))
>  * convert(15, SIGNED)
>  * convert(-2, UNSIGNED)
> Noted: for CONVERT or CAST function in MySQL, they only support converting to 
> some specific data 
> types(binary、char、date、time、datetime、decimal、signed、unsigned. Moreover, the 
> last two aren't JDBC sql Types).
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to