diff options
author | robot-piglet <robot-piglet@yandex-team.com> | 2025-02-25 09:41:45 +0300 |
---|---|---|
committer | robot-piglet <robot-piglet@yandex-team.com> | 2025-02-25 09:53:55 +0300 |
commit | 9565834a8e98b6f151dba1e1ec68f511e919a6b7 (patch) | |
tree | 4e29932c8400aca4a229f65f162f4047b20e71d4 | |
parent | 323be453c6ab71c14d13b1fe775de412ffbca95f (diff) | |
download | ydb-9565834a8e98b6f151dba1e1ec68f511e919a6b7.tar.gz |
Intermediate changes
commit_hash:a15ba579f8839421630d3720bdb9d78af1867a9c
12 files changed, 206 insertions, 0 deletions
diff --git a/yql/essentials/udfs/language/ya.make b/yql/essentials/udfs/language/ya.make new file mode 100644 index 0000000000..98be153567 --- /dev/null +++ b/yql/essentials/udfs/language/ya.make @@ -0,0 +1,4 @@ +RECURSE( + yql +) + diff --git a/yql/essentials/udfs/language/yql/test/canondata/result.json b/yql/essentials/udfs/language/yql/test/canondata/result.json new file mode 100644 index 0000000000..ad20b6aaa1 --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/canondata/result.json @@ -0,0 +1,17 @@ +{ + "test.test[ObfuscateColumn]": [ + { + "uri": "file://test.test_ObfuscateColumn_/results.txt" + } + ], + "test.test[ObfuscateLiterals]": [ + { + "uri": "file://test.test_ObfuscateLiterals_/results.txt" + } + ], + "test.test[ObfuscateTable]": [ + { + "uri": "file://test.test_ObfuscateTable_/results.txt" + } + ] +} diff --git a/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateColumn_/results.txt b/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateColumn_/results.txt new file mode 100644 index 0000000000..74288fb5e9 --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateColumn_/results.txt @@ -0,0 +1,33 @@ +[ + { + "Write" = [ + { + "Type" = [ + "ListType"; + [ + "StructType"; + [ + [ + "column0"; + [ + "OptionalType"; + [ + "DataType"; + "String" + ] + ] + ] + ] + ] + ]; + "Data" = [ + [ + [ + "SELECT\n id\nFROM (\n SELECT\n 0 AS id\n);\n" + ] + ] + ] + } + ] + } +]
\ No newline at end of file diff --git a/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateLiterals_/results.txt b/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateLiterals_/results.txt new file mode 100644 index 0000000000..6807d13ef3 --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateLiterals_/results.txt @@ -0,0 +1,33 @@ +[ + { + "Write" = [ + { + "Type" = [ + "ListType"; + [ + "StructType"; + [ + [ + "column0"; + [ + "OptionalType"; + [ + "DataType"; + "String" + ] + ] + ] + ] + ] + ]; + "Data" = [ + [ + [ + "SELECT\n 0,\n 'str',\n FALSE,\n 0.0\n;\n" + ] + ] + ] + } + ] + } +]
\ No newline at end of file diff --git a/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateTable_/results.txt b/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateTable_/results.txt new file mode 100644 index 0000000000..96ff8e19c4 --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateTable_/results.txt @@ -0,0 +1,33 @@ +[ + { + "Write" = [ + { + "Type" = [ + "ListType"; + [ + "StructType"; + [ + [ + "column0"; + [ + "OptionalType"; + [ + "DataType"; + "String" + ] + ] + ] + ] + ] + ]; + "Data" = [ + [ + [ + "SELECT\n *\nFROM\n id\n;\n" + ] + ] + ] + } + ] + } +]
\ No newline at end of file diff --git a/yql/essentials/udfs/language/yql/test/cases/ObfuscateColumn.sql b/yql/essentials/udfs/language/yql/test/cases/ObfuscateColumn.sql new file mode 100644 index 0000000000..10f2bf49fb --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/cases/ObfuscateColumn.sql @@ -0,0 +1,2 @@ +SELECT + YqlLang::Obfuscate("select x from (select 1 as x)") diff --git a/yql/essentials/udfs/language/yql/test/cases/ObfuscateLiterals.sql b/yql/essentials/udfs/language/yql/test/cases/ObfuscateLiterals.sql new file mode 100644 index 0000000000..cd96c4e574 --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/cases/ObfuscateLiterals.sql @@ -0,0 +1,2 @@ +SELECT + YqlLang::Obfuscate("select 1, 'foo', true, 2.3f") diff --git a/yql/essentials/udfs/language/yql/test/cases/ObfuscateTable.sql b/yql/essentials/udfs/language/yql/test/cases/ObfuscateTable.sql new file mode 100644 index 0000000000..85025a571a --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/cases/ObfuscateTable.sql @@ -0,0 +1,2 @@ +SELECT + YqlLang::Obfuscate("select * from Input") diff --git a/yql/essentials/udfs/language/yql/test/ya.make b/yql/essentials/udfs/language/yql/test/ya.make new file mode 100644 index 0000000000..415db8ff9a --- /dev/null +++ b/yql/essentials/udfs/language/yql/test/ya.make @@ -0,0 +1,7 @@ +SUBSCRIBER(g:yql) + +YQL_UDF_TEST() + +DEPENDS(yql/essentials/udfs/language/yql) + +END() diff --git a/yql/essentials/udfs/language/yql/ya.make b/yql/essentials/udfs/language/yql/ya.make new file mode 100644 index 0000000000..90fe8dfbab --- /dev/null +++ b/yql/essentials/udfs/language/yql/ya.make @@ -0,0 +1,30 @@ +YQL_UDF(yql_language_udf) + +YQL_ABI_VERSION( + 2 + 22 + 0 +) + +SUBSCRIBER(g:yql) + +SRCS( + yql_language_udf.cpp +) + +PEERDIR( + yql/essentials/sql + yql/essentials/sql/v1 + yql/essentials/sql/v1/lexer/antlr4 + yql/essentials/sql/v1/lexer/antlr4_ansi + yql/essentials/sql/v1/proto_parser/antlr4 + yql/essentials/sql/v1/proto_parser/antlr4_ansi + yql/essentials/sql/pg_dummy + yql/essentials/sql/v1/format +) + +END() + +RECURSE_FOR_TESTS( + test +) diff --git a/yql/essentials/udfs/language/yql/yql_language_udf.cpp b/yql/essentials/udfs/language/yql/yql_language_udf.cpp new file mode 100644 index 0000000000..ea5c55760b --- /dev/null +++ b/yql/essentials/udfs/language/yql/yql_language_udf.cpp @@ -0,0 +1,42 @@ +#include <yql/essentials/public/udf/udf_helpers.h> + +#include <yql/essentials/sql/v1/lexer/antlr4/lexer.h> +#include <yql/essentials/sql/v1/lexer/antlr4_ansi/lexer.h> +#include <yql/essentials/sql/v1/proto_parser/antlr4/proto_parser.h> +#include <yql/essentials/sql/v1/proto_parser/antlr4_ansi/proto_parser.h> +#include <yql/essentials/sql/v1/format/sql_format.h> + +using namespace NYql; +using namespace NKikimr::NUdf; +using namespace NSQLTranslation; + +SIMPLE_UDF(TObfuscate, TOptional<char*>(TAutoMap<char*>)) { + using namespace NSQLFormat; + try { + const auto sqlRef = args[0].AsStringRef(); + TString formattedQuery; + NYql::TIssues issues; + google::protobuf::Arena arena; + NSQLTranslation::TTranslationSettings settings; + settings.Arena = &arena; + NSQLTranslationV1::TLexers lexers; + lexers.Antlr4 = NSQLTranslationV1::MakeAntlr4LexerFactory(); + lexers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiLexerFactory(); + NSQLTranslationV1::TParsers parsers; + parsers.Antlr4 = NSQLTranslationV1::MakeAntlr4ParserFactory(); + parsers.Antlr4Ansi = NSQLTranslationV1::MakeAntlr4AnsiParserFactory(); + if (!MakeSqlFormatter(lexers, parsers, settings)->Format(TString(sqlRef), formattedQuery, issues, EFormatMode::Obfuscate)) { + return {}; + } + + return valueBuilder->NewString(formattedQuery); + } catch (const yexception&) { + return {}; + } +} + +SIMPLE_MODULE(TYqlLangModule, + TObfuscate +); + +REGISTER_MODULES(TYqlLangModule); diff --git a/yql/essentials/udfs/ya.make b/yql/essentials/udfs/ya.make index c452d78775..d61a5a96ee 100644 --- a/yql/essentials/udfs/ya.make +++ b/yql/essentials/udfs/ya.make @@ -1,6 +1,7 @@ RECURSE( common examples + language logs test ) |