You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by jefn <54...@qq.com.INVALID> on 2025/07/11 07:39:36 UTC
An issue on calcite-1.38.0 searching for help
Hello, all Contributors to apache calcite:
I am facing a throny issue on calcite-1.38.0, when use the sql following:
```sql```
Select string_10_fun
from (
select string_10_fun
from (
select string_10_fun
from (
select string_10_fun
from (
select char_length(string_10) as string_10_fun
from table
order by double_01
)
)
order by string_10_fun
)
order by string_10_fun
)
order by string_10_fun
```
At this point, the query executed to Druid generates a result, which column name is string_10_fun, is valued type DruidType.Long, However, in the method where the physical plan is generated, the sort function’s parameter string_10, as the same name as char_length(string_10), is defined as an integer type ( which definition is in core/org/apache/calcite/sql/fun/SqlStdOperatorTable.java). Since Java does not allow automatic conversion from a higher precision type long to a lower type integer, the result returned by Druid(type long) cannot be used as a valid parameter to sort and causing an error.
To fix this question, I tried to change the SqlStdOperatorTable.char_length to ReturnTypes.BIGINT_NULLABLE, but it will cause a series of new question, such as function lpad and function road. Both of them are supported to use Type integer as the second parameter but not long. If the result of char_length need to be used as lpad or rpad. It will also causing errors.
I was wonder that if there are any solution could help solving this thorny issue.
Thanks for your reading!
Re: An issue on calcite-1.38.0 searching for help
Posted by Julian Hyde <jh...@gmail.com>.
You seem to be operating under some rather bizarre constraints that I don’t fully understand. I would use done column aliases so that columns of different types have different names. I would also introduce some casts.
Can you give a query that reproduces the problem outside of your environment? It’s difficult for us to help otherwise.
If this is a problem with Druid, did you try asking on the Druid list?
Julian
> On Jul 11, 2025, at 01:28, jefn <54...@qq.com.invalid> wrote:
>
> Hello, all Contributors to apache calcite:
> I am facing a throny issue on calcite-1.38.0, when use the sql following:
>
> ```sql```
> Select string_10_fun
> from (
> select string_10_fun
> from (
> select string_10_fun
> from (
> select string_10_fun
> from (
> select char_length(string_10) as string_10_fun
> from table
> order by double_01
> )
> )
> order by string_10_fun
> )
> order by string_10_fun
> )
> order by string_10_fun
> ```
>
> At this point, the query executed to Druid generates a result, which column name is string_10_fun, is valued type DruidType.Long, However, in the method where the physical plan is generated, the sort function’s parameter string_10, as the same name as char_length(string_10), is defined as an integer type ( which definition is in core/org/apache/calcite/sql/fun/SqlStdOperatorTable.java). Since Java does not allow automatic conversion from a higher precision type long to a lower type integer, the result returned by Druid(type long) cannot be used as a valid parameter to sort and causing an error.
> To fix this question, I tried to change the SqlStdOperatorTable.char_length to ReturnTypes.BIGINT_NULLABLE, but it will cause a series of new question, such as function lpad and function road. Both of them are supported to use Type integer as the second parameter but not long. If the result of char_length need to be used as lpad or rpad. It will also causing errors.
>
> I was wonder that if there are any solution could help solving this thorny issue.
>
> Thanks for your reading!