Dandandan commented on a change in pull request #9305: URL: https://github.com/apache/arrow/pull/9305#discussion_r563566682
########## File path: rust/datafusion/src/scalar.rs ########## @@ -205,28 +205,104 @@ impl ScalarValue { ScalarValue::Boolean(e) => { Arc::new(BooleanArray::from(vec![*e; size])) as ArrayRef } - ScalarValue::Float64(e) => { - Arc::new(Float64Array::from(vec![*e; size])) as ArrayRef - } - ScalarValue::Float32(e) => Arc::new(Float32Array::from(vec![*e; size])), - ScalarValue::Int8(e) => Arc::new(Int8Array::from(vec![*e; size])), - ScalarValue::Int16(e) => Arc::new(Int16Array::from(vec![*e; size])), - ScalarValue::Int32(e) => Arc::new(Int32Array::from(vec![*e; size])), - ScalarValue::Int64(e) => Arc::new(Int64Array::from(vec![*e; size])), - ScalarValue::UInt8(e) => Arc::new(UInt8Array::from(vec![*e; size])), - ScalarValue::UInt16(e) => Arc::new(UInt16Array::from(vec![*e; size])), - ScalarValue::UInt32(e) => Arc::new(UInt32Array::from(vec![*e; size])), - ScalarValue::UInt64(e) => Arc::new(UInt64Array::from(vec![*e; size])), - ScalarValue::TimeMicrosecond(e) => { - Arc::new(TimestampMicrosecondArray::from(vec![*e])) - } - ScalarValue::TimeNanosecond(e) => { - Arc::new(TimestampNanosecondArray::from_opt_vec(vec![*e], None)) - } - ScalarValue::Utf8(e) => Arc::new(StringArray::from(vec![e.as_deref(); size])), - ScalarValue::LargeUtf8(e) => { - Arc::new(LargeStringArray::from(vec![e.as_deref(); size])) - } + ScalarValue::Float64(e) => match e { + Some(value) => { + Arc::new(Float64Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<Float64Array>()), + }, + ScalarValue::Float32(e) => match e { + Some(value) => { + Arc::new(Float32Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<Float32Array>()), + }, + ScalarValue::Int8(e) => match e { + Some(value) => { + Arc::new(Int8Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<Int8Array>()), + }, + ScalarValue::Int16(e) => match e { + Some(value) => { + Arc::new(Int16Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<Int16Array>()), + }, + ScalarValue::Int32(e) => match e { + Some(value) => { + Arc::new(Int32Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<Int32Array>()), + }, + ScalarValue::Int64(e) => match e { + Some(value) => { + Arc::new(Int64Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<Int64Array>()), + }, + ScalarValue::UInt8(e) => match e { + Some(value) => { + Arc::new(UInt8Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<UInt8Array>()), + }, + ScalarValue::UInt16(e) => match e { + Some(value) => { + Arc::new(UInt16Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<UInt16Array>()), + }, + ScalarValue::UInt32(e) => match e { + Some(value) => { + Arc::new(UInt32Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<UInt32Array>()), + }, + ScalarValue::UInt64(e) => match e { + Some(value) => { + Arc::new(UInt64Array::from_iter_values(repeat(*value).take(size))) + } + None => Arc::new(repeat(None).take(size).collect::<UInt64Array>()), + }, + ScalarValue::TimeMicrosecond(e) => match e { + Some(value) => Arc::new(TimestampMicrosecondArray::from_iter_values( + repeat(*value).take(size), + )), + None => Arc::new( + repeat(None) + .take(size) + .collect::<TimestampMicrosecondArray>(), + ), + }, + ScalarValue::TimeNanosecond(e) => match e { + Some(value) => Arc::new(TimestampNanosecondArray::from_iter_values( + repeat(*value).take(size), + )), + None => Arc::new( + repeat(None) + .take(size) + .collect::<TimestampNanosecondArray>(), + ), + }, + ScalarValue::Utf8(e) => match e { + Some(value) => { + Arc::new(StringArray::from_iter_values(repeat(value).take(size))) + } + None => { + Arc::new(repeat(e.as_deref()).take(size).collect::<StringArray>()) Review comment: Updated. ---------------------------------------------------------------- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. For queries about this service, please contact Infrastructure at: us...@infra.apache.org