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

Mihai Budiu commented on CALCITE-6277:
--------------------------------------

'Infinity' is a string in SQL. These functions require a double argument, so 
the string is implicitly cast to a double.

You can make sure that this happens by using an explicit cast: log10(CAST 
'Infinity' as DOUBLE).

The databases may have different names for the double type, though. Postgres 
uses "double precision" for example.

Postgres does support Infinity as a literal, you don't need quotes.

> I don't want calcite to adapt to mysql and postgres and other SQL dialects"

But this is exactly what you have to do to implement these functions.

You have a specification of these functions, which is how they work in these 
dialects. You have to emulate that precisely, everything else is a bug. Calcite 
was designed to be able to emulate as many dialects as possible, so it is very 
flexible. It doesn't really have "its own processing method".

> About the processing of +infinity parameters and  -infinity parameters in 
> math function
> ---------------------------------------------------------------------------------------
>
>                 Key: CALCITE-6277
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6277
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.36.0
>            Reporter: Caican Cai
>            Priority: Major
>             Fix For: 1.37.0
>
>         Attachments: 2024-02-21 13-10-00屏幕截图.png
>
>
> {code:java}
> log10('-Infinity'); 
> log2('-Infinity'); 
> power('Infinity',2){code}
> As above, using the + infinity function in some math functions will report an 
> error in calcite, but mysql and posgtres will not report an error. I think 
> the + infinity parameter is meaningful in mathematics.
> {code:java}
> --postgres
> postgres=# select power('Infinity', -2);
>  power 
> -------
>      0
> (1 row)postgres=# select log('Infinity', 2);
>  log 
> -----
>    0
> (1 row)postgres=# select log10('Infinity');
>   log10   
> ----------
>  Infinity
> (1 row)postgres=# select power('Infinity', 2);
>   power   
> ----------
>  Infinity
> (1 row)
>  
> --mysql
> mysql> select log10('+Infinity');
> +--------------------+
> | log10('+Infinity') |
> +--------------------+
> |               NULL |
> +--------------------+
> 1 row in set, 2 warnings (0.00 sec)mysql> select power('Infinity', 2);
> +----------------------+
> | power('Infinity', 2) |
> +----------------------+
> |                    0 |
> +----------------------+
> 1 row in set, 1 warning (0.00 sec)mysql> select power('-Infinity', 2);
> +-----------------------+
> | power('-Infinity', 2) |
> +-----------------------+
> |                     0 |
> +-----------------------+
> 1 row in set, 1 warning (0.00 sec)mysql> select log10('-Infinity');
> +--------------------+
> | log10('-Infinity') |
> +--------------------+
> |               NULL |
> +--------------------+
> 1 row in set, 2 warnings (0.00 sec)
>    {code}



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

Reply via email to