@@ -920,7 +920,8 @@ bool SerializationVariant::tryDeserializeImpl(
920920 IColumn & column,
921921 const String & field,
922922 std::function<bool (ReadBuffer &)> check_for_null,
923- std::function<bool(IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer &)> try_deserialize_nested) const
923+ std::function<bool(IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer &, const FormatSettings &)> try_deserialize_nested,
924+ const FormatSettings & settings) const
924925{
925926 auto & column_variant = assert_cast<ColumnVariant &>(column);
926927 ReadBufferFromString null_buf (field);
@@ -930,12 +931,14 @@ bool SerializationVariant::tryDeserializeImpl(
930931 return true ;
931932 }
932933
934+ FormatSettings modified_settings = settings;
935+ modified_settings.allow_special_bool_values = settings.allow_special_bool_values_inside_variant ;
933936 for (size_t global_discr : deserialize_text_order)
934937 {
935938 ReadBufferFromString variant_buf (field);
936939 auto & variant_column = column_variant.getVariantByGlobalDiscriminator (global_discr);
937940 size_t prev_size = variant_column.size ();
938- if (try_deserialize_nested (variant_column, variants[global_discr], variant_buf) && variant_buf.eof ())
941+ if (try_deserialize_nested (variant_column, variants[global_discr], variant_buf, modified_settings ) && variant_buf.eof ())
939942 {
940943 column_variant.getLocalDiscriminators ().push_back (column_variant.localDiscriminatorByGlobal (global_discr));
941944 column_variant.getOffsets ().push_back (prev_size);
@@ -981,12 +984,12 @@ bool SerializationVariant::tryDeserializeTextEscapedImpl(DB::IColumn & column, c
981984 {
982985 return SerializationNullable::tryDeserializeNullEscaped (buf, settings);
983986 };
984- auto try_deserialize_variant =[& ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf)
987+ auto try_deserialize_variant = [ ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf, const FormatSettings & settings_ )
985988 {
986- return variant_serialization->tryDeserializeTextEscaped (variant_column, buf, settings );
989+ return variant_serialization->tryDeserializeTextEscaped (variant_column, buf, settings_ );
987990 };
988991
989- return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant);
992+ return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant, settings );
990993}
991994
992995void SerializationVariant::serializeTextRaw (const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
@@ -1020,12 +1023,12 @@ bool SerializationVariant::tryDeserializeTextRawImpl(DB::IColumn & column, const
10201023 {
10211024 return SerializationNullable::tryDeserializeNullRaw (buf, settings);
10221025 };
1023- auto try_deserialize_variant =[& ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf)
1026+ auto try_deserialize_variant = [ ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf, const FormatSettings & settings_ )
10241027 {
1025- return variant_serialization->tryDeserializeTextRaw (variant_column, buf, settings );
1028+ return variant_serialization->tryDeserializeTextRaw (variant_column, buf, settings_ );
10261029 };
10271030
1028- return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant);
1031+ return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant, settings );
10291032}
10301033
10311034void SerializationVariant::serializeTextQuoted (const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
@@ -1060,12 +1063,12 @@ bool SerializationVariant::tryDeserializeTextQuotedImpl(DB::IColumn & column, co
10601063 {
10611064 return SerializationNullable::tryDeserializeNullQuoted (buf);
10621065 };
1063- auto try_deserialize_variant =[& ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf)
1066+ auto try_deserialize_variant = [ ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf, const FormatSettings & settings_ )
10641067 {
1065- return variant_serialization->tryDeserializeTextQuoted (variant_column, buf, settings );
1068+ return variant_serialization->tryDeserializeTextQuoted (variant_column, buf, settings_ );
10661069 };
10671070
1068- return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant);
1071+ return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant, settings );
10691072}
10701073
10711074void SerializationVariant::serializeTextCSV (const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
@@ -1099,12 +1102,12 @@ bool SerializationVariant::tryDeserializeTextCSVImpl(DB::IColumn & column, const
10991102 {
11001103 return SerializationNullable::tryDeserializeNullCSV (buf, settings);
11011104 };
1102- auto try_deserialize_variant =[& ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf)
1105+ auto try_deserialize_variant = [ ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf, const FormatSettings & settings_ )
11031106 {
1104- return variant_serialization->tryDeserializeTextCSV (variant_column, buf, settings );
1107+ return variant_serialization->tryDeserializeTextCSV (variant_column, buf, settings_ );
11051108 };
11061109
1107- return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant);
1110+ return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant, settings );
11081111}
11091112
11101113void SerializationVariant::serializeText (const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
@@ -1138,12 +1141,12 @@ bool SerializationVariant::tryDeserializeWholeTextImpl(DB::IColumn & column, con
11381141 {
11391142 return SerializationNullable::tryDeserializeNullText (buf);
11401143 };
1141- auto try_deserialize_variant =[& ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf)
1144+ auto try_deserialize_variant = [ ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf, const FormatSettings & settings_ )
11421145 {
1143- return variant_serialization->tryDeserializeWholeText (variant_column, buf, settings );
1146+ return variant_serialization->tryDeserializeWholeText (variant_column, buf, settings_ );
11441147 };
11451148
1146- return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant);
1149+ return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant, settings );
11471150}
11481151
11491152void SerializationVariant::serializeTextJSON (const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
@@ -1188,12 +1191,12 @@ bool SerializationVariant::tryDeserializeTextJSONImpl(DB::IColumn & column, cons
11881191 {
11891192 return SerializationNullable::tryDeserializeNullJSON (buf);
11901193 };
1191- auto try_deserialize_variant =[& ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf)
1194+ auto try_deserialize_variant = [ ](IColumn & variant_column, const SerializationPtr & variant_serialization, ReadBuffer & buf, const FormatSettings & settings_ )
11921195 {
1193- return variant_serialization->tryDeserializeTextJSON (variant_column, buf, settings );
1196+ return variant_serialization->tryDeserializeTextJSON (variant_column, buf, settings_ );
11941197 };
11951198
1196- return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant);
1199+ return tryDeserializeImpl (column, field, check_for_null, try_deserialize_variant, settings );
11971200}
11981201
11991202void SerializationVariant::serializeTextXML (const IColumn & column, size_t row_num, WriteBuffer & ostr, const FormatSettings & settings) const
0 commit comments