Skip to content

Commit e69c3b8

Browse files
committed
feat: numeric signature class
1 parent dd0fd88 commit e69c3b8

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

datafusion/expr-common/src/signature.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -215,8 +215,7 @@ pub enum TypeSignatureClass {
215215
Interval,
216216
Duration,
217217
Native(LogicalTypeRef),
218-
// TODO:
219-
// Numeric
218+
Numeric,
220219
Integer,
221220
}
222221

@@ -252,6 +251,13 @@ impl TypeSignatureClass {
252251
TypeSignatureClass::Duration => {
253252
vec![DataType::Duration(TimeUnit::Nanosecond)]
254253
}
254+
TypeSignatureClass::Numeric => {
255+
vec![
256+
DataType::Int64,
257+
DataType::Float64,
258+
DataType::Decimal256(3, -2),
259+
]
260+
}
255261
TypeSignatureClass::Integer => {
256262
vec![DataType::Int64]
257263
}
@@ -273,6 +279,7 @@ impl TypeSignatureClass {
273279
TypeSignatureClass::Time if logical_type.is_time() => true,
274280
TypeSignatureClass::Interval if logical_type.is_interval() => true,
275281
TypeSignatureClass::Duration if logical_type.is_duration() => true,
282+
TypeSignatureClass::Numeric if logical_type.is_numeric() => true,
276283
TypeSignatureClass::Integer if logical_type.is_integer() => true,
277284
_ => false,
278285
}
@@ -301,6 +308,9 @@ impl TypeSignatureClass {
301308
TypeSignatureClass::Duration if native_type.is_duration() => {
302309
Ok(origin_type.to_owned())
303310
}
311+
TypeSignatureClass::Numeric if native_type.is_numeric() => {
312+
Ok(origin_type.to_owned())
313+
}
304314
TypeSignatureClass::Integer if native_type.is_integer() => {
305315
Ok(origin_type.to_owned())
306316
}

0 commit comments

Comments
 (0)