From fe04aee4660b7e3bdfd5e464c699b9a40876e6b1 Mon Sep 17 00:00:00 2001 From: Alexey Ozeritskiy Date: Tue, 17 Sep 2024 16:55:56 +0200 Subject: [PATCH] Fix typing for block decimal avg (use logic of non-block version) (#9327) --- .../yql/core/type_ann/type_ann_list.cpp | 6 +- .../sql/dq_file/part4/canondata/result.json | 22 +++++ .../sql/dq_file/part9/canondata/result.json | 22 +++++ .../hybrid_file/part1/canondata/result.json | 14 ++++ .../hybrid_file/part6/canondata/result.json | 14 ++++ .../tests/sql/sql2yql/canondata/result.json | 28 +++++++ .../agg_phases_agg_apply/avg_decimal.sql | 81 +++++++++++++++++++ .../tests/sql/suites/blocks/decimal_avg.cfg | 1 + .../tests/sql/suites/blocks/decimal_avg.sql | 8 ++ .../part4/canondata/result.json | 28 +++++++ .../part9/canondata/result.json | 21 +++++ 11 files changed, 244 insertions(+), 1 deletion(-) create mode 100644 ydb/library/yql/tests/sql/suites/agg_phases_agg_apply/avg_decimal.sql create mode 100644 ydb/library/yql/tests/sql/suites/blocks/decimal_avg.cfg create mode 100644 ydb/library/yql/tests/sql/suites/blocks/decimal_avg.sql diff --git a/ydb/library/yql/core/type_ann/type_ann_list.cpp b/ydb/library/yql/core/type_ann/type_ann_list.cpp index 6b10135fcc3a..f9b4b571b959 100644 --- a/ydb/library/yql/core/type_ann/type_ann_list.cpp +++ b/ydb/library/yql/core/type_ann/type_ann_list.cpp @@ -5668,7 +5668,11 @@ namespace { } } - input->SetTypeAnn(retType); + if (originalType && originalType->GetKind() != NYql::ETypeAnnotationKind::Null) { + input->SetTypeAnn(originalType); + } else { + input->SetTypeAnn(retType); + } } else if (name == "min" || name == "max") { auto itemType = input->Child(overState ? 2 : 1)->GetTypeAnn()->Cast()->GetType(); const TTypeAnnotationNode* retType; diff --git a/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json index dd931f50b309..1d1f3e34c21a 100644 --- a/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part4/canondata/result.json @@ -617,6 +617,28 @@ } ], "test.test[blocks-combine_all_min_filter_opt--Results]": [], + "test.test[blocks-decimal_avg--Analyze]": [ + { + "checksum": "e7f90eff609d00b82ab5da5b0310dc13", + "size": 5474, + "uri": "https://{canondata_backend}/212715/e9c0ac99e18ec4ae27142c9c2577dc676b157d44/resource.tar.gz#test.test_blocks-decimal_avg--Analyze_/plan.txt" + } + ], + "test.test[blocks-decimal_avg--Debug]": [ + { + "checksum": "8b2e667e5990a8a85f31c3cc84653101", + "size": 3946, + "uri": "https://{canondata_backend}/212715/e9c0ac99e18ec4ae27142c9c2577dc676b157d44/resource.tar.gz#test.test_blocks-decimal_avg--Debug_/opt.yql_patched" + } + ], + "test.test[blocks-decimal_avg--Plan]": [ + { + "checksum": "e7f90eff609d00b82ab5da5b0310dc13", + "size": 5474, + "uri": "https://{canondata_backend}/212715/e9c0ac99e18ec4ae27142c9c2577dc676b157d44/resource.tar.gz#test.test_blocks-decimal_avg--Plan_/plan.txt" + } + ], + "test.test[blocks-decimal_avg--Results]": [], "test.test[blocks-json_document_type--Analyze]": [ { "checksum": "918007365a27e11795012d2f4841750b", diff --git a/ydb/library/yql/tests/sql/dq_file/part9/canondata/result.json b/ydb/library/yql/tests/sql/dq_file/part9/canondata/result.json index c7bf0fecdc8a..fd1daadb05c4 100644 --- a/ydb/library/yql/tests/sql/dq_file/part9/canondata/result.json +++ b/ydb/library/yql/tests/sql/dq_file/part9/canondata/result.json @@ -87,6 +87,28 @@ } ], "test.test[agg_phases-sum_opt-default.txt-Results]": [], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Analyze]": [ + { + "checksum": "01775e7c945a56ebf0edc2d478f4f68d", + "size": 2567, + "uri": "https://{canondata_backend}/1814674/77d41c903ddd926a62e64221c321109c23757fa8/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Analyze_/plan.txt" + } + ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Debug]": [ + { + "checksum": "c141458b4faf20cdfa0b2581438b2060", + "size": 2167, + "uri": "https://{canondata_backend}/1814674/77d41c903ddd926a62e64221c321109c23757fa8/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Plan]": [ + { + "checksum": "01775e7c945a56ebf0edc2d478f4f68d", + "size": 2567, + "uri": "https://{canondata_backend}/1814674/77d41c903ddd926a62e64221c321109c23757fa8/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Plan_/plan.txt" + } + ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Results]": [], "test.test[aggr_factory-def_value_full_table-default.txt-Analyze]": [ { "checksum": "b4dd508a329723c74293d80f0278c705", diff --git a/ydb/library/yql/tests/sql/hybrid_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part1/canondata/result.json index ae7d290f1940..d0fb61459776 100644 --- a/ydb/library/yql/tests/sql/hybrid_file/part1/canondata/result.json +++ b/ydb/library/yql/tests/sql/hybrid_file/part1/canondata/result.json @@ -601,6 +601,20 @@ "uri": "https://{canondata_backend}/1130705/20da23c279246100d1cf6675c98b016c27d78ebb/resource.tar.gz#test.test_blocks-date_less_or_equal--Plan_/plan.txt" } ], + "test.test[blocks-decimal_avg--Debug]": [ + { + "checksum": "e5ac1e47bf139b64ded063ddd4cc4c12", + "size": 5024, + "uri": "https://{canondata_backend}/1775319/e518084f9a6f7560212f360435984047c6cdf17e/resource.tar.gz#test.test_blocks-decimal_avg--Debug_/opt.yql_patched" + } + ], + "test.test[blocks-decimal_avg--Plan]": [ + { + "checksum": "4dca34e324385b874d48ea9873fef139", + "size": 5859, + "uri": "https://{canondata_backend}/1775319/e518084f9a6f7560212f360435984047c6cdf17e/resource.tar.gz#test.test_blocks-decimal_avg--Plan_/plan.txt" + } + ], "test.test[blocks-decimal_unary--Debug]": [ { "checksum": "91d5eaa9920fe9015067ab6eca6c9a1e", diff --git a/ydb/library/yql/tests/sql/hybrid_file/part6/canondata/result.json b/ydb/library/yql/tests/sql/hybrid_file/part6/canondata/result.json index db1178192b13..08dc0ecb08b3 100644 --- a/ydb/library/yql/tests/sql/hybrid_file/part6/canondata/result.json +++ b/ydb/library/yql/tests/sql/hybrid_file/part6/canondata/result.json @@ -195,6 +195,20 @@ "uri": "https://{canondata_backend}/1775059/3cb7d014d70b84dbcb84645fa987dd9d47d7fd6c/resource.tar.gz#test.test_agg_phases-min_by_opt-default.txt-Plan_/plan.txt" } ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Debug]": [ + { + "checksum": "c56652553674020751912ebf71b374bd", + "size": 2166, + "uri": "https://{canondata_backend}/1937424/4bf3629a378a97c2134d5c9ef82b431269f7812a/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Debug_/opt.yql_patched" + } + ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Plan]": [ + { + "checksum": "01775e7c945a56ebf0edc2d478f4f68d", + "size": 2567, + "uri": "https://{canondata_backend}/1937424/4bf3629a378a97c2134d5c9ef82b431269f7812a/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Plan_/plan.txt" + } + ], "test.test[agg_phases_agg_apply-sum_null-default.txt-Debug]": [ { "checksum": "2e40595d136cde726a1085ed674a7f29", diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index ecb1c1e2c373..31980b046784 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -1126,6 +1126,13 @@ "uri": "https://{canondata_backend}/1784117/d56ae82ad9d30397a41490647be1bd2124718f98/resource.tar.gz#test_sql2yql.test_agg_phases_agg_apply-avg_/sql.yql" } ], + "test_sql2yql.test[agg_phases_agg_apply-avg_decimal]": [ + { + "checksum": "6995e83bda818a897fdd0eae9d07dcc0", + "size": 13095, + "uri": "https://{canondata_backend}/1942415/d77582873ccf3369a6a530c6d99bb20a670b52e8/resource.tar.gz#test_sql2yql.test_agg_phases_agg_apply-avg_decimal_/sql.yql" + } + ], "test_sql2yql.test[agg_phases_agg_apply-count]": [ { "checksum": "c3ef6597e1dad8332df19e9bd78f2dc5", @@ -3779,6 +3786,13 @@ "uri": "https://{canondata_backend}/1942100/4770669c24007543908dd55606255f269883b26e/resource.tar.gz#test_sql2yql.test_blocks-date_top_sort_/sql.yql" } ], + "test_sql2yql.test[blocks-decimal_avg]": [ + { + "checksum": "196ced0d7dead2abf0aa5fa8dc6b10cf", + "size": 2231, + "uri": "https://{canondata_backend}/1775319/1580c5e8e4c110f53c15179e596f8942460372c9/resource.tar.gz#test_sql2yql.test_blocks-decimal_avg_/sql.yql" + } + ], "test_sql2yql.test[blocks-decimal_comparison]": [ { "checksum": "8ca5e73502f650d4d05eb9770ffbf4a0", @@ -20782,6 +20796,13 @@ "uri": "https://{canondata_backend}/1880306/64654158d6bfb1289c66c626a8162239289559d0/resource.tar.gz#test_sql_format.test_agg_phases_agg_apply-avg_/formatted.sql" } ], + "test_sql_format.test[agg_phases_agg_apply-avg_decimal]": [ + { + "checksum": "8d57ef61f93cb12395632a984257cda6", + "size": 1443, + "uri": "https://{canondata_backend}/1942415/d77582873ccf3369a6a530c6d99bb20a670b52e8/resource.tar.gz#test_sql_format.test_agg_phases_agg_apply-avg_decimal_/formatted.sql" + } + ], "test_sql_format.test[agg_phases_agg_apply-count]": [ { "checksum": "674b92a7d1504376a5f847da9c78a38e", @@ -23435,6 +23456,13 @@ "uri": "https://{canondata_backend}/1942100/4770669c24007543908dd55606255f269883b26e/resource.tar.gz#test_sql_format.test_blocks-date_top_sort_/formatted.sql" } ], + "test_sql_format.test[blocks-decimal_avg]": [ + { + "checksum": "d077a59363e93c9cf3548b776b93e316", + "size": 175, + "uri": "https://{canondata_backend}/1775319/1580c5e8e4c110f53c15179e596f8942460372c9/resource.tar.gz#test_sql_format.test_blocks-decimal_avg_/formatted.sql" + } + ], "test_sql_format.test[blocks-decimal_comparison]": [ { "checksum": "95016b817141a7fbfd888700217463bc", diff --git a/ydb/library/yql/tests/sql/suites/agg_phases_agg_apply/avg_decimal.sql b/ydb/library/yql/tests/sql/suites/agg_phases_agg_apply/avg_decimal.sql new file mode 100644 index 000000000000..8f07f9c15bdb --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/agg_phases_agg_apply/avg_decimal.sql @@ -0,0 +1,81 @@ +/* syntax version 1 */ +/* postgres can not */ +pragma EmitAggApply; + +$t = SELECT * FROM AS_TABLE([<|key: 1, value: decimal("2.1", 7, 2)|>,<|key: 1, value: decimal("3.5", 7, 2)|>]); + +$p = +SELECT + key,avg(value) as a +FROM $t +GROUP BY + key + with combine + ; + +$p = PROCESS $p; +--select FormatType(TypeOf($p)); +select * from $p; + +$p = SELECT + key,avg(a) as a +FROM $p +GROUP BY + key + with combinestate + ; + +$p = PROCESS $p; +--select FormatType(TypeOf($p)); +select * from $p; + +$p = SELECT + key,avg(a) as a +FROM $p +GROUP BY + key + with mergestate + ; + +$p = PROCESS $p; +--select FormatType(TypeOf($p)); +select * from $p; + + +$p1 = SELECT + key,avg(a) as a +FROM $p +GROUP BY + key + with mergefinalize + ; + +$p1 = PROCESS $p1; +--select FormatType(TypeOf($p1)); +select * from $p1; + +$p2 = SELECT + key,avg(a) as a +FROM (select key, just(a) as a from $p) +GROUP BY + key + with mergemanyfinalize + ; + +$p2 = PROCESS $p2; +--select FormatType(TypeOf($p2)); +select * from $p2; + +$p3 = +SELECT + key,avg(value) as a +FROM $t +GROUP BY + key + with finalize + ; + +$p3 = PROCESS $p3; +--select FormatType(TypeOf($p)); +select * from $p3; + diff --git a/ydb/library/yql/tests/sql/suites/blocks/decimal_avg.cfg b/ydb/library/yql/tests/sql/suites/blocks/decimal_avg.cfg new file mode 100644 index 000000000000..a21c6560ede8 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/blocks/decimal_avg.cfg @@ -0,0 +1 @@ +in Input input_decimal.txt diff --git a/ydb/library/yql/tests/sql/suites/blocks/decimal_avg.sql b/ydb/library/yql/tests/sql/suites/blocks/decimal_avg.sql new file mode 100644 index 000000000000..3e1dd4998337 --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/blocks/decimal_avg.sql @@ -0,0 +1,8 @@ +USE plato; + +SELECT + avg(cs_ext_list_price), avg(cs_ext_tax), + avg(cs_ext_list_price) * decimal("1.1", 7, 2), + decimal("1.1", 7, 2) * avg(cs_ext_tax), +FROM Input; + diff --git a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json index 88e8a6bd9096..5cc70ef09d34 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part4/canondata/result.json @@ -544,6 +544,34 @@ "uri": "https://{canondata_backend}/1923547/b4d7ef0db5ad067d9e88ccc4c12a4e7ac4da46df/resource.tar.gz#test.test_blocks-combine_all_min_filter_opt--Results_/results.txt" } ], + "test.test[blocks-decimal_avg--Debug]": [ + { + "checksum": "cc25aaccbcf6e6a9eae8f64d05f22249", + "size": 4240, + "uri": "https://{canondata_backend}/1931696/1cb947d289c4d65b45c3fba919aa59c8a7d02c7a/resource.tar.gz#test.test_blocks-decimal_avg--Debug_/opt.yql" + } + ], + "test.test[blocks-decimal_avg--Peephole]": [ + { + "checksum": "cdc8a4d00988408c92640297fa47c45a", + "size": 3137, + "uri": "https://{canondata_backend}/1931696/1cb947d289c4d65b45c3fba919aa59c8a7d02c7a/resource.tar.gz#test.test_blocks-decimal_avg--Peephole_/opt.yql" + } + ], + "test.test[blocks-decimal_avg--Plan]": [ + { + "checksum": "4fd2b20bef4b38f050144521fa5cbde2", + "size": 5255, + "uri": "https://{canondata_backend}/1931696/1cb947d289c4d65b45c3fba919aa59c8a7d02c7a/resource.tar.gz#test.test_blocks-decimal_avg--Plan_/plan.txt" + } + ], + "test.test[blocks-decimal_avg--Results]": [ + { + "checksum": "73950ed0f0cd1ee8aba4b14dac403407", + "size": 2732, + "uri": "https://{canondata_backend}/1931696/1cb947d289c4d65b45c3fba919aa59c8a7d02c7a/resource.tar.gz#test.test_blocks-decimal_avg--Results_/results.txt" + } + ], "test.test[blocks-json_document_type--Debug]": [ { "checksum": "2b2604f43a5fbed9f67049c9833d5c63", diff --git a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json index 671badf962c3..cde53ae0b96c 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part9/canondata/result.json @@ -83,6 +83,27 @@ "uri": "https://{canondata_backend}/1775059/59a8dbe71df1bdc11b3f063ab535eee737c36649/resource.tar.gz#test.test_agg_phases-sum_opt-default.txt-Results_/results.txt" } ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Debug]": [ + { + "checksum": "cd392f0b06514619e1bf394ac2d9b7b0", + "size": 2096, + "uri": "https://{canondata_backend}/1881367/fb8d21445e0a0d2f03124fd4ba32bf9268680d10/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Debug_/opt.yql" + } + ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Plan]": [ + { + "checksum": "01775e7c945a56ebf0edc2d478f4f68d", + "size": 2567, + "uri": "https://{canondata_backend}/1881367/fb8d21445e0a0d2f03124fd4ba32bf9268680d10/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Plan_/plan.txt" + } + ], + "test.test[agg_phases_agg_apply-avg_decimal-default.txt-Results]": [ + { + "checksum": "2260e3996d469378c8aba67d6f833b2a", + "size": 7951, + "uri": "https://{canondata_backend}/1881367/fb8d21445e0a0d2f03124fd4ba32bf9268680d10/resource.tar.gz#test.test_agg_phases_agg_apply-avg_decimal-default.txt-Results_/results.txt" + } + ], "test.test[aggr_factory-def_value_full_table-default.txt-Debug]": [ { "checksum": "9abf3c83a73d29257334b992690b94c8",