diff options
| author | sinister <[email protected]> | 2022-02-10 16:50:50 +0300 | 
|---|---|---|
| committer | Daniil Cherednik <[email protected]> | 2022-02-10 16:50:50 +0300 | 
| commit | b76c7a19e20d232ef1e00ccbe68f64a3024d29ed (patch) | |
| tree | f8eeda3ddf7f474d0defce552e5eb141e5943509 | |
| parent | fd57eb4948385b403f53b2f711399e516d46dcac (diff) | |
Restoring authorship annotation for <[email protected]>. Commit 1 of 2.
| -rw-r--r-- | build/plugins/yql_python_udf.py | 24 | ||||
| -rw-r--r-- | build/scripts/gen_yql_python_udf.py | 50 | ||||
| -rw-r--r-- | library/cpp/yson_pull/detail/lexer_base.h | 52 | ||||
| -rw-r--r-- | library/cpp/yson_pull/detail/percent_scalar.h | 62 | ||||
| -rw-r--r-- | library/cpp/yson_pull/detail/reader.h | 26 | ||||
| -rw-r--r-- | library/cpp/yson_pull/detail/writer.h | 32 | ||||
| -rw-r--r-- | library/cpp/yson_pull/ut/reader_ut.cpp | 58 | ||||
| -rw-r--r-- | library/cpp/yson_pull/ut/writer_ut.cpp | 22 | ||||
| -rw-r--r-- | ydb/library/yql/core/expr_nodes/yql_expr_nodes.json | 10 | ||||
| -rw-r--r-- | ydb/library/yql/sql/v1/builtin.cpp | 156 | ||||
| -rw-r--r-- | ydb/library/yql/sql/v1/query.cpp | 16 | ||||
| -rw-r--r-- | ydb/library/yql/sql/v1/sql.cpp | 30 | ||||
| -rw-r--r-- | ydb/library/yql/sql/v1/sql_ut.cpp | 140 | 
13 files changed, 339 insertions, 339 deletions
diff --git a/build/plugins/yql_python_udf.py b/build/plugins/yql_python_udf.py index c4f949d8a94..324821c3bf9 100644 --- a/build/plugins/yql_python_udf.py +++ b/build/plugins/yql_python_udf.py @@ -8,11 +8,11 @@ def get_or_default(kv, name, default):  def onregister_yql_python_udf(unit, *args): -    flat, kv = sort_by_keywords({'NAME': 1, 'RESOURCE_NAME': 1, 'ADD_LIBRA_MODULES': 1}, args) +    flat, kv = sort_by_keywords({'NAME': 1, 'RESOURCE_NAME': 1, 'ADD_LIBRA_MODULES': 1}, args)       assert len(flat) == 0      name = get_or_default(kv, 'NAME', 'CustomPython')      resource_name = get_or_default(kv, 'RESOURCE_NAME', name) -    add_libra_modules = get_or_default(kv, 'ADD_LIBRA_MODULES', 'no') == 'yes' +    add_libra_modules = get_or_default(kv, 'ADD_LIBRA_MODULES', 'no') == 'yes'       use_arcadia_python = unit.get('USE_ARCADIA_PYTHON') == 'yes'      py3 = unit.get('PYTHON3') == 'yes' @@ -21,10 +21,10 @@ def onregister_yql_python_udf(unit, *args):      unit.onpeerdir(['yql/udfs/common/python/python_udf'])      unit.onpeerdir(['ydb/library/yql/public/udf']) -    if add_libra_modules: -        unit.onpeerdir(['quality/user_sessions/libra_arc/noyql']) -        unit.onpeerdir(['yql/udfs/quality/libra/module']) - +    if add_libra_modules:  +        unit.onpeerdir(['quality/user_sessions/libra_arc/noyql'])  +        unit.onpeerdir(['yql/udfs/quality/libra/module'])  +       if use_arcadia_python:          flavor = 'Arcadia'          unit.onpeerdir([ @@ -32,7 +32,7 @@ def onregister_yql_python_udf(unit, *args):              'yql/udfs/common/python/main'          ] if not py3 else [              'library/python/runtime_py3', -            'yql/udfs/common/python/main_py3' +            'yql/udfs/common/python/main_py3'           ])      else:          flavor = 'System' @@ -41,14 +41,14 @@ def onregister_yql_python_udf(unit, *args):          'yql/udfs/common/python/python_udf/python_udf.h',          'ydb/library/yql/public/udf/udf_registrator.h',      ] -    if add_libra_modules: -        output_includes.append('yql/udfs/quality/libra/module/module.h') - +    if add_libra_modules:  +        output_includes.append('yql/udfs/quality/libra/module/module.h')  +       path = name + '.yql_python_udf.cpp' -    libra_flag = '1' if add_libra_modules else '0' +    libra_flag = '1' if add_libra_modules else '0'       unit.onpython([          'build/scripts/gen_yql_python_udf.py', -        flavor, name, resource_name, path, libra_flag, +        flavor, name, resource_name, path, libra_flag,           'OUT', path,          'OUTPUT_INCLUDES',      ] + output_includes diff --git a/build/scripts/gen_yql_python_udf.py b/build/scripts/gen_yql_python_udf.py index 13b58981170..e2dd7cc9e06 100644 --- a/build/scripts/gen_yql_python_udf.py +++ b/build/scripts/gen_yql_python_udf.py @@ -5,40 +5,40 @@ TEMPLATE="""  #include <ydb/library/yql/public/udf/udf_registrator.h> -#if @WITH_LIBRA@ -#include <yql/udfs/quality/libra/module/module.h> -#endif - +#if @WITH_LIBRA@  +#include <yql/udfs/quality/libra/module/module.h>  +#endif  +   using namespace NKikimr::NUdf;  #ifdef BUILD_UDF -#if @WITH_LIBRA@ -LIBRA_MODULE(TLibraModule, "Libra@MODULE_NAME@"); -#endif - -extern "C" UDF_API void Register(IRegistrator& registrator, ui32 flags) { +#if @WITH_LIBRA@  +LIBRA_MODULE(TLibraModule, "Libra@MODULE_NAME@");  +#endif  +  +extern "C" UDF_API void Register(IRegistrator& registrator, ui32 flags) {       RegisterYqlPythonUdf(registrator, flags, TStringBuf("@MODULE_NAME@"), TStringBuf("@PACKAGE_NAME@"), EPythonFlavor::@FLAVOR@); -#if @WITH_LIBRA@ -    RegisterHelper<TLibraModule>(registrator); -#endif -} - -extern "C" UDF_API ui32 AbiVersion() { -    return CurrentAbiVersion(); -} - -extern "C" UDF_API void SetBackTraceCallback(TBackTraceCallback callback) { -    SetBackTraceCallbackImpl(callback); -} - +#if @WITH_LIBRA@  +    RegisterHelper<TLibraModule>(registrator);  +#endif  +}  + +extern "C" UDF_API ui32 AbiVersion() {  +    return CurrentAbiVersion();  +}  + +extern "C" UDF_API void SetBackTraceCallback(TBackTraceCallback callback) {  +    SetBackTraceCallbackImpl(callback);  +}  +   #endif  """  def main(): -    assert len(sys.argv) == 6 -    flavor, module_name, package_name, path, libra_flag = sys.argv[1:] +    assert len(sys.argv) == 6  +    flavor, module_name, package_name, path, libra_flag = sys.argv[1:]       with open(path, 'w') as f:          f.write(              TEMPLATE @@ -46,7 +46,7 @@ def main():              .replace('@MODULE_NAME@', module_name)              .replace('@PACKAGE_NAME@', package_name)              .replace('@FLAVOR@', flavor) -            .replace('@WITH_LIBRA@', libra_flag) +            .replace('@WITH_LIBRA@', libra_flag)           )          f.write('\n') diff --git a/library/cpp/yson_pull/detail/lexer_base.h b/library/cpp/yson_pull/detail/lexer_base.h index 572bdb3d18b..61f0c21ca96 100644 --- a/library/cpp/yson_pull/detail/lexer_base.h +++ b/library/cpp/yson_pull/detail/lexer_base.h @@ -4,7 +4,7 @@  #include "cescape.h"  #include "macros.h"  #include "number.h" -#include "percent_scalar.h" +#include "percent_scalar.h"   #include "stream_counter.h"  #include "varint.h" @@ -199,17 +199,17 @@ namespace NYsonPull {                  return token_buffer();              } -            percent_scalar read_percent_scalar() { -                auto throw_incorrect_percent_scalar = [&]() { -                    Base::fail("Incorrect %-literal prefix ", NCEscape::quote(token_buffer())); +            percent_scalar read_percent_scalar() {  +                auto throw_incorrect_percent_scalar = [&]() {  +                    Base::fail("Incorrect %-literal prefix ", NCEscape::quote(token_buffer()));                   }; -                auto assert_literal = [&](TStringBuf literal) -> void { -                    for (size_t i = 2; i < literal.size(); ++i) { +                auto assert_literal = [&](TStringBuf literal) -> void {  +                    for (size_t i = 2; i < literal.size(); ++i) {                           token_buffer_.push_back(this->Base::template get_byte<false>());                          Base::advance(1);                          if (Y_UNLIKELY(token_buffer_.back() != literal[i])) { -                            throw_incorrect_percent_scalar(); +                            throw_incorrect_percent_scalar();                           }                      }                  }; @@ -217,25 +217,25 @@ namespace NYsonPull {                  token_buffer_.clear();                  token_buffer_.push_back(this->Base::template get_byte<false>());                  Base::advance(1); - -                switch (token_buffer_[0]) { -                    case 't': -                        assert_literal(percent_scalar::true_literal); -                        return percent_scalar(true); -                    case 'f': -                        assert_literal(percent_scalar::false_literal); -                        return percent_scalar(false); -                    case 'n': -                        assert_literal(percent_scalar::nan_literal); -                        return percent_scalar(std::numeric_limits<double>::quiet_NaN()); -                    case 'i': -                        assert_literal(percent_scalar::positive_inf_literal); -                        return percent_scalar(std::numeric_limits<double>::infinity()); -                    case '-': -                        assert_literal(percent_scalar::negative_inf_literal); -                        return percent_scalar(-std::numeric_limits<double>::infinity()); -                    default: -                        throw_incorrect_percent_scalar(); +  +                switch (token_buffer_[0]) {  +                    case 't':  +                        assert_literal(percent_scalar::true_literal);  +                        return percent_scalar(true);  +                    case 'f':  +                        assert_literal(percent_scalar::false_literal);  +                        return percent_scalar(false);  +                    case 'n':  +                        assert_literal(percent_scalar::nan_literal);  +                        return percent_scalar(std::numeric_limits<double>::quiet_NaN());  +                    case 'i':  +                        assert_literal(percent_scalar::positive_inf_literal);  +                        return percent_scalar(std::numeric_limits<double>::infinity());  +                    case '-':  +                        assert_literal(percent_scalar::negative_inf_literal);  +                        return percent_scalar(-std::numeric_limits<double>::infinity());  +                    default:  +                        throw_incorrect_percent_scalar();                   }                  Y_UNREACHABLE(); diff --git a/library/cpp/yson_pull/detail/percent_scalar.h b/library/cpp/yson_pull/detail/percent_scalar.h index ff4571842e1..beec425c7d9 100644 --- a/library/cpp/yson_pull/detail/percent_scalar.h +++ b/library/cpp/yson_pull/detail/percent_scalar.h @@ -1,36 +1,36 @@ -#pragma once - -#include <util/generic/strbuf.h> - -namespace NYsonPull::NDetail { -    enum class percent_scalar_type { -        boolean, -        float64 -    }; - -    struct percent_scalar { -        //! Text boolean literals +#pragma once  +  +#include <util/generic/strbuf.h>  +  +namespace NYsonPull::NDetail {  +    enum class percent_scalar_type {  +        boolean,  +        float64  +    };  +  +    struct percent_scalar {  +        //! Text boolean literals           static constexpr TStringBuf true_literal = "%true";          static constexpr TStringBuf false_literal = "%false"; -        //! Text floating-point literals +        //! Text floating-point literals           static constexpr TStringBuf nan_literal = "%nan";          static constexpr TStringBuf positive_inf_literal = "%inf";          static constexpr TStringBuf negative_inf_literal = "%-inf"; - -        percent_scalar_type type; -        union { -            double as_float64; -            bool as_boolean; -        } value; - -        percent_scalar(double v) { -            type = percent_scalar_type::float64; -            value.as_float64 = v; -        } - -        percent_scalar(bool v) { -            type = percent_scalar_type::boolean; -            value.as_boolean = v; -        } -    }; -} +  +        percent_scalar_type type;  +        union {  +            double as_float64;  +            bool as_boolean;  +        } value;  +  +        percent_scalar(double v) {  +            type = percent_scalar_type::float64;  +            value.as_float64 = v;  +        }  +  +        percent_scalar(bool v) {  +            type = percent_scalar_type::boolean;  +            value.as_boolean = v;  +        }  +    };  +}  diff --git a/library/cpp/yson_pull/detail/reader.h b/library/cpp/yson_pull/detail/reader.h index 0e023963581..29a266edb9a 100644 --- a/library/cpp/yson_pull/detail/reader.h +++ b/library/cpp/yson_pull/detail/reader.h @@ -300,18 +300,18 @@ namespace NYsonPull {                  }              } -            //! Present a value from %-literal variant -            void yield(const percent_scalar& value) { -                switch (value.type) { -                    case percent_scalar_type::boolean: -                        yield(value.value.as_boolean); -                        break; -                    case percent_scalar_type::float64: -                        yield(value.value.as_float64); -                        break; -                } -            } - +            //! Present a value from %-literal variant  +            void yield(const percent_scalar& value) {  +                switch (value.type) {  +                    case percent_scalar_type::boolean:  +                        yield(value.value.as_boolean);  +                        break;  +                    case percent_scalar_type::float64:  +                        yield(value.value.as_float64);  +                        break;  +                }  +            }  +               //! Present a value-less event              void yield(EEventType type) {                  event_ = TEvent{type}; @@ -654,7 +654,7 @@ namespace NYsonPull {                      case char_class::percent:                          lexer_.advance(1); -                        yield(lexer_.read_percent_scalar()); +                        yield(lexer_.read_percent_scalar());                           break;                      case char_class::none: diff --git a/library/cpp/yson_pull/detail/writer.h b/library/cpp/yson_pull/detail/writer.h index b24b9942927..2df6ee89068 100644 --- a/library/cpp/yson_pull/detail/writer.h +++ b/library/cpp/yson_pull/detail/writer.h @@ -2,7 +2,7 @@  #include "byte_writer.h"  #include "cescape.h" -#include "percent_scalar.h" +#include "percent_scalar.h"   #include "stream_counter.h"  #include "symbols.h"  #include "varint.h" @@ -385,7 +385,7 @@ namespace NYsonPull {              }              void OnScalarFloat64(double value) override { -                update_state(EEventType::Scalar); +                update_state(EEventType::Scalar);                   begin_node();                  write(NSymbol::double_marker); @@ -425,7 +425,7 @@ namespace NYsonPull {                  update_state(EEventType::Scalar);                  begin_node(); -                write(value ? percent_scalar::true_literal : percent_scalar::false_literal); +                write(value ? percent_scalar::true_literal : percent_scalar::false_literal);                   end_node();              } @@ -455,20 +455,20 @@ namespace NYsonPull {              void OnScalarFloat64(double value) override {                  update_state(EEventType::Scalar); -                begin_node(); - -                if (std::isfinite(value)) { -                    char buf[32]; -                    auto len = ::snprintf(buf, sizeof(buf), "%#.17lg", value); -                    write_raw(buf, len); -                } else if (std::isnan(value)) { -                    write(percent_scalar::nan_literal); -                } else if (value > 0) { -                    write(percent_scalar::positive_inf_literal); -                } else { -                    write(percent_scalar::negative_inf_literal); +                begin_node();  + +                if (std::isfinite(value)) {  +                    char buf[32];  +                    auto len = ::snprintf(buf, sizeof(buf), "%#.17lg", value);  +                    write_raw(buf, len);  +                } else if (std::isnan(value)) {  +                    write(percent_scalar::nan_literal);  +                } else if (value > 0) {  +                    write(percent_scalar::positive_inf_literal);  +                } else {  +                    write(percent_scalar::negative_inf_literal);                   } - +                   end_node();              } diff --git a/library/cpp/yson_pull/ut/reader_ut.cpp b/library/cpp/yson_pull/ut/reader_ut.cpp index 1184265ddbc..586c91870a5 100644 --- a/library/cpp/yson_pull/ut/reader_ut.cpp +++ b/library/cpp/yson_pull/ut/reader_ut.cpp @@ -21,20 +21,20 @@ namespace {      template <>      void expect_scalar(const NYsonPull::TScalar& scalar, double value) {          UNIT_ASSERT_VALUES_EQUAL(NYsonPull::EScalarType::Float64, scalar.Type()); - -        auto scalarValue = scalar.AsFloat64(); -        auto message = TStringBuilder() << "expected " << value << ", got " << scalarValue; - -        if (std::isfinite(value)) { -            UNIT_ASSERT_C(std::isfinite(scalarValue), message); -            UNIT_ASSERT_DOUBLES_EQUAL(value, scalarValue, 1e-5); -        } else if (std::isnan(value)) { -            UNIT_ASSERT_C(std::isnan(scalarValue), message); -        } else if (value > 0) { -            UNIT_ASSERT_C(std::isinf(scalarValue) && (scalarValue > 0), message); -        } else { -            UNIT_ASSERT_C(std::isinf(scalarValue) && (scalarValue < 0), message); -        } +  +        auto scalarValue = scalar.AsFloat64();  +        auto message = TStringBuilder() << "expected " << value << ", got " << scalarValue;  +  +        if (std::isfinite(value)) {  +            UNIT_ASSERT_C(std::isfinite(scalarValue), message);  +            UNIT_ASSERT_DOUBLES_EQUAL(value, scalarValue, 1e-5);  +        } else if (std::isnan(value)) {  +            UNIT_ASSERT_C(std::isnan(scalarValue), message);  +        } else if (value > 0) {  +            UNIT_ASSERT_C(std::isinf(scalarValue) && (scalarValue > 0), message);  +        } else {  +            UNIT_ASSERT_C(std::isinf(scalarValue) && (scalarValue < 0), message);  +        }       }      template <typename T> @@ -153,23 +153,23 @@ Y_UNIT_TEST_SUITE(Reader) {          test_scalar(              TStringBuf("\x03\x00\x00\x00\x00\x00\x00\xf8\x7f"sv), -            double{std::numeric_limits<double>::quiet_NaN()}); -        test_scalar( +            double{std::numeric_limits<double>::quiet_NaN()});  +        test_scalar(               TStringBuf("\x03\x00\x00\x00\x00\x00\x00\xf0\x7f"sv),              double{std::numeric_limits<double>::infinity()});          test_scalar(              TStringBuf("\x03\x00\x00\x00\x00\x00\x00\xf0\xff"sv),              double{-std::numeric_limits<double>::infinity()}); -        test_scalar( +        test_scalar(               TStringBuf("%nan"), -            double{std::numeric_limits<double>::quiet_NaN()}); -        test_scalar( +            double{std::numeric_limits<double>::quiet_NaN()});  +        test_scalar(               TStringBuf("%inf"), -            double{std::numeric_limits<double>::infinity()}); -        test_scalar( +            double{std::numeric_limits<double>::infinity()});  +        test_scalar(               TStringBuf("%-inf"), -            double{-std::numeric_limits<double>::infinity()}); +            double{-std::numeric_limits<double>::infinity()});           REJECT("++0.0");          REJECT("++1.0"); @@ -184,13 +184,13 @@ Y_UNIT_TEST_SUITE(Reader) {          // XXX: Rejected on Mac OS, accepted on Linux (?!)          //REJECT(".0");          //REJECT(".5"); - -        REJECT("%NaN"); -        REJECT("%+inf"); -        REJECT("%infinity"); -        REJECT("%na"); -        REJECT("%in"); -        REJECT("%-in"); +  +        REJECT("%NaN");  +        REJECT("%+inf");  +        REJECT("%infinity");  +        REJECT("%na");  +        REJECT("%in");  +        REJECT("%-in");       }      Y_UNIT_TEST(ScalarString) { diff --git a/library/cpp/yson_pull/ut/writer_ut.cpp b/library/cpp/yson_pull/ut/writer_ut.cpp index 5c304bad0f3..4a052e52748 100644 --- a/library/cpp/yson_pull/ut/writer_ut.cpp +++ b/library/cpp/yson_pull/ut/writer_ut.cpp @@ -123,14 +123,14 @@ Y_UNIT_TEST_SUITE(Writer) {      Y_UNIT_TEST(TextFloat64) {          UNIT_ASSERT_VALUES_EQUAL( -            "%inf", +            "%inf",               to_yson_text_string(NYsonPull::TScalar{std::numeric_limits<double>::infinity()}));          UNIT_ASSERT_VALUES_EQUAL( -            "%-inf", +            "%-inf",               to_yson_text_string(NYsonPull::TScalar{-std::numeric_limits<double>::infinity()})); -        UNIT_ASSERT_VALUES_EQUAL( -            "%nan", -            to_yson_text_string(NYsonPull::TScalar{std::numeric_limits<double>::quiet_NaN()})); +        UNIT_ASSERT_VALUES_EQUAL(  +            "%nan",  +            to_yson_text_string(NYsonPull::TScalar{std::numeric_limits<double>::quiet_NaN()}));       }      Y_UNIT_TEST(TextString) { @@ -230,15 +230,15 @@ Y_UNIT_TEST_SUITE(Writer) {          UNIT_ASSERT_VALUES_EQUAL(              TStringBuf("\x03\x00\x00\x00\x00\x00\x00\xf0\xff"sv),              to_yson_binary_string(NYsonPull::TScalar{-std::numeric_limits<double>::infinity()})); -        UNIT_ASSERT_VALUES_EQUAL( +        UNIT_ASSERT_VALUES_EQUAL(               TStringBuf("\x03\x00\x00\x00\x00\x00\x00\xf8\x7f"sv), -            to_yson_binary_string(NYsonPull::TScalar{std::numeric_limits<double>::quiet_NaN()})); -        UNIT_ASSERT_VALUES_EQUAL( +            to_yson_binary_string(NYsonPull::TScalar{std::numeric_limits<double>::quiet_NaN()}));  +        UNIT_ASSERT_VALUES_EQUAL(               TStringBuf("\x03\x9a\x99\x99\x99\x99\x99\xf1\x3f"), -            to_yson_binary_string(NYsonPull::TScalar{double{1.1}})); -        UNIT_ASSERT_VALUES_EQUAL( +            to_yson_binary_string(NYsonPull::TScalar{double{1.1}}));  +        UNIT_ASSERT_VALUES_EQUAL(               TStringBuf("\x03\x9a\x99\x99\x99\x99\x99\xf1\xbf"), -            to_yson_binary_string(NYsonPull::TScalar{double{-1.1}})); +            to_yson_binary_string(NYsonPull::TScalar{double{-1.1}}));       }      Y_UNIT_TEST(BinaryString) { diff --git a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json index edfcaa15302..541b85b0ba6 100644 --- a/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json +++ b/ydb/library/yql/core/expr_nodes/yql_expr_nodes.json @@ -1706,11 +1706,11 @@              "Match": {"Type": "Callable", "Name": "TablePath"}          },          { -            "Name": "TCoTableName", -            "Base": "TCoTablePropBase", -            "Match": {"Type": "Callable", "Name": "TableName"} -        }, -        { +            "Name": "TCoTableName",  +            "Base": "TCoTablePropBase",  +            "Match": {"Type": "Callable", "Name": "TableName"}  +        },  +        {               "Name": "TCoTableRecord",              "Base": "TCoTablePropBase",              "Match": {"Type": "Callable", "Name": "TableRecord"} diff --git a/ydb/library/yql/sql/v1/builtin.cpp b/ydb/library/yql/sql/v1/builtin.cpp index 43ef1243f10..e877c6994b1 100644 --- a/ydb/library/yql/sql/v1/builtin.cpp +++ b/ydb/library/yql/sql/v1/builtin.cpp @@ -2992,84 +2992,84 @@ TNodePtr BuildBuiltinFunc(TContext& ctx, TPosition pos, TString name, const TVec          }      } else if (ns == "datetime2" && (name == "Format" || name == "Parse")) {          return BuildUdf(ctx, pos, nameSpace, name, args); -    } else if (name == "MakeLibraPreprocessor") { -        if (args.size() != 1) { -            return new TInvalidBuiltin(pos, TStringBuilder() << name << " requires exactly one argument"); -        } - -        auto settings = NYT::TNode::CreateMap(); - -        auto makeUdfArgs = [&args, &pos, &settings]() { -            return TVector<TNodePtr> { -                args[0], -                new TCallNodeImpl(pos, "Void", {}), -                BuildQuotedAtom(pos, NYT::NodeToYsonString(settings)) -            }; -        }; - -        auto structNode = dynamic_cast<TStructNode*>(args[0].Get()); -        if (!structNode) { -            if (auto callNode = dynamic_cast<TCallNode*>(args[0].Get())) { -                if (callNode->GetOpName() == "AsStruct") { -                    return BuildUdf(ctx, pos, nameSpace, name, makeUdfArgs()); -                } -            } - -            return new TInvalidBuiltin(pos, TStringBuilder() << name << " requires struct as argument"); -        } - -        for (const auto& item : structNode->GetExprs()) { -            const auto& label = item->GetLabel(); -            if (label == "Entities") { -                auto callNode = dynamic_cast<TCallNode*>(item.Get()); -                if (!callNode || callNode->GetOpName() != "AsList") { -                    return new TInvalidBuiltin(pos, TStringBuilder() << name << " entities must be list of strings"); -                } - -                auto entities = NYT::TNode::CreateList(); -                for (const auto& entity : callNode->GetArgs()) { -                    if (!entity->IsLiteral() || entity->GetLiteralType() != "String") { -                        return new TInvalidBuiltin(pos, TStringBuilder() << name << " entity must be string literal"); -                    } -                    entities.Add(entity->GetLiteralValue()); -                } - -                settings(label, std::move(entities)); -            } else if (label == "EntitiesStrategy") { -                if (!item->IsLiteral() || item->GetLiteralType() != "String") { -                    return new TInvalidBuiltin( -                        pos, TStringBuilder() << name << " entities strategy must be string literal" -                    ); -                } - -                if (!EqualToOneOf(item->GetLiteralValue(), "whitelist", "blacklist")) { -                    return new TInvalidBuiltin( -                        pos, -                        TStringBuilder() << name << " got invalid entities strategy: expected 'whitelist' or 'blacklist'" -                    ); -                } - -                settings(label, item->GetLiteralValue()); -            } else if (label == "Mode") { -                if (!item->IsLiteral() || item->GetLiteralType() != "String") { -                    return new TInvalidBuiltin( -                        pos, TStringBuilder() << name << " mode must be string literal" -                    ); -                } - -                settings(label, item->GetLiteralValue()); -            } else if (EqualToOneOf(label, "BlockstatDict", "ParseWithFat")) { -                continue; -            } else { -                return new TInvalidBuiltin( -                    pos, -                    TStringBuilder() -                        << name << " got unsupported setting: " << label -                        << "; supported: Entities, EntitiesStrategy, BlockstatDict, ParseWithFat" ); -            } -        } - -        return BuildUdf(ctx, pos, nameSpace, name, makeUdfArgs()); +    } else if (name == "MakeLibraPreprocessor") {  +        if (args.size() != 1) {  +            return new TInvalidBuiltin(pos, TStringBuilder() << name << " requires exactly one argument");  +        }  + +        auto settings = NYT::TNode::CreateMap();  +  +        auto makeUdfArgs = [&args, &pos, &settings]() {  +            return TVector<TNodePtr> {  +                args[0],  +                new TCallNodeImpl(pos, "Void", {}),  +                BuildQuotedAtom(pos, NYT::NodeToYsonString(settings))  +            };  +        };  +  +        auto structNode = dynamic_cast<TStructNode*>(args[0].Get());  +        if (!structNode) {  +            if (auto callNode = dynamic_cast<TCallNode*>(args[0].Get())) {  +                if (callNode->GetOpName() == "AsStruct") {  +                    return BuildUdf(ctx, pos, nameSpace, name, makeUdfArgs());  +                }  +            }  +  +            return new TInvalidBuiltin(pos, TStringBuilder() << name << " requires struct as argument");  +        }  +  +        for (const auto& item : structNode->GetExprs()) {  +            const auto& label = item->GetLabel();  +            if (label == "Entities") {  +                auto callNode = dynamic_cast<TCallNode*>(item.Get());  +                if (!callNode || callNode->GetOpName() != "AsList") {  +                    return new TInvalidBuiltin(pos, TStringBuilder() << name << " entities must be list of strings");  +                }  +  +                auto entities = NYT::TNode::CreateList();  +                for (const auto& entity : callNode->GetArgs()) {  +                    if (!entity->IsLiteral() || entity->GetLiteralType() != "String") {  +                        return new TInvalidBuiltin(pos, TStringBuilder() << name << " entity must be string literal");  +                    }  +                    entities.Add(entity->GetLiteralValue());  +                }  +  +                settings(label, std::move(entities));  +            } else if (label == "EntitiesStrategy") {  +                if (!item->IsLiteral() || item->GetLiteralType() != "String") {  +                    return new TInvalidBuiltin(  +                        pos, TStringBuilder() << name << " entities strategy must be string literal"  +                    );  +                }  +  +                if (!EqualToOneOf(item->GetLiteralValue(), "whitelist", "blacklist")) {  +                    return new TInvalidBuiltin(  +                        pos,  +                        TStringBuilder() << name << " got invalid entities strategy: expected 'whitelist' or 'blacklist'"  +                    );  +                }  +  +                settings(label, item->GetLiteralValue());  +            } else if (label == "Mode") {  +                if (!item->IsLiteral() || item->GetLiteralType() != "String") {  +                    return new TInvalidBuiltin(  +                        pos, TStringBuilder() << name << " mode must be string literal"  +                    );  +                }  +  +                settings(label, item->GetLiteralValue());  +            } else if (EqualToOneOf(label, "BlockstatDict", "ParseWithFat")) {  +                continue;  +            } else {  +                return new TInvalidBuiltin(  +                    pos,  +                    TStringBuilder()  +                        << name << " got unsupported setting: " << label  +                        << "; supported: Entities, EntitiesStrategy, BlockstatDict, ParseWithFat" );  +            }  +        }  +  +        return BuildUdf(ctx, pos, nameSpace, name, makeUdfArgs());       } else if (scriptType != NKikimr::NMiniKQL::EScriptType::Unknown) {          auto scriptName = NKikimr::NMiniKQL::ScriptTypeAsStr(scriptType);          return new TScriptUdf(pos, TString(scriptName), name, args); diff --git a/ydb/library/yql/sql/v1/query.cpp b/ydb/library/yql/sql/v1/query.cpp index 725356b9f57..6429ebe9cc0 100644 --- a/ydb/library/yql/sql/v1/query.cpp +++ b/ydb/library/yql/sql/v1/query.cpp @@ -398,14 +398,14 @@ public:              folder = L(folder, Args.size() > 1 ? Args[1].Id.Build() : BuildQuotedAtom(Pos, ""));              return folder;          } -        else if (func == "tables") { -            if (!Args.empty()) { -                ctx.Error(Pos) << Func << " doesn't accept arguments"; -                return nullptr; -            } - -            return L(Y("DataTables")); -        } +        else if (func == "tables") {  +            if (!Args.empty()) {  +                ctx.Error(Pos) << Func << " doesn't accept arguments";  +                return nullptr;  +            }  + +            return L(Y("DataTables"));  +        }           else if (func == "object") {              const size_t positionalArgs = 2;              auto result = Y("MrObject"); diff --git a/ydb/library/yql/sql/v1/sql.cpp b/ydb/library/yql/sql/v1/sql.cpp index ab5a8647885..f4d121741ba 100644 --- a/ydb/library/yql/sql/v1/sql.cpp +++ b/ydb/library/yql/sql/v1/sql.cpp @@ -1599,23 +1599,23 @@ bool TSqlTranslation::TableRefImpl(const TRule_table_ref& node, TTableRef& resul              auto& alt = block.GetAlt2();              const TString func(Id(alt.GetRule_an_id_expr1(), *this)); -            TVector<TTableArg> args; -            if (alt.HasBlock3()) { -                auto& argsBlock = alt.GetBlock3(); -                auto arg = TableArgImpl(argsBlock.GetRule_table_arg1()); +            TVector<TTableArg> args;  +            if (alt.HasBlock3()) {  +                auto& argsBlock = alt.GetBlock3();  +                auto arg = TableArgImpl(argsBlock.GetRule_table_arg1());                   if (!arg) {                      return false;                  } -                args.push_back(std::move(*arg)); -                for (auto& b : argsBlock.GetBlock2()) { -                    arg = TableArgImpl(b.GetRule_table_arg2()); -                    if (!arg) { -                        return false; -                    } - -                    args.push_back(std::move(*arg)); -                } +                args.push_back(std::move(*arg));  +                for (auto& b : argsBlock.GetBlock2()) {  +                    arg = TableArgImpl(b.GetRule_table_arg2());  +                    if (!arg) {  +                        return false;  +                    }  +  +                    args.push_back(std::move(*arg));  +                }               }              tableHints = GetTableFuncHints(func);              tr.Keys = BuildTableKeys(pos, service, cluster, func, args); @@ -1762,7 +1762,7 @@ TMaybe<TSourcePtr> TSqlTranslation::AsTableImpl(const TRule_table_ref& node) {                  return TMaybe<TSourcePtr>(nullptr);              } -            if (!alt.HasBlock3() || !alt.GetBlock3().GetBlock2().empty()) { +            if (!alt.HasBlock3() || !alt.GetBlock3().GetBlock2().empty()) {                   Ctx.Error() << "Expected single argument for AS_TABLE source";                  return TMaybe<TSourcePtr>(nullptr);              } @@ -1772,7 +1772,7 @@ TMaybe<TSourcePtr> TSqlTranslation::AsTableImpl(const TRule_table_ref& node) {                  return TMaybe<TSourcePtr>(nullptr);              } -            auto arg = TableArgImpl(alt.GetBlock3().GetRule_table_arg1()); +            auto arg = TableArgImpl(alt.GetBlock3().GetRule_table_arg1());               if (!arg) {                  return TMaybe<TSourcePtr>(nullptr);              } diff --git a/ydb/library/yql/sql/v1/sql_ut.cpp b/ydb/library/yql/sql/v1/sql_ut.cpp index 85b6e0dfcd3..4bac8cb1ccb 100644 --- a/ydb/library/yql/sql/v1/sql_ut.cpp +++ b/ydb/library/yql/sql/v1/sql_ut.cpp @@ -4018,76 +4018,76 @@ Y_UNIT_TEST_SUITE(SessionWindowNegative) {          UNIT_ASSERT_NO_DIFF(Err2Str(res), "<main>:2:13: Error: SessionWindow is unsupported for streaming sources\n");      }  } - -Y_UNIT_TEST_SUITE(LibraSqlSugar) { -    auto makeResult = [](TStringBuf settings) { -        return SqlToYql( -            TStringBuilder() -                << settings -                << "\n$udf1 = MyLibra::MakeLibraPreprocessor($settings);" -                << "\n$udf2 = CustomLibra::MakeLibraPreprocessor($settings);" -                << "\nPROCESS plato.Input USING $udf1(TableRow())" -                << "\nUNION ALL" -                << "\nPROCESS plato.Input USING $udf2(TableRow());" -        ); -    }; - -    Y_UNIT_TEST(EmptySettings) { -        auto res = makeResult(R"( -            $settings = AsStruct(); -        )"); -        UNIT_ASSERT(res.IsOk()); -    } - -    Y_UNIT_TEST(OnlyEntities) { -        auto res = makeResult(R"( -            $settings = AsStruct( -                AsList("A", "B", "C") AS Entities -            ); -        )"); -        UNIT_ASSERT(res.IsOk()); -    } - -    Y_UNIT_TEST(EntitiesWithStrategy) { -        auto res = makeResult(R"( -            $settings = AsStruct( -                AsList("A", "B", "C") AS Entities, -                "blacklist" AS EntitiesStrategy -            ); -        )"); -        UNIT_ASSERT(res.IsOk()); -    } - -    Y_UNIT_TEST(AllSettings) { -        auto res = makeResult(R"( -            $settings = AsStruct( -                AsList("A", "B", "C") AS Entities, -                "whitelist" AS EntitiesStrategy, -                "path" AS BlockstatDict, -                false AS ParseWithFat, -                "map" AS Mode -            ); -        )"); -        UNIT_ASSERT(res.IsOk()); -    } - -    Y_UNIT_TEST(BadStrategy) { -        auto res = makeResult(R"( -            $settings = AsStruct("bad" AS EntitiesStrategy); -        )"); -        UNIT_ASSERT_STRING_CONTAINS( -            Err2Str(res), -            "Error: MakeLibraPreprocessor got invalid entities strategy: expected 'whitelist' or 'blacklist'" -        ); -    } - -    Y_UNIT_TEST(BadEntities) { -        auto res = makeResult(R"( -            $settings = AsStruct(AsList("A", 1) AS Entities); -        )"); -        UNIT_ASSERT_STRING_CONTAINS(Err2Str(res), "Error: MakeLibraPreprocessor entity must be string literal"); -    } -} +  +Y_UNIT_TEST_SUITE(LibraSqlSugar) {  +    auto makeResult = [](TStringBuf settings) {  +        return SqlToYql(  +            TStringBuilder()  +                << settings  +                << "\n$udf1 = MyLibra::MakeLibraPreprocessor($settings);"  +                << "\n$udf2 = CustomLibra::MakeLibraPreprocessor($settings);"  +                << "\nPROCESS plato.Input USING $udf1(TableRow())"  +                << "\nUNION ALL"  +                << "\nPROCESS plato.Input USING $udf2(TableRow());"  +        );  +    };  +  +    Y_UNIT_TEST(EmptySettings) {  +        auto res = makeResult(R"(  +            $settings = AsStruct();  +        )");  +        UNIT_ASSERT(res.IsOk());  +    }  +  +    Y_UNIT_TEST(OnlyEntities) {  +        auto res = makeResult(R"(  +            $settings = AsStruct(  +                AsList("A", "B", "C") AS Entities  +            );  +        )");  +        UNIT_ASSERT(res.IsOk());  +    }  +  +    Y_UNIT_TEST(EntitiesWithStrategy) {  +        auto res = makeResult(R"(  +            $settings = AsStruct(  +                AsList("A", "B", "C") AS Entities,  +                "blacklist" AS EntitiesStrategy  +            );  +        )");  +        UNIT_ASSERT(res.IsOk());  +    }  +  +    Y_UNIT_TEST(AllSettings) {  +        auto res = makeResult(R"(  +            $settings = AsStruct(  +                AsList("A", "B", "C") AS Entities,  +                "whitelist" AS EntitiesStrategy,  +                "path" AS BlockstatDict,  +                false AS ParseWithFat,  +                "map" AS Mode  +            );  +        )");  +        UNIT_ASSERT(res.IsOk());  +    }  +  +    Y_UNIT_TEST(BadStrategy) {  +        auto res = makeResult(R"(  +            $settings = AsStruct("bad" AS EntitiesStrategy);  +        )");  +        UNIT_ASSERT_STRING_CONTAINS(  +            Err2Str(res),  +            "Error: MakeLibraPreprocessor got invalid entities strategy: expected 'whitelist' or 'blacklist'"  +        );  +    }  +  +    Y_UNIT_TEST(BadEntities) {  +        auto res = makeResult(R"(  +            $settings = AsStruct(AsList("A", 1) AS Entities);  +        )");  +        UNIT_ASSERT_STRING_CONTAINS(Err2Str(res), "Error: MakeLibraPreprocessor entity must be string literal");  +    }  +}   Y_UNIT_TEST_SUITE(TrailingQuestionsNegative) {      Y_UNIT_TEST(Basic) {  | 
