polars_lazy/scan/
anonymous_scan.rs1use polars_core::prelude::*;
2use polars_io::{HiveOptions, RowIndex};
3use polars_utils::slice_enum::Slice;
4
5use crate::prelude::*;
6
7#[derive(Clone)]
8pub struct ScanArgsAnonymous {
9 pub infer_schema_length: Option<usize>,
10 pub schema: Option<SchemaRef>,
11 pub skip_rows: Option<usize>,
12 pub n_rows: Option<usize>,
13 pub row_index: Option<RowIndex>,
14 pub name: &'static str,
15}
16
17impl Default for ScanArgsAnonymous {
18 fn default() -> Self {
19 Self {
20 infer_schema_length: None,
21 skip_rows: None,
22 n_rows: None,
23 schema: None,
24 row_index: None,
25 name: "ANONYMOUS SCAN",
26 }
27 }
28}
29impl LazyFrame {
30 pub fn anonymous_scan(
31 function: Arc<dyn AnonymousScan>,
32 args: ScanArgsAnonymous,
33 ) -> PolarsResult<Self> {
34 let schema = match args.schema {
35 Some(s) => s,
36 None => function.schema(args.infer_schema_length)?,
37 };
38
39 let mut lf: LazyFrame = DslBuilder::anonymous_scan(
40 function,
41 AnonymousScanOptions {
42 skip_rows: args.skip_rows,
43 fmt_str: args.name,
44 },
45 UnifiedScanArgs {
46 schema: Some(schema),
47 cloud_options: None,
48 hive_options: HiveOptions::new_disabled(),
49 rechunk: false,
50 cache: false,
51 glob: false,
52 projection: None,
53 column_mapping: None,
54 default_values: None,
55 row_index: None,
56 pre_slice: args.n_rows.map(|len| Slice::Positive { offset: 0, len }),
57 cast_columns_policy: CastColumnsPolicy::ERROR_ON_MISMATCH,
58 missing_columns_policy: MissingColumnsPolicy::Raise,
59 extra_columns_policy: ExtraColumnsPolicy::Raise,
60 include_file_paths: None,
61 deletion_files: None,
62 },
63 )?
64 .build()
65 .into();
66
67 if let Some(rc) = args.row_index {
68 lf = lf.with_row_index(rc.name.clone(), Some(rc.offset))
69 };
70
71 Ok(lf)
72 }
73}