diff --git a/dbms/src/Functions/FunctionsJSON.cpp b/dbms/src/Functions/FunctionsJSON.cpp index cf26a5fb50c..b542e803e21 100644 --- a/dbms/src/Functions/FunctionsJSON.cpp +++ b/dbms/src/Functions/FunctionsJSON.cpp @@ -24,7 +24,7 @@ public: class JSONHasImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonHas"}; + static constexpr auto name{"JSONHas"}; static Field getValue(ParsedJson::iterator &) { return {1}; } }; @@ -32,7 +32,7 @@ public: class JSONLengthImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonLength"}; + static constexpr auto name{"JSONLength"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -57,7 +57,7 @@ public: class JSONTypeImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonType"}; + static constexpr auto name{"JSONType"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -88,7 +88,7 @@ public: class JSONExtractImpl { public: - static constexpr auto name{"jsonExtract"}; + static constexpr auto name{"JSONExtract"}; static DataTypePtr getType(const DataTypePtr & type) { @@ -243,7 +243,7 @@ public: class JSONExtractUIntImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonExtractUInt"}; + static constexpr auto name{"JSONExtractUInt"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -257,7 +257,7 @@ public: class JSONExtractIntImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonExtractInt"}; + static constexpr auto name{"JSONExtractInt"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -271,7 +271,7 @@ public: class JSONExtractFloatImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonExtractFloat"}; + static constexpr auto name{"JSONExtractFloat"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -285,7 +285,7 @@ public: class JSONExtractBoolImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonExtractBool"}; + static constexpr auto name{"JSONExtractBool"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -301,7 +301,7 @@ public: // class JSONExtractRawImpl: public JSONNullableImplBase // { // public: -// static constexpr auto name {"jsonExtractRaw"}; +// static constexpr auto name {"JSONExtractRaw"}; // static Field getValue(ParsedJson::iterator & pjh) // { @@ -312,7 +312,7 @@ public: class JSONExtractStringImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonExtractString"}; + static constexpr auto name{"JSONExtractString"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -326,7 +326,7 @@ public: class JSONExtractKeyImpl : public JSONNullableImplBase { public: - static constexpr auto name{"jsonExtractKey"}; + static constexpr auto name{"JSONExtractKey"}; static Field getValue(ParsedJson::iterator & pjh) { @@ -341,17 +341,17 @@ public: #else namespace DB { -struct JSONHasImpl { static constexpr auto name{"jsonHas"}; }; -struct JSONLengthImpl { static constexpr auto name{"jsonLength"}; }; -struct JSONTypeImpl { static constexpr auto name{"jsonType"}; }; -struct JSONExtractImpl { static constexpr auto name{"jsonExtract"}; }; -struct JSONExtractUIntImpl { static constexpr auto name{"jsonExtractUInt"}; }; -struct JSONExtractIntImpl { static constexpr auto name{"jsonExtractInt"}; }; -struct JSONExtractFloatImpl { static constexpr auto name{"jsonExtractFloat"}; }; -struct JSONExtractBoolImpl { static constexpr auto name{"jsonExtractBool"}; }; -//struct JSONExtractRawImpl { static constexpr auto name {"jsonExtractRaw"}; }; -struct JSONExtractStringImpl { static constexpr auto name{"jsonExtractString"}; }; -struct JSONExtractKeyImpl { static constexpr auto name{"jsonExtractKey"}; }; +struct JSONHasImpl { static constexpr auto name{"JSONHas"}; }; +struct JSONLengthImpl { static constexpr auto name{"JSONLength"}; }; +struct JSONTypeImpl { static constexpr auto name{"JSONType"}; }; +struct JSONExtractImpl { static constexpr auto name{"JSONExtract"}; }; +struct JSONExtractUIntImpl { static constexpr auto name{"JSONExtractUInt"}; }; +struct JSONExtractIntImpl { static constexpr auto name{"JSONExtractInt"}; }; +struct JSONExtractFloatImpl { static constexpr auto name{"JSONExtractFloat"}; }; +struct JSONExtractBoolImpl { static constexpr auto name{"JSONExtractBool"}; }; +//struct JSONExtractRawImpl { static constexpr auto name {"JSONExtractRaw"}; }; +struct JSONExtractStringImpl { static constexpr auto name{"JSONExtractString"}; }; +struct JSONExtractKeyImpl { static constexpr auto name{"JSONExtractKey"}; }; } #endif diff --git a/dbms/tests/queries/0_stateless/00918_json_functions_avx2.sql b/dbms/tests/queries/0_stateless/00918_json_functions_avx2.sql index 9cfd2972474..3d4f63b854f 100644 --- a/dbms/tests/queries/0_stateless/00918_json_functions_avx2.sql +++ b/dbms/tests/queries/0_stateless/00918_json_functions_avx2.sql @@ -1,19 +1,19 @@ -select jsonLength('{"a": "hello", "b": [-100, 200.0, 300]}'); -select jsonType('{"a": "hello", "b": [-100, 200.0, 300]}'); -select jsonHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'a'); -select jsonHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b'); -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1); -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 2); -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -1); -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -2); -select jsonExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 1); -select jsonExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a'); -select jsonLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b'); -select jsonType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b'); -select jsonExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1); -select jsonExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2); -select jsonExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1); -select jsonExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, String, String, Array(Float64))'); -select jsonExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Array(Int32)', 'b'); -select jsonExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Array(String)'); -select jsonExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Array(Tuple(Int16, Float32, UInt8))'); +SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}'); +SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}'); +SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'a'); +SELECT JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b'); +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1); +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 2); +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -1); +SELECT JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -2); +SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 1); +SELECT JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a'); +SELECT JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b'); +SELECT JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b'); +SELECT JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1); +SELECT JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2); +SELECT JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1); +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, String, String, Array(Float64))'); +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Array(Int32)', 'b'); +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Array(String)'); +SELECT JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Array(Tuple(Int16, Float32, UInt8))'); diff --git a/docs/en/query_language/functions/json_functions.md b/docs/en/query_language/functions/json_functions.md index cfdde3c0685..38a6a6f7404 100644 --- a/docs/en/query_language/functions/json_functions.md +++ b/docs/en/query_language/functions/json_functions.md @@ -60,7 +60,7 @@ There is currently no support for code points in the format `\uXXXX\uYYYY` that The following functions are based on [simdjson](https://github.com/lemire/simdjson) designed for more complex JSON parsing requirements. The assumption 2 mentioned above still applies. -## jsonHas(params[, accessors]...) +## JSONHas(params[, accessors]...) If the value exists in the JSON document, `1` will be returned. @@ -69,8 +69,8 @@ If the value does not exist, `null` will be returned. Examples: ``` -select jsonHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1 -select jsonHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = null +select JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 1 +select JSONHas('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 4) = null ``` An accessor can be either a string, a positive integer or a negative integer. @@ -84,14 +84,14 @@ You may use integers to access both JSON arrays and JSON objects. So, for example: ``` -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'a' -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 2) = 'b' -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -1) = 'b' -select jsonExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -2) = 'a' -select jsonExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'hello' +select JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'a' +select JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', 2) = 'b' +select JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -1) = 'b' +select JSONExtractKey('{"a": "hello", "b": [-100, 200.0, 300]}', -2) = 'a' +select JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 1) = 'hello' ``` -## jsonLength(params[, accessors]...) +## JSONLength(params[, accessors]...) Return the length of a JSON array or a JSON object. @@ -100,13 +100,13 @@ If the value does not exist or has a wrong type, `null` will be returned. Examples: ``` -select jsonLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3 -select jsonLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2 +select JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 3 +select JSONLength('{"a": "hello", "b": [-100, 200.0, 300]}') = 2 ``` The usage of accessors is the same as above. -## jsonType(params[, accessors]...) +## JSONType(params[, accessors]...) Return the type of a JSON value. @@ -115,18 +115,18 @@ If the value does not exist, `null` will be returned. Examples: ``` -select jsonType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object' -select jsonType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String' -select jsonType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array' +select JSONType('{"a": "hello", "b": [-100, 200.0, 300]}') = 'Object' +select JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'String' +select JSONType('{"a": "hello", "b": [-100, 200.0, 300]}', 'b') = 'Array' ``` The usage of accessors is the same as above. -## jsonExtractUInt(params[, accessors]...) -## jsonExtractInt(params[, accessors]...) -## jsonExtractFloat(params[, accessors]...) -## jsonExtractBool(params[, accessors]...) -## jsonExtractString(params[, accessors]...) +## JSONExtractUInt(params[, accessors]...) +## JSONExtractInt(params[, accessors]...) +## JSONExtractFloat(params[, accessors]...) +## JSONExtractBool(params[, accessors]...) +## JSONExtractString(params[, accessors]...) Parse data from JSON values which is similar to `visitParam` functions. @@ -135,15 +135,15 @@ If the value does not exist or has a wrong type, `null` will be returned. Examples: ``` -select jsonExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'hello' -select jsonExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) = -100 -select jsonExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) = 200.0 -select jsonExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) = 300 +select JSONExtractString('{"a": "hello", "b": [-100, 200.0, 300]}', 'a') = 'hello' +select JSONExtractInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 1) = -100 +select JSONExtractFloat('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', 2) = 200.0 +select JSONExtractUInt('{"a": "hello", "b": [-100, 200.0, 300]}', 'b', -1) = 300 ``` The usage of accessors is the same as above. -## jsonExtract(params, type[, accessors]...) +## JSONExtract(params, type[, accessors]...) Parse data from JSON values with a given ClickHouse data type. @@ -152,8 +152,8 @@ If the value does not exist or has a wrong type, `null` will be returned. Examples: ``` -select jsonExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Int8', 'b', 1) = -100 -select jsonExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, String, String, Array(Float64))') = ('a', 'hello', 'b', [-100.0, 200.0, 300.0]) +select JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Int8', 'b', 1) = -100 +select JSONExtract('{"a": "hello", "b": [-100, 200.0, 300]}', 'Tuple(String, String, String, Array(Float64))') = ('a', 'hello', 'b', [-100.0, 200.0, 300.0]) ``` The usage of accessors is the same as above.