Skip to content

SQL: CAST and CONVERT sporadically generate errors when grouped by #40240

Closed
@astefan

Description

@astefan
sql> SELECT CONVERT(ABS(EXTRACT(YEAR FROM "birth_date")), SQL_BIGINT) FROM test_emp GROUP BY CONVERT(ABS(EXTRACT(YEAR FROM "birth_date")), SQL_BIGINT);
Server error [Server sent bad type [folding_exception]. Original type was [line 1:8: Cannot find grouping for 'CONVERT(ABS(EXTRACT(YEAR FROM "birth_date")), SQL_BIGINT)']. [FoldingException[line 1:8: Cannot find grouping for 'CONVERT(ABS(EXTRACT(YEAR FROM "birth_date")), SQL_BIGINT)']
        at org.elasticsearch.xpack.sql.planner.QueryFolder$FoldAggregate.rule(QueryFolder.java:321)
        at org.elasticsearch.xpack.sql.planner.QueryFolder$FoldAggregate.rule(QueryFolder.java:206)
        at org.elasticsearch.xpack.sql.tree.Node.lambda$transformUp$11(Node.java:196)
        at org.elasticsearch.xpack.sql.tree.Node.transformUp(Node.java:190)
        at org.elasticsearch.xpack.sql.tree.Node.transformUp(Node.java:196)

And same goes for CAST to the same data type:

sql> SELECT CAST(ABS(EXTRACT(YEAR FROM "birth_date")) AS BIGINT) FROM test_emp GROUP BY CAST(ABS(EXTRACT(YEAR FROM "birth_date")) AS BIGINT);
Server error [Server sent bad type [folding_exception]. Original type was [line 1:8: Cannot find grouping for 'CAST(ABS(EXTRACT(YEAR FROM "birth_date")) AS BIGINT)']. [FoldingException[line 1:8: Cannot find grouping for 'CAST(ABS(EXTRACT(YEAR FROM "birth_date")) AS BIGINT)']
        at org.elasticsearch.xpack.sql.planner.QueryFolder$FoldAggregate.rule(QueryFolder.java:321)
        at org.elasticsearch.xpack.sql.planner.QueryFolder$FoldAggregate.rule(QueryFolder.java:206)
        at org.elasticsearch.xpack.sql.tree.Node.lambda$transformUp$11(Node.java:196)
        at org.elasticsearch.xpack.sql.tree.Node.transformUp(Node.java:190)

BUT, same query with a different type to be casted to works:

sql> SELECT CAST(ABS(EXTRACT(YEAR FROM "birth_date")) AS INTEGER) FROM test_emp GROUP BY CAST(ABS(EXTRACT(YEAR FROM "birth_date")) AS INTEGER);
ABS(EXTRACT(YEAR FROM "birth_date"))                                                                                                           
------------------------------------                                                                                                           
null                                                                                                                                           
1952                                                                                                                                           
1953                                                                                                                                           
1954                                                                                                                                           
1955                                                                                                                                           
1956                                                                                                                                           

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions