aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrobot-piglet <robot-piglet@yandex-team.com>2025-02-25 09:41:45 +0300
committerrobot-piglet <robot-piglet@yandex-team.com>2025-02-25 09:53:55 +0300
commit9565834a8e98b6f151dba1e1ec68f511e919a6b7 (patch)
tree4e29932c8400aca4a229f65f162f4047b20e71d4
parent323be453c6ab71c14d13b1fe775de412ffbca95f (diff)
downloadydb-9565834a8e98b6f151dba1e1ec68f511e919a6b7.tar.gz
Intermediate changes
commit_hash:a15ba579f8839421630d3720bdb9d78af1867a9c
-rw-r--r--yql/essentials/udfs/language/ya.make4
-rw-r--r--yql/essentials/udfs/language/yql/test/canondata/result.json17
-rw-r--r--yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateColumn_/results.txt33
-rw-r--r--yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateLiterals_/results.txt33
-rw-r--r--yql/essentials/udfs/language/yql/test/canondata/test.test_ObfuscateTable_/results.txt33
-rw-r--r--yql/essentials/udfs/language/yql/test/cases/ObfuscateColumn.sql2
-rw-r--r--yql/essentials/udfs/language/yql/test/cases/ObfuscateLiterals.sql2
-rw-r--r--yql/essentials/udfs/language/yql/test/cases/ObfuscateTable.sql2
-rw-r--r--yql/essentials/udfs/language/yql/test/ya.make7
-rw-r--r--yql/essentials/udfs/language/yql/ya.make30
-rw-r--r--yql/essentials/udfs/language/yql/yql_language_udf.cpp42
-rw-r--r--yql/essentials/udfs/ya.make1
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
)