Path: blob/main/crates/polars-plan/src/plans/functions/count.rs
8430 views
use super::*;12pub fn count_rows(3sources: &ScanSources,4scan_type: &FileScanIR,5alias: Option<PlSmallStr>,6) -> PolarsResult<DataFrame> {7feature_gated!("csv", {8let count: PolarsResult<usize> = match scan_type {9#[cfg(feature = "csv")]10FileScanIR::Csv { options } => count_all_rows_csv(sources, options),11_ => unreachable!(),12};13let count = count?;14let count: IdxSize = count.try_into().map_err(15|_| polars_err!(ComputeError: "count of {} exceeded maximum row size", count),16)?;17let column_name = alias.unwrap_or(PlSmallStr::from_static(crate::constants::LEN));1819Ok(unsafe { DataFrame::new_unchecked(1, vec![Column::new(column_name, [count])]) })20})21}2223#[cfg(feature = "csv")]24fn count_all_rows_csv(25sources: &ScanSources,26options: &polars_io::prelude::CsvReadOptions,27) -> PolarsResult<usize> {28let parse_options = options.get_parse_options();2930sources31.iter()32.map(|source| match source {33ScanSourceRef::Path(path) => polars_io::csv::read::count_rows(34path.clone(),35parse_options.quote_char,36parse_options.comment_prefix.as_ref(),37parse_options.eol_char,38options.has_header,39options.skip_lines,40options.skip_rows,41options.skip_rows_after_header,42),43_ => {44let memslice = source.to_memslice()?;4546polars_io::csv::read::count_rows_from_slice_par(47memslice,48parse_options.quote_char,49parse_options.comment_prefix.as_ref(),50parse_options.eol_char,51options.has_header,52options.skip_lines,53options.skip_rows,54options.skip_rows_after_header,55)56},57})58.sum()59}606162