mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-24 00:22:29 +00:00
disallow LowCardinality input type for JSONExtract
Workaraund for a memory corruption issue https://github.com/ClickHouse/ClickHouse/issues/61562 It seems that the root cause lies not within the parser itself, but rather either with the Columns/ColumnLowCardinality or Functions/IFunction code paths.
This commit is contained in:
parent
a31cf43499
commit
dcaa712451
@ -348,6 +348,7 @@ public:
|
|||||||
String getName() const override { return Name::name; }
|
String getName() const override { return Name::name; }
|
||||||
bool useDefaultImplementationForNulls() const override { return false; }
|
bool useDefaultImplementationForNulls() const override { return false; }
|
||||||
bool useDefaultImplementationForConstants() const override { return true; }
|
bool useDefaultImplementationForConstants() const override { return true; }
|
||||||
|
bool useDefaultImplementationForLowCardinalityColumns() const override { return false; }
|
||||||
|
|
||||||
ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override
|
ColumnPtr executeImpl(const ColumnsWithTypeAndName & arguments, const DataTypePtr & result_type, size_t input_rows_count) const override
|
||||||
{
|
{
|
||||||
@ -469,9 +470,6 @@ public:
|
|||||||
else
|
else
|
||||||
return_type = json_return_type;
|
return_type = json_return_type;
|
||||||
|
|
||||||
/// Top-level LowCardinality columns are processed outside JSON parser.
|
|
||||||
json_return_type = removeLowCardinality(json_return_type);
|
|
||||||
|
|
||||||
DataTypes argument_types;
|
DataTypes argument_types;
|
||||||
argument_types.reserve(arguments.size());
|
argument_types.reserve(arguments.size());
|
||||||
for (const auto & argument : arguments)
|
for (const auto & argument : arguments)
|
||||||
|
@ -69,6 +69,7 @@ hello
|
|||||||
(3333.6,'test')
|
(3333.6,'test')
|
||||||
(3333.6333333333,'test')
|
(3333.6333333333,'test')
|
||||||
(3333.6333333333,'test')
|
(3333.6333333333,'test')
|
||||||
|
\N
|
||||||
123456.1234 Decimal(20, 4)
|
123456.1234 Decimal(20, 4)
|
||||||
123456.1234 Decimal(20, 4)
|
123456.1234 Decimal(20, 4)
|
||||||
123456789012345.12 Decimal(30, 4)
|
123456789012345.12 Decimal(30, 4)
|
||||||
|
@ -81,6 +81,7 @@ SELECT JSONExtract('{"a":3333.6333333333333333333333, "b":"test"}', 'Tuple(a Dec
|
|||||||
SELECT JSONExtract('{"a":"3333.6333333333333333333333", "b":"test"}', 'Tuple(a Decimal(10,1), b LowCardinality(String))');
|
SELECT JSONExtract('{"a":"3333.6333333333333333333333", "b":"test"}', 'Tuple(a Decimal(10,1), b LowCardinality(String))');
|
||||||
SELECT JSONExtract('{"a":3333.6333333333333333333333, "b":"test"}', 'Tuple(a Decimal(20,10), b LowCardinality(String))');
|
SELECT JSONExtract('{"a":3333.6333333333333333333333, "b":"test"}', 'Tuple(a Decimal(20,10), b LowCardinality(String))');
|
||||||
SELECT JSONExtract('{"a":"3333.6333333333333333333333", "b":"test"}', 'Tuple(a Decimal(20,10), b LowCardinality(String))');
|
SELECT JSONExtract('{"a":"3333.6333333333333333333333", "b":"test"}', 'Tuple(a Decimal(20,10), b LowCardinality(String))');
|
||||||
|
SELECT JSONExtract(materialize('{"string_value":null}'), materialize('string_value'), 'LowCardinality(Nullable(String))');
|
||||||
SELECT JSONExtract('{"a":123456.123456}', 'a', 'Decimal(20, 4)') as a, toTypeName(a);
|
SELECT JSONExtract('{"a":123456.123456}', 'a', 'Decimal(20, 4)') as a, toTypeName(a);
|
||||||
SELECT JSONExtract('{"a":"123456.123456"}', 'a', 'Decimal(20, 4)') as a, toTypeName(a);
|
SELECT JSONExtract('{"a":"123456.123456"}', 'a', 'Decimal(20, 4)') as a, toTypeName(a);
|
||||||
SELECT JSONExtract('{"a":"123456789012345.12"}', 'a', 'Decimal(30, 4)') as a, toTypeName(a);
|
SELECT JSONExtract('{"a":"123456789012345.12"}', 'a', 'Decimal(30, 4)') as a, toTypeName(a);
|
||||||
@ -326,3 +327,4 @@ SELECT JSONExtract('[]', JSONExtract('0', 'UInt256'), 'UInt256'); -- { serverErr
|
|||||||
|
|
||||||
SELECT '--show error: key of map type should be String';
|
SELECT '--show error: key of map type should be String';
|
||||||
SELECT JSONExtract('{"a": [100.0, 200], "b": [-100, 200.0, 300]}', 'Map(Int64, Array(Float64))'); -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }
|
SELECT JSONExtract('{"a": [100.0, 200], "b": [-100, 200.0, 300]}', 'Map(Int64, Array(Float64))'); -- { serverError ILLEGAL_TYPE_OF_ARGUMENT }
|
||||||
|
SELECT JSONExtract(materialize(toLowCardinality('{"string_value":null}')), materialize('string_value'), 'LowCardinality(Nullable(String))'); -- {serverError ILLEGAL_TYPE_OF_ARGUMENT }
|
||||||
|
Loading…
Reference in New Issue
Block a user