Added:
* IDataTypeDomain interface;
* method DataTypeFactory::registerDataTypeDomain for registering domains;
* DataTypeDomainWithSimpleSerialization domain base class with simple serialization/deserialization;
* Concrete IPv4 and IPv6 domain implementations: DataTypeDomanIPv6 and DataTypeDomanIPv4;
Updated:
* IDataType text serialization/deserialization methods;
* IDataType implementation to use domain for text serialization/deserialization;
* Refactored implementation of the IPv4/IPv6 functions to use formatIPv4/v6 and parseIPv4/v6 from Common/formatIPv6.h;
Tests:
* Added test cases for IPv4 and IPv6 domains.
* Updated IPv4/v6 functions tests to validate more cases;
* Added performance tests for IPv4 and IPv6 related functions;
The pre-existing optimization in the function
JSONEachRowRowInputStream::readColumnName() (that was extracted
during the refactoring step of PR#3144) imposed a restriction
on its usage - reading from the input stream might invalidate the return
value of that function, and this is what happenned in readJSONObject()
after the call to skipColonDelimiter().
One way of fixing the problem while preserving the original optimization
intact would be to defer the call to skipColonDelimiter() until the
variable name_ref was fully consumed, however that would result in worse
code (skipColonDelimiter() would need to be called in three different
places where it doesn't really belong).
Therefore I preferred to slightly weaken the optimization by always
copying the key name into the current_column_name data member.
By default mapping of nested json data to nested tables is disabled. To
enable the import of nested json data (into corresponding nested tables)
clickhouse must be run with the --input_format_import_nested_json=1
option.