Query Information
PPL Command/Query:
source=people | eval array = array(1, -2, 3), result = transform(array, x -> x + 2) | fields result
Expected Result:
[3,0,5] of type INTEGER ARRAY
Actual Result:
[3,0,5] of type ANY ARRAY
Dataset Information
Dataset/Schema Type
Index Mapping
Mapping not relevant
Bug Description
Before #4892, the types are injected at runtime:
|
transferLambdaOutputToTargetType(lambdaFunction.apply(candidate), returnType)); |
|
org.apache.calcite.linq4j.function.Function2 lambdaFunction = |
|
(org.apache.calcite.linq4j.function.Function2) args[1]; |
However, the standard SQL requires the return type to be inferrable before executing the query. Currently, the argument is of type ANY, making the result also typed ANY. Therefore, the result array is an ANY array. For this case, it is indeed inferrable -- the array is an INTEGER ARRAY, meaning that x should be of type INTEGER instead of ANY.
Impact:
doctest in collections.md
Environment Information
OpenSearch Version: 3.4 (with PR #4892 )
Screenshots
File "/Users/yuanchu/src/sql/doctest/../docs/user/ppl/functions/collection.md", line 167, in /Users/yuanchu/src/sql/doctest/../docs/user/ppl/functions/collection.md
Failed example:
ppl_cmd.process('source=people | eval array = array(1, -2, 3), result = transform(array, x -> x + 2) | fields result | head 1')
Expected:
fetched rows / total rows = 1/1
+---------+
| result |
|---------|
| [3,0,5] |
+---------+
Got:
fetched rows / total rows = 1/1
+---------------+
| result |
|---------------|
| [3.0,0.0,5.0] |
+---------------+
Query Information
PPL Command/Query:
Expected Result:
[3,0,5]of typeINTEGER ARRAYActual Result:
[3,0,5]of typeANY ARRAYDataset Information
Dataset/Schema Type
Index Mapping
Mapping not relevant
Bug Description
Before #4892, the types are injected at runtime:
sql/core/src/main/java/org/opensearch/sql/expression/function/CollectionUDF/TransformFunctionImpl.java
Line 183 in d19ba53
sql/core/src/main/java/org/opensearch/sql/expression/function/CollectionUDF/TransformFunctionImpl.java
Lines 190 to 191 in d19ba53
However, the standard SQL requires the return type to be inferrable before executing the query. Currently, the argument is of type
ANY, making the result also typedANY. Therefore, the result array is an ANY array. For this case, it is indeed inferrable -- thearrayis an INTEGER ARRAY, meaning thatxshould be of typeINTEGERinstead ofANY.Impact:
doctest in
collections.mdEnvironment Information
OpenSearch Version: 3.4 (with PR #4892 )
Screenshots