mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-19 16:20:50 +00:00
post-review changes
This commit is contained in:
parent
ad24989b31
commit
d5bea37c96
@ -17,6 +17,7 @@ namespace DB
|
|||||||
namespace ErrorCodes
|
namespace ErrorCodes
|
||||||
{
|
{
|
||||||
extern const int LOGICAL_ERROR;
|
extern const int LOGICAL_ERROR;
|
||||||
|
extern const int NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
class IDataType;
|
class IDataType;
|
||||||
|
@ -12,6 +12,11 @@
|
|||||||
namespace DB
|
namespace DB
|
||||||
{
|
{
|
||||||
|
|
||||||
|
namespace ErrorCodes
|
||||||
|
{
|
||||||
|
extern const int NOT_IMPLEMENTED;
|
||||||
|
}
|
||||||
|
|
||||||
/** Serialization for non-numeric non-string data types serialized as JSON strings
|
/** Serialization for non-numeric non-string data types serialized as JSON strings
|
||||||
* For these data types, we support an option, input_format_json_empty_as_default, which, when set to 1,
|
* For these data types, we support an option, input_format_json_empty_as_default, which, when set to 1,
|
||||||
* allows for JSON deserialization to treat an encountered empty string as a default value for the specified type.
|
* allows for JSON deserialization to treat an encountered empty string as a default value for the specified type.
|
||||||
|
@ -868,7 +868,7 @@ template <Strategy strategy>
|
|||||||
ReturnType<strategy> deserializeTextJSONImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested, bool & is_null)
|
ReturnType<strategy> deserializeTextJSONImpl(IColumn & column, ReadBuffer & istr, const FormatSettings & settings, const SerializationPtr & nested, bool & is_null)
|
||||||
{
|
{
|
||||||
auto check_for_null = [](ReadBuffer & buf){ return checkStringByFirstCharacterAndAssertTheRest("null", buf); };
|
auto check_for_null = [](ReadBuffer & buf){ return checkStringByFirstCharacterAndAssertTheRest("null", buf); };
|
||||||
auto deserialize_nested = [&nested, &settings](IColumn & nested_column, ReadBuffer & buf)
|
auto deserialize_nested = [&nested, &settings](IColumn & nested_column, ReadBuffer & buf) -> ReturnType<strategy>
|
||||||
{
|
{
|
||||||
if constexpr (strategy == Strategy::TryDeserialize)
|
if constexpr (strategy == Strategy::TryDeserialize)
|
||||||
return nested->tryDeserializeTextJSON(nested_column, buf, settings);
|
return nested->tryDeserializeTextJSON(nested_column, buf, settings);
|
||||||
|
@ -1,20 +1,47 @@
|
|||||||
|
-- Simple types
|
||||||
|
-- { echoOn }
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Date', '{"x":""}');
|
||||||
1970-01-01
|
1970-01-01
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Date32', '{"x":""}');
|
||||||
1970-01-01
|
1970-01-01
|
||||||
|
SELECT toTimeZone(x, 'UTC') FROM format(JSONEachRow, 'x DateTime', '{"x":""}');
|
||||||
1970-01-01 00:00:00
|
1970-01-01 00:00:00
|
||||||
|
SELECT toTimeZone(x, 'UTC') FROM format(JSONEachRow, 'x DateTime64', '{"x":""}');
|
||||||
1970-01-01 00:00:00.000
|
1970-01-01 00:00:00.000
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x IPv4', '{"x":""}');
|
||||||
0.0.0.0
|
0.0.0.0
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x IPv6', '{"x":""}');
|
||||||
::
|
::
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x UUID', '{"x":""}');
|
||||||
00000000-0000-0000-0000-000000000000
|
00000000-0000-0000-0000-000000000000
|
||||||
|
-- { echoOn }
|
||||||
|
SELECT COUNT(DISTINCT col) FROM table1;
|
||||||
1
|
1
|
||||||
|
-- { echoOn }
|
||||||
|
SELECT * FROM table1 ORDER BY address ASC;
|
||||||
::
|
::
|
||||||
2001:db8:3333:4444:5555:6666:7777:8888
|
2001:db8:3333:4444:5555:6666:7777:8888
|
||||||
|
-- Nullable
|
||||||
|
-- { echoOn }
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Nullable(IPv6)', '{"x":""}');
|
||||||
::
|
::
|
||||||
|
-- Compound types
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Array(UUID)', '{"x":["00000000-0000-0000-0000-000000000000","b15f852c-c41a-4fd6-9247-1929c841715e",""]}');
|
||||||
['00000000-0000-0000-0000-000000000000','b15f852c-c41a-4fd6-9247-1929c841715e','00000000-0000-0000-0000-000000000000']
|
['00000000-0000-0000-0000-000000000000','b15f852c-c41a-4fd6-9247-1929c841715e','00000000-0000-0000-0000-000000000000']
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Array(Nullable(IPv6))', '{"x":["",""]}');
|
||||||
['::','::']
|
['::','::']
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Tuple(Date, IPv4, String)', '{"x":["", "", "abc"]}');
|
||||||
('1970-01-01','0.0.0.0','abc')
|
('1970-01-01','0.0.0.0','abc')
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Map(String, IPv6)', '{"x":{"abc": ""}}');
|
||||||
{'abc':'::'}
|
{'abc':'::'}
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Variant(Date, UUID)', '{"x":""}');
|
||||||
00000000-0000-0000-0000-000000000000
|
00000000-0000-0000-0000-000000000000
|
||||||
|
-- Deep composition
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Array(Array(IPv6))', '{"x":[["2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF", ""], ["", "2001:db8:3333:4444:5555:6666:7777:8888"]]}');
|
||||||
[['2001:db8:3333:4444:cccc:dddd:eeee:ffff','::'],['::','2001:db8:3333:4444:5555:6666:7777:8888']]
|
[['2001:db8:3333:4444:cccc:dddd:eeee:ffff','::'],['::','2001:db8:3333:4444:5555:6666:7777:8888']]
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Variant(Date, Array(UUID))', '{"x":["", "b15f852c-c41a-4fd6-9247-1929c841715e"]}');
|
||||||
['00000000-0000-0000-0000-000000000000','b15f852c-c41a-4fd6-9247-1929c841715e']
|
['00000000-0000-0000-0000-000000000000','b15f852c-c41a-4fd6-9247-1929c841715e']
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Tuple(Array(UUID), Tuple(UUID, Map(String, IPv6)))', '{"x":[[""], ["",{"abc":""}]]}');
|
||||||
(['00000000-0000-0000-0000-000000000000'],('00000000-0000-0000-0000-000000000000',{'abc':'::'}))
|
(['00000000-0000-0000-0000-000000000000'],('00000000-0000-0000-0000-000000000000',{'abc':'::'}))
|
||||||
|
SELECT x FROM format(JSONEachRow, 'x Map(Tuple(Date,IPv4), Variant(UUID,IPv6))', '{"x":{["",""]:""}}');
|
||||||
{('1970-01-01','0.0.0.0'):'00000000-0000-0000-0000-000000000000'}
|
{('1970-01-01','0.0.0.0'):'00000000-0000-0000-0000-000000000000'}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
set input_format_json_empty_as_default = 1;
|
SET input_format_json_empty_as_default = 1, allow_experimental_variant_type = 1;
|
||||||
set allow_experimental_variant_type = 1;
|
|
||||||
|
|
||||||
# Simple types
|
-- Simple types
|
||||||
|
-- { echoOn }
|
||||||
SELECT x FROM format(JSONEachRow, 'x Date', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x Date', '{"x":""}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Date32', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x Date32', '{"x":""}');
|
||||||
SELECT toTimeZone(x, 'UTC') FROM format(JSONEachRow, 'x DateTime', '{"x":""}');
|
SELECT toTimeZone(x, 'UTC') FROM format(JSONEachRow, 'x DateTime', '{"x":""}');
|
||||||
@ -9,8 +9,9 @@ SELECT toTimeZone(x, 'UTC') FROM format(JSONEachRow, 'x DateTime64', '{"x":""}')
|
|||||||
SELECT x FROM format(JSONEachRow, 'x IPv4', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x IPv4', '{"x":""}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x IPv6', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x IPv6', '{"x":""}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x UUID', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x UUID', '{"x":""}');
|
||||||
|
-- { echoOff }
|
||||||
|
|
||||||
# Simple type AggregateFunction
|
-- Simple type AggregateFunction
|
||||||
DROP TABLE IF EXISTS table1;
|
DROP TABLE IF EXISTS table1;
|
||||||
CREATE TABLE table1(col AggregateFunction(uniq, UInt64)) ENGINE=Memory();
|
CREATE TABLE table1(col AggregateFunction(uniq, UInt64)) ENGINE=Memory();
|
||||||
DROP TABLE IF EXISTS table2;
|
DROP TABLE IF EXISTS table2;
|
||||||
@ -18,35 +19,41 @@ CREATE TABLE table2(UserID UInt64) ENGINE=Memory();
|
|||||||
|
|
||||||
INSERT INTO table1 SELECT uniqState(UserID) FROM table2;
|
INSERT INTO table1 SELECT uniqState(UserID) FROM table2;
|
||||||
INSERT INTO table1 SELECT x FROM format(JSONEachRow, 'x AggregateFunction(uniq, UInt64)' AS T, '{"x":""}');
|
INSERT INTO table1 SELECT x FROM format(JSONEachRow, 'x AggregateFunction(uniq, UInt64)' AS T, '{"x":""}');
|
||||||
|
|
||||||
|
-- { echoOn }
|
||||||
SELECT COUNT(DISTINCT col) FROM table1;
|
SELECT COUNT(DISTINCT col) FROM table1;
|
||||||
|
-- { echoOff }
|
||||||
|
|
||||||
DROP TABLE table1;
|
DROP TABLE table1;
|
||||||
DROP TABLE table2;
|
DROP TABLE table2;
|
||||||
|
|
||||||
# The setting input_format_defaults_for_omitted_fields determines the default value if enabled.
|
-- The setting input_format_defaults_for_omitted_fields determines the default value if enabled.
|
||||||
CREATE TABLE table1(address IPv6 DEFAULT toIPv6('2001:db8:3333:4444:5555:6666:7777:8888')) ENGINE=Memory();
|
CREATE TABLE table1(address IPv6 DEFAULT toIPv6('2001:db8:3333:4444:5555:6666:7777:8888')) ENGINE=Memory();
|
||||||
|
|
||||||
set input_format_defaults_for_omitted_fields = 0;
|
SET input_format_defaults_for_omitted_fields = 0;
|
||||||
INSERT INTO table1 FORMAT JSONEachRow {"address":""};
|
INSERT INTO table1 FORMAT JSONEachRow {"address":""};
|
||||||
|
|
||||||
set input_format_defaults_for_omitted_fields = 1;
|
SET input_format_defaults_for_omitted_fields = 1;
|
||||||
INSERT INTO table1 FORMAT JSONEachRow {"address":""};
|
INSERT INTO table1 FORMAT JSONEachRow {"address":""};
|
||||||
|
|
||||||
|
-- { echoOn }
|
||||||
SELECT * FROM table1 ORDER BY address ASC;
|
SELECT * FROM table1 ORDER BY address ASC;
|
||||||
|
-- { echoOff }
|
||||||
|
|
||||||
DROP TABLE table1;
|
DROP TABLE table1;
|
||||||
|
|
||||||
# Nullable
|
-- Nullable
|
||||||
|
-- { echoOn }
|
||||||
SELECT x FROM format(JSONEachRow, 'x Nullable(IPv6)', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x Nullable(IPv6)', '{"x":""}');
|
||||||
|
|
||||||
# Compound types
|
-- Compound types
|
||||||
SELECT x FROM format(JSONEachRow, 'x Array(UUID)', '{"x":["00000000-0000-0000-0000-000000000000","b15f852c-c41a-4fd6-9247-1929c841715e",""]}');
|
SELECT x FROM format(JSONEachRow, 'x Array(UUID)', '{"x":["00000000-0000-0000-0000-000000000000","b15f852c-c41a-4fd6-9247-1929c841715e",""]}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Array(Nullable(IPv6))', '{"x":["",""]}');
|
SELECT x FROM format(JSONEachRow, 'x Array(Nullable(IPv6))', '{"x":["",""]}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Tuple(Date, IPv4, String)', '{"x":["", "", "abc"]}');
|
SELECT x FROM format(JSONEachRow, 'x Tuple(Date, IPv4, String)', '{"x":["", "", "abc"]}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Map(String, IPv6)', '{"x":{"abc": ""}}');
|
SELECT x FROM format(JSONEachRow, 'x Map(String, IPv6)', '{"x":{"abc": ""}}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Variant(Date, UUID)', '{"x":""}');
|
SELECT x FROM format(JSONEachRow, 'x Variant(Date, UUID)', '{"x":""}');
|
||||||
|
|
||||||
# Deep composition
|
-- Deep composition
|
||||||
SELECT x FROM format(JSONEachRow, 'x Array(Array(IPv6))', '{"x":[["2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF", ""], ["", "2001:db8:3333:4444:5555:6666:7777:8888"]]}');
|
SELECT x FROM format(JSONEachRow, 'x Array(Array(IPv6))', '{"x":[["2001:db8:3333:4444:CCCC:DDDD:EEEE:FFFF", ""], ["", "2001:db8:3333:4444:5555:6666:7777:8888"]]}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Variant(Date, Array(UUID))', '{"x":["", "b15f852c-c41a-4fd6-9247-1929c841715e"]}');
|
SELECT x FROM format(JSONEachRow, 'x Variant(Date, Array(UUID))', '{"x":["", "b15f852c-c41a-4fd6-9247-1929c841715e"]}');
|
||||||
SELECT x FROM format(JSONEachRow, 'x Tuple(Array(UUID), Tuple(UUID, Map(String, IPv6)))', '{"x":[[""], ["",{"abc":""}]]}');
|
SELECT x FROM format(JSONEachRow, 'x Tuple(Array(UUID), Tuple(UUID, Map(String, IPv6)))', '{"x":[[""], ["",{"abc":""}]]}');
|
||||||
|
Loading…
Reference in New Issue
Block a user