Parses a slice of [`StringRecords`] into a [RecordBatch]
(
rows: &StringRecords<'_>,
fields: &Fields,
metadata: Option<std::collections::HashMap<String, String>>,
projection: Option<&Vec<usize>>,
line_number: usize,
null_regex: &Null
| 680 | |
| 681 | /// Parses a slice of [`StringRecords`] into a [RecordBatch] |
| 682 | fn parse( |
| 683 | rows: &StringRecords<'_>, |
| 684 | fields: &Fields, |
| 685 | metadata: Option<std::collections::HashMap<String, String>>, |
| 686 | projection: Option<&Vec<usize>>, |
| 687 | line_number: usize, |
| 688 | null_regex: &NullRegex, |
| 689 | ) -> Result<RecordBatch, ArrowError> { |
| 690 | let projection: Vec<usize> = match projection { |
| 691 | Some(v) => v.clone(), |
| 692 | None => fields.iter().enumerate().map(|(i, _)| i).collect(), |
| 693 | }; |
| 694 | |
| 695 | let arrays: Result<Vec<ArrayRef>, _> = projection |
| 696 | .iter() |
| 697 | .map(|i| { |
| 698 | let i = *i; |
| 699 | let field = &fields[i]; |
| 700 | match field.data_type() { |
| 701 | DataType::Boolean => build_boolean_array(line_number, rows, i, null_regex), |
| 702 | DataType::Decimal32(precision, scale) => build_decimal_array::<Decimal32Type>( |
| 703 | line_number, |
| 704 | rows, |
| 705 | i, |
| 706 | *precision, |
| 707 | *scale, |
| 708 | null_regex, |
| 709 | ), |
| 710 | DataType::Decimal64(precision, scale) => build_decimal_array::<Decimal64Type>( |
| 711 | line_number, |
| 712 | rows, |
| 713 | i, |
| 714 | *precision, |
| 715 | *scale, |
| 716 | null_regex, |
| 717 | ), |
| 718 | DataType::Decimal128(precision, scale) => build_decimal_array::<Decimal128Type>( |
| 719 | line_number, |
| 720 | rows, |
| 721 | i, |
| 722 | *precision, |
| 723 | *scale, |
| 724 | null_regex, |
| 725 | ), |
| 726 | DataType::Decimal256(precision, scale) => build_decimal_array::<Decimal256Type>( |
| 727 | line_number, |
| 728 | rows, |
| 729 | i, |
| 730 | *precision, |
| 731 | *scale, |
| 732 | null_regex, |
| 733 | ), |
| 734 | DataType::Int8 => { |
| 735 | build_primitive_array::<Int8Type>(line_number, rows, i, null_regex) |
| 736 | } |
| 737 | DataType::Int16 => { |
| 738 | build_primitive_array::<Int16Type>(line_number, rows, i, null_regex) |
| 739 | } |