MCPcopy Create free account
hub / github.com/apache/datafusion / call_with_args

Method call_with_args

datafusion-cli/src/functions.rs:325–466  ·  view source on GitHub ↗
(&self, args: TableFunctionArgs)

Source from the content-addressed store, hash-verified

323
324impl TableFunctionImpl for ParquetMetadataFunc {
325 fn call_with_args(&self, args: TableFunctionArgs) -> Result<Arc<dyn TableProvider>> {
326 let exprs = args.exprs();
327 let filename = match exprs.first() {
328 Some(Expr::Literal(ScalarValue::Utf8(Some(s)), _)) => s, // single quote: parquet_metadata('x.parquet')
329 Some(Expr::Column(Column { name, .. })) => name, // double quote: parquet_metadata("x.parquet")
330 _ => {
331 return plan_err!(
332 "parquet_metadata requires string argument as its input"
333 );
334 }
335 };
336
337 let file = File::open(filename.clone())?;
338 let reader = SerializedFileReader::new(file)?;
339 let metadata = reader.metadata();
340
341 let schema = Arc::new(Schema::new(vec![
342 Field::new("filename", DataType::Utf8, true),
343 Field::new("row_group_id", DataType::Int64, true),
344 Field::new("row_group_num_rows", DataType::Int64, true),
345 Field::new("row_group_num_columns", DataType::Int64, true),
346 Field::new("row_group_bytes", DataType::Int64, true),
347 Field::new("column_id", DataType::Int64, true),
348 Field::new("file_offset", DataType::Int64, true),
349 Field::new("num_values", DataType::Int64, true),
350 Field::new("path_in_schema", DataType::Utf8, true),
351 Field::new("type", DataType::Utf8, true),
352 Field::new("stats_min", DataType::Utf8, true),
353 Field::new("stats_max", DataType::Utf8, true),
354 Field::new("stats_null_count", DataType::Int64, true),
355 Field::new("stats_distinct_count", DataType::Int64, true),
356 Field::new("stats_min_value", DataType::Utf8, true),
357 Field::new("stats_max_value", DataType::Utf8, true),
358 Field::new("compression", DataType::Utf8, true),
359 Field::new("encodings", DataType::Utf8, true),
360 Field::new("index_page_offset", DataType::Int64, true),
361 Field::new("dictionary_page_offset", DataType::Int64, true),
362 Field::new("data_page_offset", DataType::Int64, true),
363 Field::new("total_compressed_size", DataType::Int64, true),
364 Field::new("total_uncompressed_size", DataType::Int64, true),
365 ]));
366
367 // construct record batch from metadata
368 let mut filename_arr = vec![];
369 let mut row_group_id_arr = vec![];
370 let mut row_group_num_rows_arr = vec![];
371 let mut row_group_num_columns_arr = vec![];
372 let mut row_group_bytes_arr = vec![];
373 let mut column_id_arr = vec![];
374 let mut file_offset_arr = vec![];
375 let mut num_values_arr = vec![];
376 let mut path_in_schema_arr = vec![];
377 let mut type_arr = vec![];
378 let mut stats_min_arr = vec![];
379 let mut stats_max_arr = vec![];
380 let mut stats_null_count_arr = vec![];
381 let mut stats_distinct_count_arr = vec![];
382 let mut stats_min_value_arr = vec![];

Callers

nothing calls this directly

Calls 15

newFunction · 0.85
exprsMethod · 0.80
columnsMethod · 0.80
collectMethod · 0.80
get_list_files_cacheMethod · 0.80
StructClass · 0.50
firstMethod · 0.45
cloneMethod · 0.45
metadataMethod · 0.45

Tested by

no test coverage detected