Dandandan commented on a change in pull request #9305:
URL: https://github.com/apache/arrow/pull/9305#discussion_r563564784
##########
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:
I couldn't get the `None` compiling here.
----------------------------------------------------------------
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:
[email protected]