aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsinister <sinister@yandex-team.ru>2022-02-10 16:50:50 +0300
committerDaniil Cherednik <dcherednik@yandex-team.ru>2022-02-10 16:50:50 +0300
commiteace2adfb451fa3978f6edbae8aec53a50d1c969 (patch)
tree5d5cb817648f650d76cf1076100726fd9b8448e8
parentb76c7a19e20d232ef1e00ccbe68f64a3024d29ed (diff)
downloadydb-eace2adfb451fa3978f6edbae8aec53a50d1c969.tar.gz
Restoring authorship annotation for <sinister@yandex-team.ru>. Commit 2 of 2.
-rw-r--r--build/plugins/yql_python_udf.py24
-rw-r--r--build/scripts/gen_yql_python_udf.py50
-rw-r--r--library/cpp/yson_pull/detail/lexer_base.h52
-rw-r--r--library/cpp/yson_pull/detail/percent_scalar.h62
-rw-r--r--library/cpp/yson_pull/detail/reader.h26
-rw-r--r--library/cpp/yson_pull/detail/writer.h32
-rw-r--r--library/cpp/yson_pull/ut/reader_ut.cpp58
-rw-r--r--library/cpp/yson_pull/ut/writer_ut.cpp22
-rw-r--r--ydb/library/yql/core/expr_nodes/yql_expr_nodes.json10
-rw-r--r--ydb/library/yql/sql/v1/builtin.cpp156
-rw-r--r--ydb/library/yql/sql/v1/query.cpp16
-rw-r--r--ydb/library/yql/sql/v1/sql.cpp30
-rw-r--r--ydb/library/yql/sql/v1/sql_ut.cpp140
13 files changed, 339 insertions, 339 deletions
diff --git a/build/plugins/yql_python_udf.py b/build/plugins/yql_python_udf.py
index 324821c3bf..c4f949d8a9 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 e2dd7cc9e0..13b5898117 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 61f0c21ca9..572bdb3d18 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 beec425c7d..ff4571842e 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 29a266edb9..0e02396358 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 2df6ee8906..b24b994292 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 586c91870a..1184265ddb 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 4a052e5274..5c304bad0f 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 541b85b0ba..edfcaa1530 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 e877c6994b..43ef1243f1 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 6429ebe9cc..725356b9f5 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 f4d121741b..ab5a864788 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 4bac8cb1cc..85b6e0dfcd 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) {