summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-piglet <[email protected]>2025-04-14 12:57:31 +0300
committerrobot-piglet <[email protected]>2025-04-14 13:17:30 +0300
commit0a3f7c36d20990ff22167d8af3ea54798cdb9d73 (patch)
treeb42dabb1d603409ad86974f6737506341ffd9740
parente11dfa5f63fe4c15672ffbe1e7974c39b6d2ac59 (diff)
Intermediate changes
commit_hash:b6187f8eba6e8debc23f1928b2e44a396f3511ad
-rw-r--r--yql/essentials/docs/ru/syntax/pragma.md95
-rw-r--r--yql/essentials/sql/v1/lexer/lexer_ut.cpp39
-rw-r--r--yql/essentials/sql/v1/lexer/regex/lexer.cpp10
-rw-r--r--yql/essentials/sql/v1/lexer/regex/regex.cpp2
-rw-r--r--yql/essentials/sql/v1/lexer/regex/regex_ut.cpp2
-rw-r--r--yt/yt/core/logging/unittests/logging_ut.cpp86
6 files changed, 142 insertions, 92 deletions
diff --git a/yql/essentials/docs/ru/syntax/pragma.md b/yql/essentials/docs/ru/syntax/pragma.md
index 6c9584fc58b..4b380de4a1a 100644
--- a/yql/essentials/docs/ru/syntax/pragma.md
+++ b/yql/essentials/docs/ru/syntax/pragma.md
@@ -15,6 +15,8 @@
* `Kb`, `Mb`, `Gb` — для объема информации.
* `sec`, `min`, `h`, `d` — для временных значений.
+За некоторым исключением, значение настроек можно вернуть в состояние по умолчанию с помощью `PRAGMA my_pragma = default;`.
+
### Примеры
```yql
@@ -29,16 +31,15 @@ PRAGMA TablePathPrefix = "home/yql";
PRAGMA Warning("disable", "1101");
```
-За некоторым исключением, значение настроек можно вернуть в состояние по умолчанию с помощью `PRAGMA my_pragma = default;`.
-
Полный список доступных настроек [см. в таблице ниже](#pragmas).
### Область действия {#pragmascope}
-Если не указано иное, прагма влияет на все идущие следом выражения вплоть до конца модуля, в котором она встречается.
-При необходимости и логической возможности допустимо менять значение настройки несколько раз в одном запросе, чтобы оно было разным на разных этапах выполнения.
+Если не указано иное, прагма влияет на все идущие следом выражения вплоть до конца модуля, в котором она встречается. При необходимости и логической возможности можно менять значение настройки несколько раз в одном запросе, чтобы оно было разным на разных этапах выполнения.
+
Существуют также специальные scoped прагмы, область действия которых определяется по тем же правилам, что и область видимости [именованных выражений](expressions.md#named-nodes).
-В отличие от scoped прагм, обычные прагмы могут использоваться только в глобальной области видимости (не внутри лямбда-функций, ACTION, SUBQUERY и т.п.).
+
+В отличие от scoped прагм, обычные прагмы могут использоваться только в глобальной области видимости (не внутри [DEFINE ACTION](action.md#define-action) и [DEFINE SUBQUERY](subquery.md#define-subquery)).
## Глобальные {#pragmas}
@@ -70,11 +71,11 @@ SELECT * FROM test;
| Тип значения | По умолчанию | Статическая /<br/>динамическая |
| --- | --- | --- |
| Строка | — | Статическая |
-| Строка - имя префикса, добавляемого ко всем модулям | "" | Статическая |
+| Строка &mdash; имя префикса, добавляемого ко всем модулям | "" | Статическая |
+
+Импорт всех UDF из указанной библиотеки. Чтобы прагма сработала, библиотеку необходимо приложить к запросу. Обратите внимание: библиотека должна быть разделяемой (.so) и она должна быть скомпилирована под Linux x64.
-Импорт всех UDF из указанной приложенной к запросу скомпилированной под Linux x64 разделяемой библиотеки (.so).
-При указании префикса, он добавляется перед названием всех загруженных модулей, например, CustomPrefixIp::IsIPv4 вместо Ip::IsIPv4.
-Указание префикса позволяет подгрузить одну и ту же UDF разных версий.
+При указании префикса, он добавляется перед названием всех загруженных модулей, например, CustomPrefixIp::IsIPv4 вместо Ip::IsIPv4. Указание префикса позволяет подгрузить одну и ту же UDF разных версий.
### RuntimeLogLevel {#runtime-log-level}
@@ -112,9 +113,7 @@ SELECT * FROM test;
`PRAGMA Warning("disable", "1101");`
`PRAGMA Warning("default", "4503");`
-В данном случае все предупреждения будут считаться ошибками, за исключением предупреждение с кодом `1101`, которое будет отключено, и `4503`, которое будет обрабатываться по умолчанию (то есть останется предупреждением). Поскольку предупреждения могут добавляться в новых релизах YQL, следует с осторожностью пользоваться конструкцией `PRAGMA Warning("error", "*");` (как минимум покрывать такие запросы автотестами).
-
-
+В данном случае все предупреждения будут считаться ошибками, за исключением предупреждения с кодом `1101`, которое будет отключено, и `4503`, которое будет обрабатываться по умолчанию (то есть останется предупреждением). Поскольку предупреждения могут добавляться в новых релизах YQL, следует с осторожностью пользоваться конструкцией `PRAGMA Warning("error", "*");` (как минимум покрывать такие запросы автотестами).
### Greetings {#greetings}
@@ -124,8 +123,7 @@ SELECT * FROM test;
Выдать указанный текст в качестве Info сообщения запроса.
-Пример:
-`PRAGMA Greetings("It's a good day!");`
+Пример: `PRAGMA Greetings("It's a good day!");`
### WarningMsg {#warningmsg}
@@ -158,7 +156,7 @@ SELECT * FROM test;
| --- | --- |
| Флаг | true |
-Управляет неявным Coalesce для ключевых колонок `JOIN` в режиме SimpleColumns. Если флаг установлен, то Coalesce ключевых колонок происходит при наличии хотя бы одного выражения вида `foo.*` или `*` в SELECT - например `SELECT a.* FROM T1 AS a JOIN T2 AS b USING(key)`. Если флаг сброшен, то Coalesce ключей JOIN происходит только при наличии '*' после `SELECT`
+Управляет неявным Coalesce для ключевых колонок `JOIN` в режиме SimpleColumns. Если флаг установлен, то Coalesce ключевых колонок происходит при наличии хотя бы одного выражения вида `foo.*` или `*` в SELECT &mdash; например `SELECT a.* FROM T1 AS a JOIN T2 AS b USING(key)`. Если флаг сброшен, то Coalesce ключей JOIN происходит только при наличии '*' после `SELECT`.
### StrictJoinKeyTypes
@@ -170,8 +168,10 @@ SELECT * FROM test;
Если флаг установлен, то [JOIN](join.md) будет требовать строгого совпадения типов ключей.
По умолчанию JOIN предварительно конвертирует ключи к общему типу, что может быть нежелательно с точки зрения производительности.
+
StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
+
### AnsiInForEmptyOrNullableItemsCollections
| Тип значения | По умолчанию |
@@ -184,7 +184,7 @@ StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
`NULL IN () = Just(False) (было NULL)`
`(1, null) IN ((2, 2), (3, 3)) = Just(False) (было NULL)`
-Подробнее про поведение `IN` при наличии `NULL`ов в операндах можно почитать [здесь](expressions.md#in). Явным образом выбрать старое поведение можно указав прагму `DisableAnsiInForEmptyOrNullableItemsCollections`. Если никакой прагмы не задано, то выдается предупреждение и работает старый вариант.
+Подробнее про поведение `IN` при наличии NULL-ов в операндах можно почитать [здесь](expressions.md#in). Явным образом выбрать старое поведение можно, указав прагму `DisableAnsiInForEmptyOrNullableItemsCollections`. Если никакой прагмы не задано, то выдается предупреждение и работает старый вариант.
### AnsiRankForNullableKeys
@@ -197,7 +197,7 @@ StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
* типом результата всегда является Uint64, а не Uint64?;
* null-ы в ключах считаются равными друг другу (текущая реализация возвращает NULL).
-Явным образом выбрать старое поведению можно указав прагму `DisableAnsiRankForNullableKeys`. Если никакой прагмы не задано, то выдается предупреждение и работает старый вариант.
+Явным образом выбрать старое поведение можно, указав прагму `DisableAnsiRankForNullableKeys`. Если никакой прагмы не задано, то выдается предупреждение и работает старый вариант.
### AnsiCurrentRow
@@ -205,9 +205,10 @@ StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
| --- | --- |
| Флаг | false |
-Приводит неявное задание рамки окна при наличии ORDER BY в соответствие со стандартом.
-Если AnsiCurrentRow не установлен, то окно `(ORDER BY key)` эквивалентно `(ORDER BY key ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)`.
-Стандарт же требует, чтобы такое окно вело себя как `(ORDER BY key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)`.
+Приводит неявное задание рамки окна при наличии [ORDER BY](select/order_by.md) в соответствие со стандартом.
+
+Если AnsiCurrentRow не установлен, то окно `(ORDER BY key)` эквивалентно `(ORDER BY key ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)`. Стандарт же требует, чтобы такое окно вело себя как `(ORDER BY key RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)`.
+
Разница состоит в трактовке `CURRENT ROW`. В режиме `ROWS` `CURRENT ROW` трактуется буквально – текущая строка в партиции.
А в режиме `RANGE` конец рамки `CURRENT ROW` означает "последняя строка в партиции с ключом сортировки, равным текущей строке".
@@ -219,8 +220,7 @@ StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
### PositionalUnionAll {#positionalunionall}
-Включить соответствующий стандарту поколоночный режим выполнения [UNION ALL](select/index.md#unionall). При этом автоматически включается
-[упорядоченность колонок](#orderedcolumns).
+Включить соответствующий стандарту поколоночный режим выполнения [UNION ALL](select/index.md#unionall). При этом автоматически включается [упорядоченность колонок](#orderedcolumns).
### RegexUseRe2
@@ -236,9 +236,9 @@ StrictJoinKeyTypes является [scoped](#pragmascope) настройкой.
| --- | --- |
| Флаг | true |
-В классическом варианте результат целочисленного деления остаётся целочисленным (по умолчанию).
-Если отключить — результат всегда становится Double.
-ClassicDivision является [scoped](#pragmascope) настройкой.
+В классическом варианте результат целочисленного деления остается целочисленным (по умолчанию). Если отключить &mdash; результат всегда становится Double.
+
+`ClassicDivision` является [scoped](#pragmascope) настройкой.
### CheckedOps
@@ -246,10 +246,11 @@ ClassicDivision является [scoped](#pragmascope) настройкой.
| --- | --- |
| Флаг | false |
-При включенном режиме если в результате выполнения агрегационных функций SUM/SUM_IF, бинарных операций `+`,`-`,`*`,`/`,`%` или унарной операции `-` над целыми числами происходит выход за границы целевого типа аргументов или результата, то возвращается `NULL`.
-Если отключить - переполнение не проверяется.
+При включенном режиме: если в результате выполнения агрегационных функций SUM/SUM_IF, бинарных операций `+`,`-`,`*`,`/`,`%` или унарной операции `-` над целыми числами происходит выход за границы целевого типа аргументов или результата, то возвращается `NULL`. Если отключить &mdash; переполнение не проверяется.
+
Не влияет на операции с числами с плавающей точкой или `Decimal`.
-CheckedOps является [scoped](#pragmascope) настройкой.
+
+`CheckedOps` является [scoped](#pragmascope) настройкой.
### UnicodeLiterals
@@ -259,8 +260,9 @@ CheckedOps является [scoped](#pragmascope) настройкой.
| --- | --- |
| Флаг | false |
-При включенном режиме строковые литералы без суффиксов вида "foo"/'bar'/@@multiline@@ будут иметь тип `Utf8`, при выключенном - `String`.
-UnicodeLiterals является [scoped](#pragmascope) настройкой.
+При включенном режиме строковые литералы без суффиксов вида "foo"/'bar'/@@multiline@@ будут иметь тип `Utf8`, при выключенном &mdash; `String`.
+
+`UnicodeLiterals` является [scoped](#pragmascope) настройкой.
### WarnUntypedStringLiterals
@@ -271,7 +273,8 @@ UnicodeLiterals является [scoped](#pragmascope) настройкой.
| Флаг | false |
При включенном режиме для строковых литералов без суффиксов вида "foo"/'bar'/@@multiline@@ будет генерироваться предупреждение. Его можно подавить, если явно выбрать суффикс `s` для типа `String`, либо `u` для типа `Utf8`.
-WarnUntypedStringLiterals является [scoped](#pragmascope) настройкой.
+
+`WarnUntypedStringLiterals` является [scoped](#pragmascope) настройкой.
### AllowDotInAlias
@@ -279,7 +282,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| --- | --- |
| Флаг | false |
-Разрешить использовать точку в именах результирующих колонок. По умолчанию отключено, т.к. дальнейшее использование таких колонок в JOIN полностью не реализовано.
+Разрешить использовать точку в именах результирующих колонок. По умолчанию отключено, т. к. дальнейшее использование таких колонок в JOIN полностью не реализовано.
### WarnUnnamedColumns
@@ -287,7 +290,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| --- | --- |
| Флаг | false |
-Генерировать предупреждение если для безымянного выражения в `SELECT` было автоматически сгенерировано имя колонки (вида `column[0-9]+`).
+Генерировать предупреждение, если для безымянного выражения в `SELECT` было автоматически сгенерировано имя колонки (вида `column[0-9]+`).
### GroupByLimit
@@ -295,7 +298,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| --- | --- |
| Положительное число | 32 |
-Увеличение лимита на число группировок в [GROUP BY](group_by.md).
+Увеличение лимита на число группировок в [GROUP BY](group_by.md).
### GroupByCubeLimit
@@ -310,7 +313,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
## Yson
-Управление поведением Yson UDF по умолчанию, подробнее см. в [документации по ней](../udf/list/yson.md) и в частности [Yson::Options](../udf/list/yson.md#ysonoptions).
+Управление поведением Yson UDF по умолчанию, подробнее см. в [документации](../udf/list/yson.md) и в частности [Yson::Options](../udf/list/yson.md#ysonoptions).
### `yson.AutoConvert`
@@ -318,7 +321,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| --- | --- |
| Флаг | false |
-Автоматическое конвертация значений в требуемый тип данных во всех вызовах Yson UDF, в том числе и неявных.
+Автоматическая конвертация значений в требуемый тип данных во всех вызовах Yson UDF, в том числе и неявных.
### `yson.Strict`
@@ -326,7 +329,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| --- | --- |
| Флаг | true |
-Управление строгим режимом во всех вызовах Yson UDF, в том числе и неявных. Без значения или при значении `"true"` - включает строгий режим. Со значением `"false"` - отключает.
+Управление строгим режимом во всех вызовах Yson UDF, в том числе и неявных. Без значения или при значении `"true"` &mdash; включает строгий режим. Со значением `"false"` &mdash; отключает.
### `yson.DisableStrict`
@@ -334,7 +337,8 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| --- | --- |
| Флаг | false |
-Инвертированная версия `yson.Strict`. Без значения или при значении `"true"` - отключает строгий режим. Со значением `"false"` - включает.
+Инвертированная версия `yson.Strict`. Без значения или при значении `"true"` &mdash; отключает строгий режим. Со значением `"false"` &mdash; включает.
+
## Работа с файлами
@@ -354,8 +358,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
|-------------------------------------------------|--------------|--------------------------------|
| Три строковых аргумента — алиас, ключ, значение | — | Статическая |
-Установить у указанного файла опцию по заданному ключу в заданное значение. Файл с этим алиасом уже должен быть объявлен
-через [PRAGMA File](#file) или приложен к запросу.
+Установить для указанного файла опцию по заданному ключу в заданное значение. Файл с этим алиасом уже должен быть объявлен через [PRAGMA File](#file) или приложен к запросу.
@@ -373,7 +376,7 @@ WarnUntypedStringLiterals является [scoped](#pragmascope) настрой
| Тип значения | По умолчанию | Статическая /<br/>динамическая |
| --- | --- | --- |
-| Один или два аргумента - имя файла и опциональный URL | — | Статическая |
+| Один или два аргумента &mdash; имя файла и опциональный URL | — | Статическая |
Интерпретировать указанный приложенный файл как библиотеку, из которой можно делать [IMPORT](export_import.md). Тип синтаксиса библиотеки определяется по расширению файла:
* `.sql` для YQL диалекта SQL <span style="color: green;">(рекомендуется)</span>;
@@ -408,13 +411,13 @@ SELECT $x;
| Тип значения | По умолчанию | Статическая /<br/>динамическая |
| --- | --- | --- |
-| Два или три аргумента - имя пакета, URL и опциональный токен | — | Статическая |
+| Два или три аргумента &mdash; имя пакета, URL и опциональный токен | — | Статическая |
-Приложить иерархический набор файлов к запросу по URL, интерпретируя их в качестве пакета с указанным именем - взаимосвязанного набора библиотек.
+Приложить иерархический набор файлов к запросу по URL, интерпретируя их в качестве пакета с указанным именем &mdash; взаимосвязанного набора библиотек.
-Имя пакета ожидается в формате ``project_name.package_name``; из библиотек пакета в дальнейшнем можно делать [IMPORT](export_import.md) с именем модуля вида ``pkg.project_name.package_name.maybe.nested.module.name``.
+Имя пакета ожидается в формате ``project_name.package_name``; из библиотек пакета в дальнейшем можно делать [IMPORT](export_import.md) с именем модуля вида ``pkg.project_name.package_name.maybe.nested.module.name``.
-Пример для пакета с плоской иерархией, состоящего из двух библиотек - foo.sql и bar.sql:
+Пример для пакета с плоской иерархией, состоящего из двух библиотек &mdash; foo.sql и bar.sql:
```yql
PRAGMA package("project.package", "http://intranet.site/path/to/package");
@@ -437,7 +440,7 @@ SELECT $foo, $bar;
| Тип значения | По умолчанию | Статическая /<br/>динамическая |
| --- | --- | --- |
-| Один аргумент - имя файла | — | Статическая |
+| Один аргумент &mdash; имя файла | — | Статическая |
Интерпретировать указанный приложенный файл как библиотеку и перекрыть ей одну из библиотек пакета.
diff --git a/yql/essentials/sql/v1/lexer/lexer_ut.cpp b/yql/essentials/sql/v1/lexer/lexer_ut.cpp
index 92395f5237b..c59089efd63 100644
--- a/yql/essentials/sql/v1/lexer/lexer_ut.cpp
+++ b/yql/essentials/sql/v1/lexer/lexer_ut.cpp
@@ -484,4 +484,43 @@ SELECT
"SEMICOLON(;) EOF");
}
+ Y_UNIT_TEST_ON_EACH_LEXER(AsciiEscape) {
+ auto lexer = MakeLexer(Lexers, ANSI, ANTLR4, FLAVOR);
+ UNIT_ASSERT_TOKENIZED(lexer, "\0", "EOF"); // Null character
+ UNIT_ASSERT_TOKENIZED(lexer, "\t", "WS(\t) EOF"); // Horizontal Tab
+ UNIT_ASSERT_TOKENIZED(lexer, "\n", "WS(\n) EOF"); // Line Feed
+ UNIT_ASSERT_TOKENIZED(lexer, "\v", "[INVALID] EOF"); // Vertical Tabulation
+ UNIT_ASSERT_TOKENIZED(lexer, "\f", "WS(\x0C) EOF"); // Form Feed
+ UNIT_ASSERT_TOKENIZED(lexer, "\r", "WS(\r) EOF"); // Carriage Return
+ UNIT_ASSERT_TOKENIZED(lexer, "\r\n", "WS(\r) WS(\n) EOF");
+ }
+
+ Y_UNIT_TEST_ON_EACH_LEXER(AsciiEscapeCanon) {
+ static THashMap<char, TString> canon;
+
+ auto lexer = MakeLexer(Lexers, ANSI, ANTLR4, FLAVOR);
+
+ for (char c = 0; c < std::numeric_limits<char>::max(); ++c) {
+ TString input;
+ input += c;
+
+ TString& expected = canon[c];
+ if (expected.empty()) {
+ expected = Tokenized(lexer, input);
+ }
+
+ UNIT_ASSERT_TOKENIZED(lexer, input, expected);
+ }
+ }
+
+ Y_UNIT_TEST_ON_EACH_LEXER(Utf8BOM) {
+ auto lexer = MakeLexer(Lexers, ANSI, ANTLR4, FLAVOR);
+ if (ANTLR4 || FLAVOR == ELexerFlavor::Regex) {
+ UNIT_ASSERT_TOKENIZED(lexer, "\xEF\xBB\xBF 1", "WS( ) DIGITS(1) EOF");
+ UNIT_ASSERT_TOKENIZED(lexer, "\xEF\xBB\xBF \xEF\xBB\xBF", "[INVALID] WS( ) EOF");
+ } else {
+ UNIT_ASSERT_TOKENIZED(lexer, "\xEF\xBB\xBF 1", "[INVALID] WS( ) DIGITS(1) EOF");
+ }
+ }
+
} // Y_UNIT_TEST_SUITE(SQLv1Lexer)
diff --git a/yql/essentials/sql/v1/lexer/regex/lexer.cpp b/yql/essentials/sql/v1/lexer/regex/lexer.cpp
index 820cbebf235..a1d96253bf7 100644
--- a/yql/essentials/sql/v1/lexer/regex/lexer.cpp
+++ b/yql/essentials/sql/v1/lexer/regex/lexer.cpp
@@ -21,6 +21,8 @@ namespace NSQLTranslationV1 {
static constexpr const char* CommentTokenName = "COMMENT";
static constexpr const char* StringValueName = "STRING_VALUE";
+ static constexpr const TStringBuf Utf8BOM = "\xEF\xBB\xBF";
+
public:
TRegexLexer(
bool ansi,
@@ -51,7 +53,13 @@ namespace NSQLTranslationV1 {
NYql::TIssues& issues,
size_t maxErrors) override {
size_t errors = 0;
- for (size_t pos = 0; pos < query.size();) {
+
+ size_t pos = 0;
+ if (query.StartsWith(Utf8BOM)) {
+ pos += Utf8BOM.size();
+ }
+
+ while (pos < query.size()) {
TParsedToken matched = Match(TStringBuf(query, pos));
if (matched.Name.empty() && maxErrors == errors) {
diff --git a/yql/essentials/sql/v1/lexer/regex/regex.cpp b/yql/essentials/sql/v1/lexer/regex/regex.cpp
index 937d21572fc..e634ff009a7 100644
--- a/yql/essentials/sql/v1/lexer/regex/regex.cpp
+++ b/yql/essentials/sql/v1/lexer/regex/regex.cpp
@@ -135,7 +135,7 @@ namespace NSQLTranslationV1 {
R"(\bEOF\b)", R"($)"));
rules.emplace_back(RegexRewriteRule(
- R"('\\u000C' \|)", ""));
+ R"('\\u000C' \|)", R"('\\f' |)"));
}
void Finalize(TString& text) {
diff --git a/yql/essentials/sql/v1/lexer/regex/regex_ut.cpp b/yql/essentials/sql/v1/lexer/regex/regex_ut.cpp
index 8f22bda5886..e62bb0e609f 100644
--- a/yql/essentials/sql/v1/lexer/regex/regex_ut.cpp
+++ b/yql/essentials/sql/v1/lexer/regex/regex_ut.cpp
@@ -76,7 +76,7 @@ Y_UNIT_TEST_SUITE(SqlRegexTests) {
CheckRegex(
/* ansi = */ false,
"WS",
- R"(( |\r|\t|\n))");
+ R"(( |\r|\t|\f|\n))");
}
Y_UNIT_TEST(Comment) {
diff --git a/yt/yt/core/logging/unittests/logging_ut.cpp b/yt/yt/core/logging/unittests/logging_ut.cpp
index 4aaa9c73124..556b7f3192c 100644
--- a/yt/yt/core/logging/unittests/logging_ut.cpp
+++ b/yt/yt/core/logging/unittests/logging_ut.cpp
@@ -452,7 +452,7 @@ TEST_F(TLoggingTest, LogManager)
};
];
writers = {
- "error" = {
+ error = {
file_name = "%v";
type = "file";
};
@@ -487,14 +487,14 @@ TEST_F(TLoggingTest, ThreadMinLogLevel)
Configure(Format(R"({
rules = [
{
- min_level = "debug";
- writers = [ "debug" ];
+ min_level = debug;
+ writers = [ debug ];
};
];
writers = {
- "debug" = {
+ debug = {
file_name = "%v";
- type = "file";
+ type = file;
};
};
})", debugFile.Name()));
@@ -614,12 +614,12 @@ TEST_F(TLoggingTest, SlogMacroLogging)
rules = [
{
min_level = info;
- writers = [ "test" ];
+ writers = [ test ];
};
];
writers = {
- "test" = {
- "format" = "%v";
+ test = {
+ format = "%v";
file_name = "%v";
type = "file";
};
@@ -656,8 +656,8 @@ TEST_F(TLoggingTest, SlogMacroConstexprLogging)
};
];
writers = {
- "test" = {
- "format" = "%v";
+ test = {
+ format = "%v";
file_name = "%v";
type = "file";
};
@@ -776,19 +776,19 @@ TEST_F(TLoggingTest, StructuredLoggingWithValidator)
Configure(Format(R"({
rules = [
{
- "family" = "structured";
+ family = structured;
min_level = info;
- writers = [ "test" ];
+ writers = [ test ];
};
];
writers = {
- "test" = {
- "format" = "structured";
+ test = {
+ format = structured;
file_name = "%v";
- type = "file";
+ type = file;
};
};
- "structured_validation_sampling_rate" = 1.0;
+ structured_validation_sampling_rate = 1.0;
})", logFile.Name()));
auto logger = Logger().WithStructuredValidator([] (const TYsonString& yson) {
@@ -826,19 +826,19 @@ TEST_F(TLoggingTest, StructuredValidationWithSamplingRate)
Configure(Format(R"({
rules = [
{
- "family" = "structured";
+ family = structured;
min_level = info;
- writers = [ "test" ];
+ writers = [ test ];
};
];
writers = {
- "test" = {
+ test = {
file_name = "%v";
- "format" = "structured";
- type = "file";
+ format = structured;
+ type = file;
}
};
- "structured_validation_sampling_rate" = 0.5;
+ structured_validation_sampling_rate = 0.5;
})", logFile.Name()));
EXPECT_NEAR(TLogManager::Get()->GetCategory("Test")->StructuredValidationSamplingRate, 0.5, 0.001);
@@ -922,12 +922,12 @@ TEST_P(TBuiltinRotationTest, All)
writers = {
info = {
file_name = "%v";
- "use_timestamp_suffix" = %v;
- "use_logrotate_compatible_timestamp_suffix" = %v;
+ use_timestamp_suffix = %v;
+ use_logrotate_compatible_timestamp_suffix = %v;
type = "file";
- "rotation_policy" = {
- "max_segment_count_to_keep" = %v;
- "max_segment_size" = 10;
+ rotation_policy = {
+ max_segment_count_to_keep = %v;
+ max_segment_size = 10;
};
};
};
@@ -1155,7 +1155,7 @@ TEST_F(TLoggingTest, DISABLED_LogFatal)
writers = {
info = {
file_name = "%v";
- type = "file";
+ type = file;
};
};
})", logFile.Name()));
@@ -1184,10 +1184,10 @@ TEST_F(TLoggingTest, SupressedRequests)
writers = {
info = {
file_name = "%v";
- type = "file";
+ type = file;
};
};
- "request_suppression_timeout" = 100;
+ request_suppression_timeout = 100;
})", logFile.Name()));
{
@@ -1225,7 +1225,7 @@ TEST_F(TLoggingTest, SuppressedMessages)
writers = {
info = {
file_name = "%v";
- type = "file";
+ type = file;
};
};
suppressed_messages = ["Suppressed message"];
@@ -1256,7 +1256,7 @@ TEST_F(TLoggingTest, MessageLevelOverride)
writers = {
info = {
file_name = "%v";
- type = "file";
+ type = file;
};
};
message_level_overrides = {
@@ -1352,14 +1352,14 @@ protected:
rules = [
{
min_level = info;
- "max_level" = info;
+ max_level = info;
writers = [ info ];
};
];
writers = {
info = {
file_name = "%v";
- type = "file";
+ type = file;
};
};
})", fileName));
@@ -1539,10 +1539,10 @@ TEST_F(TCustomWriterTest, UnknownWriterType)
EXPECT_THROW_WITH_SUBSTRING(
{
Configure(R"({
- "rules" = [];
+ rules = [];
writers = {
- "custom" = {
- type = "unknown";
+ custom = {
+ type = unknown;
};
};
})");
@@ -1555,11 +1555,11 @@ TEST_F(TCustomWriterTest, WriterConfigValidation)
EXPECT_THROW_WITH_SUBSTRING(
{
Configure(Format(R"({
- "rules" = [];
+ rules = [];
writers = {
- "custom" = {
+ custom = {
type = "%v";
- "padding" = -10;
+ padding = -10;
};
};
})", CustomWriterType));
@@ -1573,13 +1573,13 @@ TEST_F(TCustomWriterTest, Write)
"rules" = [
{
min_level = info;
- writers = [ "custom" ];
+ writers = [ custom ];
}
];
writers = {
- "custom" = {
+ custom = {
type = "%v";
- "padding" = 2;
+ padding = 2;
};
};
})", CustomWriterType));