review fix

This commit is contained in:
KevinyhZou 2023-04-02 00:18:36 +08:00
parent 7d59f36336
commit da4ff587af
4 changed files with 13 additions and 15 deletions

View File

@ -4049,12 +4049,12 @@ SELECT sum(number) FROM numbers(10000000000) SETTINGS partial_result_on_first_ca
Possible values: `true`, `false` Possible values: `true`, `false`
Default value: `false` Default value: `false`
## function_return_type_allow_nullable ## function_json_value_return_type_allow_nullable
Control whether allow to return `NULL` when value is not exist for JSON_VALUE function. Control whether allow to return `NULL` when value is not exist for JSON_VALUE function.
```sql ```sql
SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_return_type_allow_nullable=true; SELECT JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true;
┌─JSON_VALUE('{"hello":"world"}', '$.b')─┐ ┌─JSON_VALUE('{"hello":"world"}', '$.b')─┐
│ ᴺᵁᴸᴸ │ │ ᴺᵁᴸᴸ │

View File

@ -42,7 +42,7 @@ public:
class Executor class Executor
{ {
public: public:
static ColumnPtr run(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count, uint32_t parse_depth, const bool & return_type_allow_complex) static ColumnPtr run(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count, uint32_t parse_depth, const ContextPtr & context)
{ {
MutableColumnPtr to{result_type->createColumn()}; MutableColumnPtr to{result_type->createColumn()};
to->reserve(input_rows_count); to->reserve(input_rows_count);
@ -126,7 +126,7 @@ public:
bool added_to_column = false; bool added_to_column = false;
if (document_ok) if (document_ok)
{ {
added_to_column = impl.insertResultToColumn(*to, document, res, return_type_allow_complex); added_to_column = impl.insertResultToColumn(*to, document, res, context);
} }
if (!added_to_column) if (!added_to_column)
{ {
@ -168,11 +168,9 @@ public:
unsigned parse_depth = static_cast<unsigned>(getContext()->getSettingsRef().max_parser_depth); unsigned parse_depth = static_cast<unsigned>(getContext()->getSettingsRef().max_parser_depth);
#if USE_SIMDJSON #if USE_SIMDJSON
if (getContext()->getSettingsRef().allow_simdjson) if (getContext()->getSettingsRef().allow_simdjson)
return FunctionSQLJSONHelpers::Executor<Name, Impl, SimdJSONParser>::run(arguments, result_type, input_rows_count, parse_depth, return FunctionSQLJSONHelpers::Executor<Name, Impl, SimdJSONParser>::run(arguments, result_type, input_rows_count, parse_depth, getContext());
getContext()->getSettingsRef().function_json_value_return_type_allow_complex);
#endif #endif
return FunctionSQLJSONHelpers::Executor<Name, Impl, DummyJSONParser>::run(arguments, result_type, input_rows_count, parse_depth, return FunctionSQLJSONHelpers::Executor<Name, Impl, DummyJSONParser>::run(arguments, result_type, input_rows_count, parse_depth, getContext());
getContext()->getSettingsRef().function_json_value_return_type_allow_complex);
} }
}; };
@ -201,7 +199,7 @@ public:
static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; } static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; }
static bool insertResultToColumn(IColumn & dest, const Element & root, ASTPtr & query_ptr, const bool &) static bool insertResultToColumn(IColumn & dest, const Element & root, ASTPtr & query_ptr, const ContextPtr &)
{ {
GeneratorJSONPath<JSONParser> generator_json_path(query_ptr); GeneratorJSONPath<JSONParser> generator_json_path(query_ptr);
Element current_element = root; Element current_element = root;
@ -238,7 +236,7 @@ public:
static DataTypePtr getReturnType(const char *, const ColumnsWithTypeAndName &, const ContextPtr & context) static DataTypePtr getReturnType(const char *, const ColumnsWithTypeAndName &, const ContextPtr & context)
{ {
if (context->getSettingsRef().function_return_type_allow_nullable) if (context->getSettingsRef().function_json_value_return_type_allow_nullable)
{ {
DataTypePtr string_type = std::make_shared<DataTypeString>(); DataTypePtr string_type = std::make_shared<DataTypeString>();
return std::make_shared<DataTypeNullable>(string_type); return std::make_shared<DataTypeNullable>(string_type);
@ -251,7 +249,7 @@ public:
static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; } static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; }
static bool insertResultToColumn(IColumn & dest, const Element & root, ASTPtr & query_ptr, const bool & return_type_allow_complex) static bool insertResultToColumn(IColumn & dest, const Element & root, ASTPtr & query_ptr, const ContextPtr & context)
{ {
GeneratorJSONPath<JSONParser> generator_json_path(query_ptr); GeneratorJSONPath<JSONParser> generator_json_path(query_ptr);
Element current_element = root; Element current_element = root;
@ -261,7 +259,7 @@ public:
{ {
if (status == VisitorStatus::Ok) if (status == VisitorStatus::Ok)
{ {
if (return_type_allow_complex) if (context->getSettingsRef().function_json_value_return_type_allow_complex)
{ {
break; break;
} }
@ -328,7 +326,7 @@ public:
static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; } static size_t getNumberOfIndexArguments(const ColumnsWithTypeAndName & arguments) { return arguments.size() - 1; }
static bool insertResultToColumn(IColumn & dest, const Element & root, ASTPtr & query_ptr, const bool &) static bool insertResultToColumn(IColumn & dest, const Element & root, ASTPtr & query_ptr, const ContextPtr &)
{ {
GeneratorJSONPath<JSONParser> generator_json_path(query_ptr); GeneratorJSONPath<JSONParser> generator_json_path(query_ptr);
Element current_element = root; Element current_element = root;

View File

@ -31,7 +31,7 @@ select JSON_VALUE('{"a":"\\n\\u0000"}', '$.a');
\n\0 \n\0
select JSON_VALUE('{"a":"\\u263a"}', '$.a'); select JSON_VALUE('{"a":"\\u263a"}', '$.a');
select JSON_VALUE('{"hello":"world"}', '$.b') settings function_return_type_allow_nullable=true; select JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true;
\N \N
select JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true; select JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true;
{"world":"!"} {"world":"!"}

View File

@ -17,7 +17,7 @@ SELECT JSON_VALUE('{"hello":"\\uD83C\\uDF3A \\uD83C\\uDF38 \\uD83C\\uDF37 Hello,
SELECT JSON_VALUE('{"a":"Hello \\"World\\" \\\\"}', '$.a'); SELECT JSON_VALUE('{"a":"Hello \\"World\\" \\\\"}', '$.a');
select JSON_VALUE('{"a":"\\n\\u0000"}', '$.a'); select JSON_VALUE('{"a":"\\n\\u0000"}', '$.a');
select JSON_VALUE('{"a":"\\u263a"}', '$.a'); select JSON_VALUE('{"a":"\\u263a"}', '$.a');
select JSON_VALUE('{"hello":"world"}', '$.b') settings function_return_type_allow_nullable=true; select JSON_VALUE('{"hello":"world"}', '$.b') settings function_json_value_return_type_allow_nullable=true;
select JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true; select JSON_VALUE('{"hello":{"world":"!"}}', '$.hello') settings function_json_value_return_type_allow_complex=true;
SELECT JSON_VALUE('{"hello":["world","world2"]}', '$.hello') settings function_json_value_return_type_allow_complex=true; SELECT JSON_VALUE('{"hello":["world","world2"]}', '$.hello') settings function_json_value_return_type_allow_complex=true;