diff --git a/core/src/main/java/org/opensearch/sql/calcite/utils/OpenSearchTypeFactory.java b/core/src/main/java/org/opensearch/sql/calcite/utils/OpenSearchTypeFactory.java index 2ae1dfa9c1..914f5acdfc 100644 --- a/core/src/main/java/org/opensearch/sql/calcite/utils/OpenSearchTypeFactory.java +++ b/core/src/main/java/org/opensearch/sql/calcite/utils/OpenSearchTypeFactory.java @@ -177,11 +177,10 @@ public static RelDataType convertExprTypeToRelDataType(ExprType fieldType, boole return TYPE_FACTORY.createArrayType( TYPE_FACTORY.createSqlType(SqlTypeName.ANY, nullable), -1); case STRUCT: - // TODO: should use RelRecordType instead of MapSqlType here - // https://github.com/opensearch-project/sql/issues/3459 final RelDataType relKey = TYPE_FACTORY.createSqlType(SqlTypeName.VARCHAR); + // TODO: should we provide more precise type here? return TYPE_FACTORY.createMapType( - relKey, TYPE_FACTORY.createSqlType(SqlTypeName.BINARY), nullable); + relKey, TYPE_FACTORY.createSqlType(SqlTypeName.ANY), nullable); case UNKNOWN: default: throw new IllegalArgumentException( diff --git a/integ-test/src/yamlRestTest/resources/rest-api-spec/test/issues/3459.yml b/integ-test/src/yamlRestTest/resources/rest-api-spec/test/issues/3459.yml new file mode 100644 index 0000000000..66e655ba45 --- /dev/null +++ b/integ-test/src/yamlRestTest/resources/rest-api-spec/test/issues/3459.yml @@ -0,0 +1,59 @@ +setup: + - do: + query.settings: + body: + transient: + plugins.calcite.enabled : true + + - do: + indices.create: + index: test + body: + mappings: + properties: + parent_field: + properties: + child_field: + type: integer + + - do: + bulk: + index: test + refresh: true + body: + - '{"index": {}}' + - '{ "parent_field": { "child_field": 4 } }' + - '{"index": {}}' + - '{ "parent_field": { "child_field": 3 } }' + - '{"index": {}}' + - '{ "parent_field": { "child_field": 2 } }' + - '{"index": {}}' + - '{ "parent_field": { "child_field": 1 } }' + - '{"index": {}}' + - '{ "parent_field": { "child_field": 5 } }' + +--- +teardown: + - do: + query.settings: + body: + transient: + plugins.calcite.enabled : false + +--- +"Access to nested field after field command": + - skip: + features: + - headers + - allowed_warnings + + - do: + headers: + Content-Type: 'application/json' + ppl: + body: + query: source=test | fields parent_field | sort parent_field.child_field | head 3 + + - match: { total: 3 } + - match: { schema: [ { "name": "parent_field", "type": "struct" } ] } + - match: { datarows: [ [ {"child_field": 1} ], [ {"child_field": 2} ], [ {"child_field": 3} ] ] }