diff --git a/dbms/src/DataTypes/DataTypeAggregateFunction.cpp b/dbms/src/DataTypes/DataTypeAggregateFunction.cpp index 896f7cc7b4a..4c6885832cb 100644 --- a/dbms/src/DataTypes/DataTypeAggregateFunction.cpp +++ b/dbms/src/DataTypes/DataTypeAggregateFunction.cpp @@ -195,7 +195,7 @@ void DataTypeAggregateFunction::deserializeTextQuoted(IColumn & column, ReadBuff } -void DataTypeAggregateFunction::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const +void DataTypeAggregateFunction::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const { writeJSONString(serializeToString(function, column, row_num), ostr); } diff --git a/dbms/src/DataTypes/DataTypeAggregateFunction.h b/dbms/src/DataTypes/DataTypeAggregateFunction.h index 0de4487ed70..c0518ba3bd9 100644 --- a/dbms/src/DataTypes/DataTypeAggregateFunction.h +++ b/dbms/src/DataTypes/DataTypeAggregateFunction.h @@ -54,7 +54,7 @@ public: void deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const override; void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/DataTypeArray.cpp b/dbms/src/DataTypes/DataTypeArray.cpp index 7ce4256e100..e7723b8fcd5 100644 --- a/dbms/src/DataTypes/DataTypeArray.cpp +++ b/dbms/src/DataTypes/DataTypeArray.cpp @@ -304,7 +304,7 @@ void DataTypeArray::deserializeTextQuoted(IColumn & column, ReadBuffer & istr) c } -void DataTypeArray::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool force_quoting_64bit_integers) const +void DataTypeArray::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const { const ColumnArray & column_array = static_cast(column); const ColumnArray::Offsets_t & offsets = column_array.getOffsets(); @@ -319,7 +319,7 @@ void DataTypeArray::serializeTextJSON(const IColumn & column, size_t row_num, Wr { if (i != offset) writeChar(',', ostr); - nested->serializeTextJSON(nested_column, i, ostr, force_quoting_64bit_integers); + nested->serializeTextJSON(nested_column, i, ostr, settings); } writeChar(']', ostr); } diff --git a/dbms/src/DataTypes/DataTypeArray.h b/dbms/src/DataTypes/DataTypeArray.h index 86db00f943e..0b8358102ad 100644 --- a/dbms/src/DataTypes/DataTypeArray.h +++ b/dbms/src/DataTypes/DataTypeArray.h @@ -46,7 +46,7 @@ public: void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/DataTypeDate.cpp b/dbms/src/DataTypes/DataTypeDate.cpp index 7ca9ca72cd6..8c2f397f786 100644 --- a/dbms/src/DataTypes/DataTypeDate.cpp +++ b/dbms/src/DataTypes/DataTypeDate.cpp @@ -46,7 +46,7 @@ void DataTypeDate::deserializeTextQuoted(IColumn & column, ReadBuffer & istr) co static_cast(column).getData().push_back(x); /// It's important to do this at the end - for exception safety. } -void DataTypeDate::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const +void DataTypeDate::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool, bool) const { writeChar('"', ostr); serializeText(column, row_num, ostr); diff --git a/dbms/src/DataTypes/DataTypeDate.h b/dbms/src/DataTypes/DataTypeDate.h index 582cffb9c44..647d2cdf208 100644 --- a/dbms/src/DataTypes/DataTypeDate.h +++ b/dbms/src/DataTypes/DataTypeDate.h @@ -19,7 +19,7 @@ public: void deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const override; void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override; diff --git a/dbms/src/DataTypes/DataTypeDateTime.cpp b/dbms/src/DataTypes/DataTypeDateTime.cpp index 94624c9e789..16c76c59a7c 100644 --- a/dbms/src/DataTypes/DataTypeDateTime.cpp +++ b/dbms/src/DataTypes/DataTypeDateTime.cpp @@ -46,7 +46,7 @@ void DataTypeDateTime::deserializeTextQuoted(IColumn & column, ReadBuffer & istr static_cast(column).getData().push_back(x); /// It's important to do this at the end - for exception safety. } -void DataTypeDateTime::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const +void DataTypeDateTime::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const { writeChar('"', ostr); serializeText(column, row_num, ostr); diff --git a/dbms/src/DataTypes/DataTypeDateTime.h b/dbms/src/DataTypes/DataTypeDateTime.h index 81de9750dc0..05d90c4cfb6 100644 --- a/dbms/src/DataTypes/DataTypeDateTime.h +++ b/dbms/src/DataTypes/DataTypeDateTime.h @@ -19,7 +19,7 @@ public: void deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const override; void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override; diff --git a/dbms/src/DataTypes/DataTypeEnum.cpp b/dbms/src/DataTypes/DataTypeEnum.cpp index 3919f72ba6c..eac459af4e2 100644 --- a/dbms/src/DataTypes/DataTypeEnum.cpp +++ b/dbms/src/DataTypes/DataTypeEnum.cpp @@ -167,7 +167,7 @@ void DataTypeEnum::deserializeTextQuoted(IColumn & column, ReadBuffer & is } template -void DataTypeEnum::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const +void DataTypeEnum::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const { writeJSONString(getNameForValue(static_cast(column).getData()[row_num]), ostr); } diff --git a/dbms/src/DataTypes/DataTypeEnum.h b/dbms/src/DataTypes/DataTypeEnum.h index 24d0469185c..14dee6170c6 100644 --- a/dbms/src/DataTypes/DataTypeEnum.h +++ b/dbms/src/DataTypes/DataTypeEnum.h @@ -93,7 +93,7 @@ public: void deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const override; void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/DataTypeFixedString.cpp b/dbms/src/DataTypes/DataTypeFixedString.cpp index 4d23f41a54f..c2c2132e207 100644 --- a/dbms/src/DataTypes/DataTypeFixedString.cpp +++ b/dbms/src/DataTypes/DataTypeFixedString.cpp @@ -159,7 +159,7 @@ void DataTypeFixedString::deserializeTextQuoted(IColumn & column, ReadBuffer & i } -void DataTypeFixedString::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const +void DataTypeFixedString::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const { const char * pos = reinterpret_cast(&static_cast(column).getChars()[n * row_num]); writeJSONString(pos, pos + n, ostr); diff --git a/dbms/src/DataTypes/DataTypeFixedString.h b/dbms/src/DataTypes/DataTypeFixedString.h index bb873d96e3e..6588111853e 100644 --- a/dbms/src/DataTypes/DataTypeFixedString.h +++ b/dbms/src/DataTypes/DataTypeFixedString.h @@ -52,7 +52,7 @@ public: void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/DataTypeNull.cpp b/dbms/src/DataTypes/DataTypeNull.cpp index 019aa7d44de..cb1ba7272ef 100644 --- a/dbms/src/DataTypes/DataTypeNull.cpp +++ b/dbms/src/DataTypes/DataTypeNull.cpp @@ -108,8 +108,7 @@ void DataTypeNull::serializeText(const IColumn & column, size_t row_num, WriteBu writeCString("NULL", ostr); } -void DataTypeNull::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, - bool force_quoting_64bit_integers) const +void DataTypeNull::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const { writeCString("null", ostr); } diff --git a/dbms/src/DataTypes/DataTypeNull.h b/dbms/src/DataTypes/DataTypeNull.h index 733524a8396..d58ecfff77d 100644 --- a/dbms/src/DataTypes/DataTypeNull.h +++ b/dbms/src/DataTypes/DataTypeNull.h @@ -60,7 +60,7 @@ public: void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override; void serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool force_quoting_64bit_integers) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; }; diff --git a/dbms/src/DataTypes/DataTypeNullable.cpp b/dbms/src/DataTypes/DataTypeNullable.cpp index ccce484d10a..8c475a080f6 100644 --- a/dbms/src/DataTypes/DataTypeNullable.cpp +++ b/dbms/src/DataTypes/DataTypeNullable.cpp @@ -192,16 +192,14 @@ void DataTypeNullable::serializeText(const IColumn & column, size_t row_num, Wri nested_data_type->serializeText(*col.getNestedColumn(), row_num, ostr); } -void DataTypeNullable::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, - bool force_quoting_64bit_integers) const +void DataTypeNullable::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const { const ColumnNullable & col = static_cast(column); if (col.isNullAt(row_num)) writeCString("null", ostr); else - nested_data_type->serializeTextJSON(*col.getNestedColumn(), row_num, ostr, - force_quoting_64bit_integers); + nested_data_type->serializeTextJSON(*col.getNestedColumn(), row_num, ostr, settings); } void DataTypeNullable::deserializeTextJSON(IColumn & column, ReadBuffer & istr) const diff --git a/dbms/src/DataTypes/DataTypeNullable.h b/dbms/src/DataTypes/DataTypeNullable.h index 261c4341ec0..5a43899b652 100644 --- a/dbms/src/DataTypes/DataTypeNullable.h +++ b/dbms/src/DataTypes/DataTypeNullable.h @@ -45,8 +45,7 @@ public: */ void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, - bool force_quoting_64bit_integers) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeText(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/DataTypeNumberBase.cpp b/dbms/src/DataTypes/DataTypeNumberBase.cpp index 7977f0d04db..78f3ed0f642 100644 --- a/dbms/src/DataTypes/DataTypeNumberBase.cpp +++ b/dbms/src/DataTypes/DataTypeNumberBase.cpp @@ -4,6 +4,7 @@ #include #include #include +#include namespace DB @@ -62,9 +63,9 @@ void DataTypeNumberBase::deserializeTextQuoted(IColumn & column, ReadBuffer & } template -void DataTypeNumberBase::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool force_quoting_64bit_integers) const +void DataTypeNumberBase::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const { - const bool need_quote = std::is_integral::value && (sizeof(T) == 8) && force_quoting_64bit_integers; + const bool need_quote = std::is_integral::value && (sizeof(T) == 8) && settings.force_quoting_64bit_integers; if (need_quote) writeChar('"', ostr); diff --git a/dbms/src/DataTypes/DataTypeNumberBase.h b/dbms/src/DataTypes/DataTypeNumberBase.h index 4cae7aaa2cd..267468a2e66 100644 --- a/dbms/src/DataTypes/DataTypeNumberBase.h +++ b/dbms/src/DataTypes/DataTypeNumberBase.h @@ -25,7 +25,7 @@ public: void deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const override; void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextCSV(IColumn & column, ReadBuffer & istr, const char delimiter) const override; diff --git a/dbms/src/DataTypes/DataTypeString.cpp b/dbms/src/DataTypes/DataTypeString.cpp index d9d95f2540c..5f1081b8c3c 100644 --- a/dbms/src/DataTypes/DataTypeString.cpp +++ b/dbms/src/DataTypes/DataTypeString.cpp @@ -266,7 +266,7 @@ void DataTypeString::deserializeTextQuoted(IColumn & column, ReadBuffer & istr) } -void DataTypeString::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const +void DataTypeString::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const { writeJSONString(static_cast(column).getDataAt(row_num), ostr); } diff --git a/dbms/src/DataTypes/DataTypeString.h b/dbms/src/DataTypes/DataTypeString.h index 37004dcfcd1..3e17d686f7d 100644 --- a/dbms/src/DataTypes/DataTypeString.h +++ b/dbms/src/DataTypes/DataTypeString.h @@ -39,7 +39,7 @@ public: void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/DataTypeTuple.cpp b/dbms/src/DataTypes/DataTypeTuple.cpp index 839e113a98c..9d26587862b 100644 --- a/dbms/src/DataTypes/DataTypeTuple.cpp +++ b/dbms/src/DataTypes/DataTypeTuple.cpp @@ -144,14 +144,14 @@ void DataTypeTuple::deserializeTextQuoted(IColumn & column, ReadBuffer & istr) c deserializeText(column, istr); } -void DataTypeTuple::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool force_quoting_64bit_integers) const +void DataTypeTuple::serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const { writeChar('[', ostr); for (const auto i : ext::range(0, ext::size(elems))) { if (i != 0) writeChar(',', ostr); - elems[i]->serializeTextJSON(extractElementColumn(column, i), row_num, ostr, force_quoting_64bit_integers); + elems[i]->serializeTextJSON(extractElementColumn(column, i), row_num, ostr, settings); } writeChar(']', ostr); } diff --git a/dbms/src/DataTypes/DataTypeTuple.h b/dbms/src/DataTypes/DataTypeTuple.h index d013f59648c..bf9d279faf7 100644 --- a/dbms/src/DataTypes/DataTypeTuple.h +++ b/dbms/src/DataTypes/DataTypeTuple.h @@ -31,7 +31,7 @@ public: void deserializeTextEscaped(IColumn & column, ReadBuffer & istr) const override; void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override; - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override; + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const override; void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override; void serializeTextXML(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override; diff --git a/dbms/src/DataTypes/IDataType.h b/dbms/src/DataTypes/IDataType.h index ad5b6639afe..242eb105e1d 100644 --- a/dbms/src/DataTypes/IDataType.h +++ b/dbms/src/DataTypes/IDataType.h @@ -13,6 +13,7 @@ class ReadBuffer; class WriteBuffer; class IDataType; +class FormatSettingsJSON; using DataTypePtr = std::shared_ptr; using DataTypes = std::vector; @@ -115,7 +116,7 @@ public: /** Text serialization intended for using in JSON format. * force_quoting_64bit_integers parameter forces to brace UInt64 and Int64 types into quotes. */ - virtual void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool force_quoting_64bit_integers) const = 0; + virtual void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON & settings) const = 0; virtual void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const = 0; /** Text serialization for putting into the XML format. diff --git a/dbms/src/DataTypes/IDataTypeDummy.h b/dbms/src/DataTypes/IDataTypeDummy.h index 01873f9cdde..7f7d9b7a63f 100644 --- a/dbms/src/DataTypes/IDataTypeDummy.h +++ b/dbms/src/DataTypes/IDataTypeDummy.h @@ -43,7 +43,7 @@ public: void serializeTextQuoted(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override { throwNoSerialization(); } void deserializeTextQuoted(IColumn & column, ReadBuffer & istr) const override { throwNoSerialization(); } - void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, bool) const override { throwNoSerialization(); } + void serializeTextJSON(const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettingsJSON &) const override { throwNoSerialization(); } void deserializeTextJSON(IColumn & column, ReadBuffer & istr) const override { throwNoSerialization(); } void serializeTextCSV(const IColumn & column, size_t row_num, WriteBuffer & ostr) const override { throwNoSerialization(); }