aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordebnatkh <debnatkh@yandex-team.com>2023-08-10 13:39:07 +0300
committerdebnatkh <debnatkh@yandex-team.com>2023-08-10 15:13:39 +0300
commitc5edd93801037f77832d935319eb95cc7a1ff39f (patch)
tree88a0a6bb238fa1a110cade0eea0b30465290dc79
parentccc51cee025ff0b2d368a4eeb8e93fe8511c3537 (diff)
downloadydb-c5edd93801037f77832d935319eb95cc7a1ff39f.tar.gz
YQL-16215: support escaping in JsonPath
![](https://arcanum.s3.mds.yandex.net/files/debnatkh/1dsO8d4Jyq9tQXenVi3xN)
-rw-r--r--ydb/library/yql/minikql/computation/ya.make2
-rw-r--r--ydb/library/yql/minikql/invoke_builtins/ya.make2
-rw-r--r--ydb/library/yql/minikql/jsonpath/CMakeLists.darwin-x86_64.txt1
-rw-r--r--ydb/library/yql/minikql/jsonpath/CMakeLists.linux-aarch64.txt1
-rw-r--r--ydb/library/yql/minikql/jsonpath/CMakeLists.linux-x86_64.txt1
-rw-r--r--ydb/library/yql/minikql/jsonpath/CMakeLists.windows-x86_64.txt1
-rw-r--r--ydb/library/yql/minikql/jsonpath/ast_builder.cpp18
-rw-r--r--ydb/library/yql/minikql/jsonpath/ut/common_ut.cpp4
-rw-r--r--ydb/library/yql/minikql/jsonpath/ut/ya.make4
-rw-r--r--ydb/library/yql/minikql/jsonpath/ya.make1
10 files changed, 27 insertions, 8 deletions
diff --git a/ydb/library/yql/minikql/computation/ya.make b/ydb/library/yql/minikql/computation/ya.make
deleted file mode 100644
index c5e138b8b52..00000000000
--- a/ydb/library/yql/minikql/computation/ya.make
+++ /dev/null
@@ -1,2 +0,0 @@
-RECURSE(llvm no_llvm)
-RECURSE_FOR_TESTS(ut)
diff --git a/ydb/library/yql/minikql/invoke_builtins/ya.make b/ydb/library/yql/minikql/invoke_builtins/ya.make
deleted file mode 100644
index c5e138b8b52..00000000000
--- a/ydb/library/yql/minikql/invoke_builtins/ya.make
+++ /dev/null
@@ -1,2 +0,0 @@
-RECURSE(llvm no_llvm)
-RECURSE_FOR_TESTS(ut)
diff --git a/ydb/library/yql/minikql/jsonpath/CMakeLists.darwin-x86_64.txt b/ydb/library/yql/minikql/jsonpath/CMakeLists.darwin-x86_64.txt
index 5609a579c18..bb96e932dc2 100644
--- a/ydb/library/yql/minikql/jsonpath/CMakeLists.darwin-x86_64.txt
+++ b/ydb/library/yql/minikql/jsonpath/CMakeLists.darwin-x86_64.txt
@@ -33,6 +33,7 @@ target_link_libraries(yql-minikql-jsonpath PUBLIC
yql-minikql-dom
yql-public-issue
yql-public-udf
+ library-yql-ast
library-yql-utils
core-issue-protos
yql-parser-proto_ast
diff --git a/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-aarch64.txt b/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-aarch64.txt
index 4ac1a6a035a..09049a15249 100644
--- a/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-aarch64.txt
+++ b/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-aarch64.txt
@@ -33,6 +33,7 @@ target_link_libraries(yql-minikql-jsonpath PUBLIC
yql-minikql-dom
yql-public-issue
yql-public-udf
+ library-yql-ast
library-yql-utils
core-issue-protos
yql-parser-proto_ast
diff --git a/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-x86_64.txt b/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-x86_64.txt
index e937c715659..033eee4ae6c 100644
--- a/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-x86_64.txt
+++ b/ydb/library/yql/minikql/jsonpath/CMakeLists.linux-x86_64.txt
@@ -34,6 +34,7 @@ target_link_libraries(yql-minikql-jsonpath PUBLIC
yql-minikql-dom
yql-public-issue
yql-public-udf
+ library-yql-ast
library-yql-utils
core-issue-protos
yql-parser-proto_ast
diff --git a/ydb/library/yql/minikql/jsonpath/CMakeLists.windows-x86_64.txt b/ydb/library/yql/minikql/jsonpath/CMakeLists.windows-x86_64.txt
index 5609a579c18..bb96e932dc2 100644
--- a/ydb/library/yql/minikql/jsonpath/CMakeLists.windows-x86_64.txt
+++ b/ydb/library/yql/minikql/jsonpath/CMakeLists.windows-x86_64.txt
@@ -33,6 +33,7 @@ target_link_libraries(yql-minikql-jsonpath PUBLIC
yql-minikql-dom
yql-public-issue
yql-public-udf
+ library-yql-ast
library-yql-utils
core-issue-protos
yql-parser-proto_ast
diff --git a/ydb/library/yql/minikql/jsonpath/ast_builder.cpp b/ydb/library/yql/minikql/jsonpath/ast_builder.cpp
index f6bed23d82c..96e514021b9 100644
--- a/ydb/library/yql/minikql/jsonpath/ast_builder.cpp
+++ b/ydb/library/yql/minikql/jsonpath/ast_builder.cpp
@@ -4,6 +4,7 @@
#include <ydb/library/yql/core/issue/protos/issue_id.pb.h>
#include <ydb/library/rewrapper/proto/serialization.pb.h>
+#include <ydb/library/yql/ast/yql_ast_escaping.h>
#include <util/generic/singleton.h>
#include <util/system/compiler.h>
@@ -42,8 +43,21 @@ bool TryStringContent(const TString& str, TString& result, TString& error, bool
return false;
}
- result = str.substr(1, str.length() - 2);
- return true;
+ char quoteChar = doubleQuoted ? '"' : '\'';
+ size_t readBytes = 0;
+ TStringBuf atom(str);
+ atom.Skip(1);
+ TStringOutput sout(result);
+ result.reserve(str.size());
+
+ auto unescapeResult = UnescapeArbitraryAtom(atom, quoteChar, &sout, &readBytes);
+
+ if (unescapeResult == EUnescapeResult::OK) {
+ return true;
+ } else {
+ error = UnescapeResultToString(unescapeResult);
+ return false;
+ }
}
}
diff --git a/ydb/library/yql/minikql/jsonpath/ut/common_ut.cpp b/ydb/library/yql/minikql/jsonpath/ut/common_ut.cpp
index 6999564f71c..47a6c68458a 100644
--- a/ydb/library/yql/minikql/jsonpath/ut/common_ut.cpp
+++ b/ydb/library/yql/minikql/jsonpath/ut/common_ut.cpp
@@ -107,6 +107,10 @@ public:
{R"({"key": 123, "_another_28_key_$_": 456})", "$._another_28_key_$_", {"456"}},
{R"({"key": 123, "another_key": 456})", " $.another_key ", {"456"}},
+ {R"({"key": 123, "another_key": 456})", "$.key", {"123"}},
+ {R"({"k\"ey": 123, "another_key": 456})", "$.\"k\\\"ey\"", {"123"}},
+ {R"({"k\"ey": 123, "another_key": 456})", "$.'k\\\"ey'", {"123"}},
+
{R"({"key": 123, "another_key": 456})", "$.'key'", {"123"}},
{R"({"key": 123, "_another_28_key_$_": 456})", "$.'_another_28_key_$_'", {"456"}},
{R"({"key": 123, "another_key": 456})", " $.'another_key' ", {"456"}},
diff --git a/ydb/library/yql/minikql/jsonpath/ut/ya.make b/ydb/library/yql/minikql/jsonpath/ut/ya.make
index 2d34544b601..b70b7a77af1 100644
--- a/ydb/library/yql/minikql/jsonpath/ut/ya.make
+++ b/ydb/library/yql/minikql/jsonpath/ut/ya.make
@@ -15,9 +15,9 @@ PEERDIR(
library/cpp/json
ydb/library/binary_json
ydb/library/yql/minikql
- ydb/library/yql/minikql/computation
+ ydb/library/yql/minikql/computation/llvm
ydb/library/yql/minikql/dom
- ydb/library/yql/minikql/invoke_builtins
+ ydb/library/yql/minikql/invoke_builtins/llvm
ydb/library/yql/public/udf/service/exception_policy
ydb/library/yql/core/issue/protos
ydb/library/yql/sql/pg_dummy
diff --git a/ydb/library/yql/minikql/jsonpath/ya.make b/ydb/library/yql/minikql/jsonpath/ya.make
index de4f2682b6c..629d6246463 100644
--- a/ydb/library/yql/minikql/jsonpath/ya.make
+++ b/ydb/library/yql/minikql/jsonpath/ya.make
@@ -31,6 +31,7 @@ PEERDIR(
ydb/library/yql/minikql/dom
ydb/library/yql/public/issue
ydb/library/yql/public/udf
+ ydb/library/yql/ast
ydb/library/yql/utils
ydb/library/yql/core/issue/protos
ydb/library/yql/parser/proto_ast