Skip to content

Commit b9d7427

Browse files
committed
add test case
1 parent 562b68f commit b9d7427

File tree

2 files changed

+150
-130
lines changed

2 files changed

+150
-130
lines changed

datafusion/src/physical_plan/expressions/cast.rs

+84-54
Original file line numberDiff line numberDiff line change
@@ -129,9 +129,6 @@ pub fn cast_with_options(
129129
if expr_type == cast_type {
130130
Ok(expr.clone())
131131
} else if can_cast_types(&expr_type, &cast_type) {
132-
// TODO
133-
// support numeric data type to decimal
134-
// support one type decimal to another type decimal
135132
Ok(Arc::new(CastExpr::new(expr, cast_type, cast_options)))
136133
} else {
137134
Err(DataFusionError::Internal(format!(
@@ -222,87 +219,120 @@ mod tests {
222219

223220
#[test]
224221
fn test_cast_numeric_to_decimal() -> Result<()> {
222+
// int8
223+
generic_test_cast!(
224+
Int8Array,
225+
DataType::Int8,
226+
vec![1, 2, 3, 4, 5],
227+
DecimalArray,
228+
DataType::Decimal(3, 0),
229+
vec![
230+
Some(Decimal128(Some(1), 3, 0)),
231+
Some(Decimal128(Some(2), 3, 0)),
232+
Some(Decimal128(Some(3), 3, 0)),
233+
Some(Decimal128(Some(4), 3, 0)),
234+
Some(Decimal128(Some(5), 3, 0))
235+
],
236+
DEFAULT_DATAFUSION_CAST_OPTIONS
237+
);
238+
239+
// int16
240+
generic_test_cast!(
241+
Int16Array,
242+
DataType::Int16,
243+
vec![1, 2, 3, 4, 5],
244+
DecimalArray,
245+
DataType::Decimal(5, 0),
246+
vec![
247+
Some(Decimal128(Some(1), 5, 0)),
248+
Some(Decimal128(Some(2), 5, 0)),
249+
Some(Decimal128(Some(3), 5, 0)),
250+
Some(Decimal128(Some(4), 5, 0)),
251+
Some(Decimal128(Some(5), 5, 0))
252+
],
253+
DEFAULT_DATAFUSION_CAST_OPTIONS
254+
);
255+
225256
// int32
226257
generic_test_cast!(
227258
Int32Array,
228259
DataType::Int32,
229260
vec![1, 2, 3, 4, 5],
230-
// TODO
231-
UInt32Array,
232-
DataType::UInt32,
261+
DecimalArray,
262+
DataType::Decimal(10, 0),
233263
vec![
234-
Some(1_u32),
235-
Some(2_u32),
236-
Some(3_u32),
237-
Some(4_u32),
238-
Some(5_u32)
264+
Some(Decimal128(Some(1), 10, 0)),
265+
Some(Decimal128(Some(2), 10, 0)),
266+
Some(Decimal128(Some(3), 10, 0)),
267+
Some(Decimal128(Some(4), 10, 0)),
268+
Some(Decimal128(Some(5), 10, 0))
239269
],
240270
DEFAULT_DATAFUSION_CAST_OPTIONS
241271
);
272+
242273
// int64
243274
generic_test_cast!(
244-
Int32Array,
275+
Int64Array,
245276
DataType::Int64,
246277
vec![1, 2, 3, 4, 5],
247-
// TODO
248-
UInt32Array,
249-
DataType::UInt32,
278+
DecimalArray,
279+
DataType::Decimal(20, 0),
250280
vec![
251-
Some(1_u32),
252-
Some(2_u32),
253-
Some(3_u32),
254-
Some(4_u32),
255-
Some(5_u32)
281+
Some(Decimal128(Some(1), 20, 0)),
282+
Some(Decimal128(Some(2), 20, 0)),
283+
Some(Decimal128(Some(3), 20, 0)),
284+
Some(Decimal128(Some(4), 20, 0)),
285+
Some(Decimal128(Some(5), 20, 0))
256286
],
257287
DEFAULT_DATAFUSION_CAST_OPTIONS
258288
);
259-
// float32
289+
260290
generic_test_cast!(
261-
Int32Array,
262-
DataType::Float32,
291+
Int64Array,
292+
DataType::Int64,
263293
vec![1, 2, 3, 4, 5],
264-
// TODO
265-
UInt32Array,
266-
DataType::UInt32,
294+
DecimalArray,
295+
DataType::Decimal(20, 2),
267296
vec![
268-
Some(1_u32),
269-
Some(2_u32),
270-
Some(3_u32),
271-
Some(4_u32),
272-
Some(5_u32)
297+
Some(Decimal128(Some(100), 20, 2)),
298+
Some(Decimal128(Some(200), 20, 2)),
299+
Some(Decimal128(Some(300), 20, 2)),
300+
Some(Decimal128(Some(400), 20, 2)),
301+
Some(Decimal128(Some(500), 20, 2))
273302
],
274303
DEFAULT_DATAFUSION_CAST_OPTIONS
275304
);
276-
// float64
305+
306+
// float32
277307
generic_test_cast!(
278-
Int32Array,
279-
DataType::Float64,
280-
vec![1, 2, 3, 4, 5],
281-
// TODO
282-
UInt32Array,
283-
DataType::UInt32,
308+
Float32Array,
309+
DataType::Float32,
310+
vec![1.5, 2.5, 3, 1.123_456_8, 5.50],
311+
DecimalArray,
312+
DataType::Decimal(10, 2),
284313
vec![
285-
Some(1_u32),
286-
Some(2_u32),
287-
Some(3_u32),
288-
Some(4_u32),
289-
Some(5_u32)
314+
Some(Decimal128(Some(150), 20, 2)),
315+
Some(Decimal128(Some(250), 20, 2)),
316+
Some(Decimal128(Some(300), 20, 2)),
317+
Some(Decimal128(Some(112), 20, 2)),
318+
Some(Decimal128(Some(550), 20, 2))
290319
],
291320
DEFAULT_DATAFUSION_CAST_OPTIONS
292321
);
322+
323+
// float64
293324
generic_test_cast!(
294-
Int32Array,
295-
DataType::Decimal(10, 4),
296-
vec![1, 2, 3, 4, 5],
297-
// TODO
298-
UInt32Array,
299-
DataType::UInt32,
325+
Float64Array,
326+
DataType::Float64,
327+
vec![1.5, 2.5, 3, 1.123_456_8, 5.50],
328+
DecimalArray,
329+
DataType::Decimal(20, 4),
300330
vec![
301-
Some(1_u32),
302-
Some(2_u32),
303-
Some(3_u32),
304-
Some(4_u32),
305-
Some(5_u32)
331+
Some(Decimal128(Some(15000), 20, 4)),
332+
Some(Decimal128(Some(25000), 20, 4)),
333+
Some(Decimal128(Some(30000), 20, 4)),
334+
Some(Decimal128(Some(11234), 20, 4)),
335+
Some(Decimal128(Some(55000), 20, 4))
306336
],
307337
DEFAULT_DATAFUSION_CAST_OPTIONS
308338
);

0 commit comments

Comments
 (0)