summaryrefslogtreecommitdiffstats
path: root/yql/essentials/udfs/common/json2/test/cases
diff options
context:
space:
mode:
authorimunkin <[email protected]>2024-11-08 10:00:23 +0300
committerimunkin <[email protected]>2024-11-08 10:12:13 +0300
commita784a2f943d6e15caa6241e2e96d80aac6dbf375 (patch)
tree05f1e5366c916b988a8afb75bdab8ddeee0f6e6d /yql/essentials/udfs/common/json2/test/cases
parentd70137a7b530ccaa52834274913bbb5a3d1ca06e (diff)
Move yql/udfs/common/ to /yql/essentials YQL-19206
Except the following directories: * clickhouse/client * datetime * knn * roaring commit_hash:c7da95636144d28db109d6b17ddc762e9bacb59f
Diffstat (limited to 'yql/essentials/udfs/common/json2/test/cases')
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/AsJsonNode.sql9
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SerializeParse.sql15
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlExists.sql25
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlQuery.sql52
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlQueryError.cfg1
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlQueryError.sql7
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlTryExists.sql11
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.cfg1
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.sql7
-rw-r--r--yql/essentials/udfs/common/json2/test/cases/SqlValue.sql95
10 files changed, 223 insertions, 0 deletions
diff --git a/yql/essentials/udfs/common/json2/test/cases/AsJsonNode.sql b/yql/essentials/udfs/common/json2/test/cases/AsJsonNode.sql
new file mode 100644
index 00000000000..2d85d5576ce
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/AsJsonNode.sql
@@ -0,0 +1,9 @@
+SELECT
+ Json2::Utf8AsJsonNode(CAST("string" as Utf8)),
+ Json2::Utf8AsJsonNode(NULL),
+ Json2::DoubleAsJsonNode(1.2345),
+ Json2::DoubleAsJsonNode(NULL),
+ Json2::BoolAsJsonNode(true),
+ Json2::BoolAsJsonNode(NULL),
+ Json2::JsonAsJsonNode(CAST(@@{"key": 28}@@ as Json)),
+ Json2::JsonAsJsonNode(NULL);
diff --git a/yql/essentials/udfs/common/json2/test/cases/SerializeParse.sql b/yql/essentials/udfs/common/json2/test/cases/SerializeParse.sql
new file mode 100644
index 00000000000..1d5eb42d0cf
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SerializeParse.sql
@@ -0,0 +1,15 @@
+$id = ($json) -> { RETURN Json2::Serialize(Json2::Parse($json)); };
+
+SELECT
+ $id("[]"),
+ $id("{}"),
+ $id("[1, 3, 4, 5, 6]"),
+ $id(@@{"x": 1234}@@);
+
+$id_jd = ($json) -> { RETURN Json2::SerializeToJsonDocument(Json2::Parse($json)); };
+
+SELECT
+ $id_jd("[]"),
+ $id_jd("{}"),
+ $id_jd("[1, 3, 4, 5, 6]"),
+ $id_jd(@@{"x": 1234}@@);
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlExists.sql b/yql/essentials/udfs/common/json2/test/cases/SqlExists.sql
new file mode 100644
index 00000000000..34f475fe5a8
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlExists.sql
@@ -0,0 +1,25 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+
+-- Key exists
+SELECT
+ Json2::SqlExists(CAST(@@{"x": 123}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"x": {"key": "value"}}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"x": [1, 2, 3]}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"x": null}@@ as Json), $path, AsDict(), false);
+
+-- Key is missing
+SELECT
+ Json2::SqlExists(NULL, $path, AsDict(), false),
+ Json2::SqlExists(CAST(@@{"not_x": 123}@@ as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST("{}" as Json), $path, AsDict(), false),
+ Json2::SqlExists(CAST("[]" as Json), $path, AsDict(), false);
+
+-- Error handling
+$json = CAST("[]" as Json);
+
+SELECT
+ Json2::SqlExists($json, $path, AsDict(), false),
+ Json2::SqlExists($json, $path, AsDict(), true),
+ Json2::SqlExists($json, $path, AsDict(), NULL); \ No newline at end of file
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlQuery.sql b/yql/essentials/udfs/common/json2/test/cases/SqlQuery.sql
new file mode 100644
index 00000000000..38750aec512
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlQuery.sql
@@ -0,0 +1,52 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+$array = CAST("[]" as Json);
+$object = CAST("{}" as Json);
+
+-- Valid cases
+$nested_object = CAST(@@{"x": {"y": 123}}@@ as Json);
+$nested_array = CAST(@@{"x": [123, 456]}@@ as Json);
+SELECT
+ Json2::SqlQuery($nested_object, $path, AsDict(), false, $array, false, $object),
+ Json2::SqlQuery($nested_array, $path, AsDict(), false, $array, false, $object);
+
+-- Null handling
+SELECT
+ Json2::SqlQuery(NULL, $path, AsDict(), false, $array, false, $object);
+
+-- Errors
+$jsonpath_error = CAST(@@{"y": []}@@ as Json);
+SELECT
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, $array, false, NULL),
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, $array, false, $object),
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, $object, false, $array);
+
+$mismatch_error = CAST(@@{"x": 123}@@ as Json);
+SELECT
+ Json2::SqlQuery($mismatch_error, $path, AsDict(), false, $array, false, NULL),
+ Json2::SqlQuery($mismatch_error, $path, AsDict(), false, $array, false, $object),
+ Json2::SqlQuery($mismatch_error, $path, AsDict(), false, $object, false, $array);
+
+-- Wrap
+$nested_value = CAST(@@{"x": 123}@@ as Json);
+SELECT
+ Json2::SqlQueryWrap($nested_value, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryConditionalWrap($nested_value, $path, AsDict(), false, $object, false, $array);
+
+SELECT
+ Json2::SqlQuery($nested_object, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryWrap($nested_object, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryConditionalWrap($nested_object, $path, AsDict(), false, $object, false, $array);
+
+SELECT
+ Json2::SqlQuery($nested_array, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryWrap($nested_array, $path, AsDict(), false, $object, false, $array),
+ Json2::SqlQueryConditionalWrap($nested_array, $path, AsDict(), false, $object, false, $array);
+
+-- Wrap empty result
+$path_lax = Json2::CompilePath("lax $.x");
+SELECT
+ Json2::SqlQuery($object, $path_lax, AsDict(), false, $object, false, $object),
+ Json2::SqlQueryWrap($object, $path_lax, AsDict(), false, $object, false, $object),
+ Json2::SqlQueryConditionalWrap($object, $path_lax, AsDict(), false, $object, false, $object); \ No newline at end of file
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlQueryError.cfg b/yql/essentials/udfs/common/json2/test/cases/SqlQueryError.cfg
new file mode 100644
index 00000000000..eb2e5315d1e
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlQueryError.cfg
@@ -0,0 +1 @@
+xfail \ No newline at end of file
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlQueryError.sql b/yql/essentials/udfs/common/json2/test/cases/SqlQueryError.sql
new file mode 100644
index 00000000000..4aaa329fc06
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlQueryError.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+
+$jsonpath_error = CAST(@@{"y": []}@@ as Json);
+SELECT
+ Json2::SqlQuery($jsonpath_error, $path, AsDict(), false, NULL, true, NULL); \ No newline at end of file
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlTryExists.sql b/yql/essentials/udfs/common/json2/test/cases/SqlTryExists.sql
new file mode 100644
index 00000000000..f42bd5628db
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlTryExists.sql
@@ -0,0 +1,11 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+
+-- Key exists
+SELECT
+ Json2::SqlTryExists(NULL, $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": 123}@@ as Json), $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": {"key": "value"}}@@ as Json), $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": [1, 2, 3]}@@ as Json), $path, AsDict()),
+ Json2::SqlTryExists(CAST(@@{"x": null}@@ as Json), $path, AsDict());
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.cfg b/yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.cfg
new file mode 100644
index 00000000000..eb2e5315d1e
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.cfg
@@ -0,0 +1 @@
+xfail \ No newline at end of file
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.sql b/yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.sql
new file mode 100644
index 00000000000..3d0440b3cad
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlTryExistsError.sql
@@ -0,0 +1,7 @@
+/* syntax version 1 */
+
+$path = Json2::CompilePath("strict $.x");
+$json = CAST("[]" as Json);
+
+SELECT
+ Json2::SqlTryExists($json, $path, AsDict()); \ No newline at end of file
diff --git a/yql/essentials/udfs/common/json2/test/cases/SqlValue.sql b/yql/essentials/udfs/common/json2/test/cases/SqlValue.sql
new file mode 100644
index 00000000000..8f86edee795
--- /dev/null
+++ b/yql/essentials/udfs/common/json2/test/cases/SqlValue.sql
@@ -0,0 +1,95 @@
+/* syntax version 1 */
+
+-- Plain cases
+$path = Json2::CompilePath("strict $.x");
+$empty_object = CAST("{}" as Json);
+$empty_array = CAST("[]" as Json);
+$null_key = CAST(@@{
+ "x": null
+}@@ as Json);
+
+$string_json = CAST(@@{
+ "x": "some string value"
+}@@ as Json);
+SELECT
+ Json2::SqlValueUtf8($string_json, $path, AsDict()),
+ Json2::SqlValueUtf8($empty_object, $path, AsDict()),
+ Json2::SqlValueUtf8($empty_array, $path, AsDict()),
+ Json2::SqlValueUtf8($null_key, $path, AsDict()),
+ Json2::SqlValueUtf8(NULL, $path, AsDict());
+
+$int64_json = CAST(@@{
+ "x": 2856
+}@@ as Json);
+SELECT
+ Json2::SqlValueInt64($int64_json, $path, AsDict()),
+ Json2::SqlValueInt64($empty_object, $path, AsDict()),
+ Json2::SqlValueInt64($empty_array, $path, AsDict()),
+ Json2::SqlValueInt64($null_key, $path, AsDict()),
+ Json2::SqlValueInt64(NULL, $path, AsDict());
+
+$double_json = CAST(@@{
+ "x": 2.71828
+}@@ as Json);
+SELECT
+ Json2::SqlValueNumber($double_json, $path, AsDict()),
+ Json2::SqlValueNumber($empty_object, $path, AsDict()),
+ Json2::SqlValueNumber($empty_array, $path, AsDict()),
+ Json2::SqlValueNumber($null_key, $path, AsDict()),
+ Json2::SqlValueNumber(NULL, $path, AsDict());
+
+$bool_json = CAST(@@{
+ "x": true
+}@@ as Json);
+SELECT
+ Json2::SqlValueBool($bool_json, $path, AsDict()),
+ Json2::SqlValueBool($empty_object, $path, AsDict()),
+ Json2::SqlValueBool($empty_array, $path, AsDict()),
+ Json2::SqlValueBool($null_key, $path, AsDict()),
+ Json2::SqlValueBool(NULL, $path, AsDict());
+
+-- Convert cases
+SELECT
+ Json2::SqlValueConvertToUtf8($string_json, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8($int64_json, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8($double_json, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8($bool_json, $path, AsDict()),
+ -- NOTE: Here SQL null must be returned, not "null" string
+ Json2::SqlValueConvertToUtf8($null_key, $path, AsDict()),
+ Json2::SqlValueConvertToUtf8(NULL, $path, AsDict());
+
+-- Error cases
+SELECT
+ Json2::SqlValueUtf8($int64_json, $path, AsDict()),
+ Json2::SqlValueUtf8($double_json, $path, AsDict()),
+ Json2::SqlValueUtf8($bool_json, $path, AsDict());
+
+SELECT
+ Json2::SqlValueInt64($string_json, $path, AsDict()),
+ Json2::SqlValueInt64($double_json, $path, AsDict()),
+ Json2::SqlValueInt64($bool_json, $path, AsDict());
+
+SELECT
+ Json2::SqlValueNumber($string_json, $path, AsDict()),
+ -- NOTE: Here int64 is automatically converted to double as it is possible without precision loss
+ Json2::SqlValueNumber($int64_json, $path, AsDict()),
+ Json2::SqlValueNumber($bool_json, $path, AsDict());
+
+SELECT
+ Json2::SqlValueBool($string_json, $path, AsDict()),
+ Json2::SqlValueBool($int64_json, $path, AsDict()),
+ Json2::SqlValueBool($double_json, $path, AsDict());
+
+$nested_object_json = CAST(@@{
+ "x": {
+ "a": 1
+ }
+}@@ as Json);
+
+$nested_array_json = CAST(@@{
+ "x": [29, 32, "some string"]
+}@@ as Json);
+
+SELECT
+ Json2::SqlValueBool($nested_object_json, $path, AsDict()),
+ Json2::SqlValueBool($nested_array_json, $path, AsDict()); \ No newline at end of file