Skip to content

Commit 5fbfc19

Browse files
authored
Merge pull request ClickHouse#18445 from ClickHouse/fix_to_nullable_conversion
Try fix 'value is too short' when converting from String to Nullable(T)
2 parents 4561527 + c49a630 commit 5fbfc19

File tree

6 files changed

+188
-78
lines changed

6 files changed

+188
-78
lines changed

src/Core/callOnTypeIndex.h

Lines changed: 34 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -162,43 +162,43 @@ template <typename T> class DataTypeNumber;
162162
template <typename T> class DataTypeDecimal;
163163

164164

165-
template <typename T, typename F>
166-
bool callOnIndexAndDataType(TypeIndex number, F && f)
165+
template <typename T, typename F, typename... ExtraArgs>
166+
bool callOnIndexAndDataType(TypeIndex number, F && f, ExtraArgs && ... args)
167167
{
168168
switch (number)
169169
{
170-
case TypeIndex::UInt8: return f(TypePair<DataTypeNumber<UInt8>, T>());
171-
case TypeIndex::UInt16: return f(TypePair<DataTypeNumber<UInt16>, T>());
172-
case TypeIndex::UInt32: return f(TypePair<DataTypeNumber<UInt32>, T>());
173-
case TypeIndex::UInt64: return f(TypePair<DataTypeNumber<UInt64>, T>());
174-
case TypeIndex::UInt256: return f(TypePair<DataTypeNumber<UInt256>, T>());
175-
176-
case TypeIndex::Int8: return f(TypePair<DataTypeNumber<Int8>, T>());
177-
case TypeIndex::Int16: return f(TypePair<DataTypeNumber<Int16>, T>());
178-
case TypeIndex::Int32: return f(TypePair<DataTypeNumber<Int32>, T>());
179-
case TypeIndex::Int64: return f(TypePair<DataTypeNumber<Int64>, T>());
180-
case TypeIndex::Int128: return f(TypePair<DataTypeNumber<Int128>, T>());
181-
case TypeIndex::Int256: return f(TypePair<DataTypeNumber<Int256>, T>());
182-
183-
case TypeIndex::Float32: return f(TypePair<DataTypeNumber<Float32>, T>());
184-
case TypeIndex::Float64: return f(TypePair<DataTypeNumber<Float64>, T>());
185-
186-
case TypeIndex::Decimal32: return f(TypePair<DataTypeDecimal<Decimal32>, T>());
187-
case TypeIndex::Decimal64: return f(TypePair<DataTypeDecimal<Decimal64>, T>());
188-
case TypeIndex::Decimal128: return f(TypePair<DataTypeDecimal<Decimal128>, T>());
189-
case TypeIndex::Decimal256: return f(TypePair<DataTypeDecimal<Decimal256>, T>());
190-
191-
case TypeIndex::Date: return f(TypePair<DataTypeDate, T>());
192-
case TypeIndex::DateTime: return f(TypePair<DataTypeDateTime, T>());
193-
case TypeIndex::DateTime64: return f(TypePair<DataTypeDateTime64, T>());
194-
195-
case TypeIndex::String: return f(TypePair<DataTypeString, T>());
196-
case TypeIndex::FixedString: return f(TypePair<DataTypeFixedString, T>());
197-
198-
case TypeIndex::Enum8: return f(TypePair<DataTypeEnum<Int8>, T>());
199-
case TypeIndex::Enum16: return f(TypePair<DataTypeEnum<Int16>, T>());
200-
201-
case TypeIndex::UUID: return f(TypePair<DataTypeUUID, T>());
170+
case TypeIndex::UInt8: return f(TypePair<DataTypeNumber<UInt8>, T>(), std::forward<ExtraArgs>(args)...);
171+
case TypeIndex::UInt16: return f(TypePair<DataTypeNumber<UInt16>, T>(), std::forward<ExtraArgs>(args)...);
172+
case TypeIndex::UInt32: return f(TypePair<DataTypeNumber<UInt32>, T>(), std::forward<ExtraArgs>(args)...);
173+
case TypeIndex::UInt64: return f(TypePair<DataTypeNumber<UInt64>, T>(), std::forward<ExtraArgs>(args)...);
174+
case TypeIndex::UInt256: return f(TypePair<DataTypeNumber<UInt256>, T>(), std::forward<ExtraArgs>(args)...);
175+
176+
case TypeIndex::Int8: return f(TypePair<DataTypeNumber<Int8>, T>(), std::forward<ExtraArgs>(args)...);
177+
case TypeIndex::Int16: return f(TypePair<DataTypeNumber<Int16>, T>(), std::forward<ExtraArgs>(args)...);
178+
case TypeIndex::Int32: return f(TypePair<DataTypeNumber<Int32>, T>(), std::forward<ExtraArgs>(args)...);
179+
case TypeIndex::Int64: return f(TypePair<DataTypeNumber<Int64>, T>(), std::forward<ExtraArgs>(args)...);
180+
case TypeIndex::Int128: return f(TypePair<DataTypeNumber<Int128>, T>(), std::forward<ExtraArgs>(args)...);
181+
case TypeIndex::Int256: return f(TypePair<DataTypeNumber<Int256>, T>(), std::forward<ExtraArgs>(args)...);
182+
183+
case TypeIndex::Float32: return f(TypePair<DataTypeNumber<Float32>, T>(), std::forward<ExtraArgs>(args)...);
184+
case TypeIndex::Float64: return f(TypePair<DataTypeNumber<Float64>, T>(), std::forward<ExtraArgs>(args)...);
185+
186+
case TypeIndex::Decimal32: return f(TypePair<DataTypeDecimal<Decimal32>, T>(), std::forward<ExtraArgs>(args)...);
187+
case TypeIndex::Decimal64: return f(TypePair<DataTypeDecimal<Decimal64>, T>(), std::forward<ExtraArgs>(args)...);
188+
case TypeIndex::Decimal128: return f(TypePair<DataTypeDecimal<Decimal128>, T>(), std::forward<ExtraArgs>(args)...);
189+
case TypeIndex::Decimal256: return f(TypePair<DataTypeDecimal<Decimal256>, T>(), std::forward<ExtraArgs>(args)...);
190+
191+
case TypeIndex::Date: return f(TypePair<DataTypeDate, T>(), std::forward<ExtraArgs>(args)...);
192+
case TypeIndex::DateTime: return f(TypePair<DataTypeDateTime, T>(), std::forward<ExtraArgs>(args)...);
193+
case TypeIndex::DateTime64: return f(TypePair<DataTypeDateTime64, T>(), std::forward<ExtraArgs>(args)...);
194+
195+
case TypeIndex::String: return f(TypePair<DataTypeString, T>(), std::forward<ExtraArgs>(args)...);
196+
case TypeIndex::FixedString: return f(TypePair<DataTypeFixedString, T>(), std::forward<ExtraArgs>(args)...);
197+
198+
case TypeIndex::Enum8: return f(TypePair<DataTypeEnum<Int8>, T>(), std::forward<ExtraArgs>(args)...);
199+
case TypeIndex::Enum16: return f(TypePair<DataTypeEnum<Int16>, T>(), std::forward<ExtraArgs>(args)...);
200+
201+
case TypeIndex::UUID: return f(TypePair<DataTypeUUID, T>(), std::forward<ExtraArgs>(args)...);
202202

203203
default:
204204
break;

0 commit comments

Comments
 (0)