@@ -162,43 +162,43 @@ template <typename T> class DataTypeNumber;
162162template <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