diff options
author | aneporada <aneporada@ydb.tech> | 2023-10-27 16:06:44 +0300 |
---|---|---|
committer | aneporada <aneporada@ydb.tech> | 2023-10-27 17:42:52 +0300 |
commit | 630cf22ae710fd98c4568a04ad2af7f14b9d7420 (patch) | |
tree | e053afd26395d6f65a8ae38ae80c7e7498cef112 | |
parent | 63d30647b25867ab5e75bbc45816c7883732c37c (diff) | |
download | ydb-630cf22ae710fd98c4568a04ad2af7f14b9d7420.tar.gz |
Delay expression evaluation until colum/type duality is resolved
7 files changed, 86 insertions, 6 deletions
diff --git a/ydb/library/yql/core/services/yql_eval_expr.cpp b/ydb/library/yql/core/services/yql_eval_expr.cpp index 06f9aabff5..603a899b9f 100644 --- a/ydb/library/yql/core/services/yql_eval_expr.cpp +++ b/ydb/library/yql/core/services/yql_eval_expr.cpp @@ -47,7 +47,7 @@ bool CheckPendingArgs(const TExprNode& root, TNodeSet& visited, TNodeMap<const T return true; } - if (root.IsCallable("TypeOf")) { + if (root.IsCallable({"TypeOf", "SqlColumnOrType", "SqlPlainColumnOrType"})) { underTypeOf = true; } diff --git a/ydb/library/yql/sql/v1/context.cpp b/ydb/library/yql/sql/v1/context.cpp index c6e60dfed4..ec053f181d 100644 --- a/ydb/library/yql/sql/v1/context.cpp +++ b/ydb/library/yql/sql/v1/context.cpp @@ -498,11 +498,6 @@ TMaybe<EColumnRefState> GetFunctionArgColumnStatus(TContext& ctx, const TString& { {"ensureconvertibleto", 1}, EColumnRefState::Deny }, { {"ensureconvertibleto", 2}, EColumnRefState::Deny }, - // TODO: switch to Deny here - { {"evaluateexpr", 0}, EColumnRefState::AsStringLiteral }, - { {"evaluateatom", 0}, EColumnRefState::AsStringLiteral }, - { {"evaluatetype", 0}, EColumnRefState::AsStringLiteral }, - { {"nothing", 0}, EColumnRefState::Deny }, { {"formattype", 0}, EColumnRefState::Deny }, { {"instanceof", 0}, EColumnRefState::Deny }, diff --git a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json index 34dcd9b3b9..b54b7c3cd4 100644 --- a/ydb/library/yql/tests/sql/sql2yql/canondata/result.json +++ b/ydb/library/yql/tests/sql/sql2yql/canondata/result.json @@ -6061,6 +6061,13 @@ "uri": "https://storage.yandex-team.ru/get-devtools/1871182/6b10ad6d9884e5faf3a77187ffb9b38b59b46458/resource.tar.gz#test_sql2yql.test_flexible_types-basic_/sql.yql" } ], + "test_sql2yql.test[flexible_types-evaluate_expr]": [ + { + "checksum": "1f7f54164b56b209ce58bca277c4b540", + "size": 2005, + "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql2yql.test_flexible_types-evaluate_expr_/sql.yql" + } + ], "test_sql2yql.test[flexible_types-flatten_by]": [ { "checksum": "f41260b56c27e1f81cc024a0f2725c61", @@ -6089,6 +6096,13 @@ "uri": "https://storage.yandex-team.ru/get-devtools/1936997/d01e529b02a008637591c42bdd9c20f7eeda6588/resource.tar.gz#test_sql2yql.test_flexible_types-group_by_/sql.yql" } ], + "test_sql2yql.test[flexible_types-inside_evaluate]": [ + { + "checksum": "43080cf26863a2b23fc6bcb3f0294dde", + "size": 1466, + "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql2yql.test_flexible_types-inside_evaluate_/sql.yql" + } + ], "test_sql2yql.test[flexible_types-struct_literals_vs_columns]": [ { "checksum": "ddec351c40efe20790c7e12f0bc71970", @@ -22987,6 +23001,13 @@ "uri": "https://storage.yandex-team.ru/get-devtools/1599023/4bd7e6892a9762eec433e60bda88f20cddadc74c/resource.tar.gz#test_sql_format.test_flexible_types-basic_/formatted.sql" } ], + "test_sql_format.test[flexible_types-evaluate_expr]": [ + { + "checksum": "fe22adfeec642ca32136013b56144e32", + "size": 113, + "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql_format.test_flexible_types-evaluate_expr_/formatted.sql" + } + ], "test_sql_format.test[flexible_types-flatten_by]": [ { "checksum": "9219160ad38540b0af2d54c7cc25174d", @@ -23015,6 +23036,13 @@ "uri": "https://storage.yandex-team.ru/get-devtools/1599023/4bd7e6892a9762eec433e60bda88f20cddadc74c/resource.tar.gz#test_sql_format.test_flexible_types-group_by_/formatted.sql" } ], + "test_sql_format.test[flexible_types-inside_evaluate]": [ + { + "checksum": "3cf0ed5a3d2cc2ab2ea9dbe5de26c84f", + "size": 387, + "uri": "https://storage.yandex-team.ru/get-devtools/1937429/5935e017848cde5b19a4b29142d9e7a8b96d76b4/resource.tar.gz#test_sql_format.test_flexible_types-inside_evaluate_/formatted.sql" + } + ], "test_sql_format.test[flexible_types-struct_literals_vs_columns]": [ { "checksum": "4248e8879b2c502ae84179a57754cdfb", diff --git a/ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql b/ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql new file mode 100644 index 0000000000..72f817d69d --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/flexible_types/evaluate_expr.sql @@ -0,0 +1,4 @@ +$x = ($type) -> (FormatType($type)); + +select Substring($x(String), 1); +select EvaluateExpr($x(String)); diff --git a/ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql b/ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql new file mode 100644 index 0000000000..d49fc796db --- /dev/null +++ b/ydb/library/yql/tests/sql/suites/flexible_types/inside_evaluate.sql @@ -0,0 +1,11 @@ +$do_safe_cast = ($x, $type) -> { + $type_code = AtomCode($type); + $cast_code = EvaluateCode(LambdaCode(($x_code) -> { + RETURN FuncCode("SafeCast", $x_code, $type_code); + })); + RETURN $cast_code($x); +}; + +$do_safe_cast_2 = ($x, $type) -> ($do_safe_cast($x, FormatType($type))); + +select $do_safe_cast_2(123, String); diff --git a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json index ffffcb764a..a533894c85 100644 --- a/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json +++ b/ydb/library/yql/tests/sql/yt_native_file/part1/canondata/result.json @@ -1720,6 +1720,27 @@ "uri": "file://test.test_flatten_by-flatten_with_group_by--Results_/extracted" } ], + "test.test[flexible_types-inside_evaluate-default.txt-Debug]": [ + { + "checksum": "dd804f7e44afcfdc797d9ac884843323", + "size": 230, + "uri": "https://storage.yandex-team.ru/get-devtools/1936842/7d8406846c0aeec42271b9715b56b71090e46675/resource.tar.gz#test.test_flexible_types-inside_evaluate-default.txt-Debug_/opt.yql" + } + ], + "test.test[flexible_types-inside_evaluate-default.txt-Plan]": [ + { + "checksum": "b4dd508a329723c74293d80f0278c705", + "size": 505, + "uri": "https://storage.yandex-team.ru/get-devtools/1936842/7d8406846c0aeec42271b9715b56b71090e46675/resource.tar.gz#test.test_flexible_types-inside_evaluate-default.txt-Plan_/plan.txt" + } + ], + "test.test[flexible_types-inside_evaluate-default.txt-Results]": [ + { + "checksum": "c3e9fe2c4f1a2c442e14bbb4fd152940", + "size": 668, + "uri": "https://storage.yandex-team.ru/get-devtools/1936842/7d8406846c0aeec42271b9715b56b71090e46675/resource.tar.gz#test.test_flexible_types-inside_evaluate-default.txt-Results_/results.txt" + } + ], "test.test[flexible_types-text_and_bytes-default.txt-Debug]": [ { "checksum": "3d6c5fc83d39049f77e641ca4aefb10c", 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 26fd3c5839..796dad01c9 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 @@ -1774,6 +1774,27 @@ "uri": "https://storage.yandex-team.ru/get-devtools/1031349/eb01bd7ff66ea4e3791b69ec15b5a2ac35547ace/resource.tar.gz#test.test_file-parse_file_in_select_as_str--Results_/results.txt" } ], + "test.test[flexible_types-evaluate_expr-default.txt-Debug]": [ + { + "checksum": "d83ab9aa82d5cd2b7e2294c8fead5321", + "size": 411, + "uri": "https://storage.yandex-team.ru/get-devtools/1936842/3f2d198533ab283a4ed0b65cedb84a451e0f286b/resource.tar.gz#test.test_flexible_types-evaluate_expr-default.txt-Debug_/opt.yql" + } + ], + "test.test[flexible_types-evaluate_expr-default.txt-Plan]": [ + { + "checksum": "a3b64a2cf9903b3868a2dd88a18fc46e", + "size": 922, + "uri": "https://storage.yandex-team.ru/get-devtools/1936842/3f2d198533ab283a4ed0b65cedb84a451e0f286b/resource.tar.gz#test.test_flexible_types-evaluate_expr-default.txt-Plan_/plan.txt" + } + ], + "test.test[flexible_types-evaluate_expr-default.txt-Results]": [ + { + "checksum": "75f50ccda31dc749d9a3cd50ffe68e20", + "size": 1339, + "uri": "https://storage.yandex-team.ru/get-devtools/1936842/3f2d198533ab283a4ed0b65cedb84a451e0f286b/resource.tar.gz#test.test_flexible_types-evaluate_expr-default.txt-Results_/results.txt" + } + ], "test.test[hor_join-empty_out_hor_join-default.txt-Debug]": [ { "checksum": "a1bad8591f8d6c9e4b864aa63850fe26", |