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

Function date_part_to_sql

datafusion/sql/src/unparser/utils.rs:444–520  ·  view source on GitHub ↗

Converts a date_part function to SQL, tailoring it to the supported date field extraction style.

(
    unparser: &Unparser,
    style: DateFieldExtractStyle,
    date_part_args: &[Expr],
)

Source from the content-addressed store, hash-verified

442
443/// Converts a date_part function to SQL, tailoring it to the supported date field extraction style.
444pub(crate) fn date_part_to_sql(
445 unparser: &Unparser,
446 style: DateFieldExtractStyle,
447 date_part_args: &[Expr],
448) -> Result<Option<ast::Expr>> {
449 match (style, date_part_args.len()) {
450 (DateFieldExtractStyle::Extract, 2) => {
451 let date_expr = unparser.expr_to_sql(&date_part_args[1])?;
452 if let Expr::Literal(ScalarValue::Utf8(Some(field)), _) = &date_part_args[0] {
453 let field = match field.to_lowercase().as_str() {
454 "year" => ast::DateTimeField::Year,
455 "month" => ast::DateTimeField::Month,
456 "day" => ast::DateTimeField::Day,
457 "hour" => ast::DateTimeField::Hour,
458 "minute" => ast::DateTimeField::Minute,
459 "second" => ast::DateTimeField::Second,
460 _ => return Ok(None),
461 };
462
463 return Ok(Some(ast::Expr::Extract {
464 field,
465 expr: Box::new(date_expr),
466 syntax: ast::ExtractSyntax::From,
467 }));
468 }
469 }
470 (DateFieldExtractStyle::Strftime, 2) => {
471 let column = unparser.expr_to_sql(&date_part_args[1])?;
472
473 if let Expr::Literal(ScalarValue::Utf8(Some(field)), _) = &date_part_args[0] {
474 let field = match field.to_lowercase().as_str() {
475 "year" => "%Y",
476 "month" => "%m",
477 "day" => "%d",
478 "hour" => "%H",
479 "minute" => "%M",
480 "second" => "%S",
481 _ => return Ok(None),
482 };
483
484 return Ok(Some(ast::Expr::Function(ast::Function {
485 name: ast::ObjectName::from(vec![ast::Ident {
486 value: "strftime".to_string(),
487 quote_style: None,
488 span: Span::empty(),
489 }]),
490 args: ast::FunctionArguments::List(ast::FunctionArgumentList {
491 duplicate_treatment: None,
492 args: vec![
493 ast::FunctionArg::Unnamed(ast::FunctionArgExpr::Expr(
494 ast::Expr::value(ast::Value::SingleQuotedString(
495 field.to_string(),
496 )),
497 )),
498 ast::FunctionArg::Unnamed(ast::FunctionArgExpr::Expr(column)),
499 ],
500 clauses: vec![],
501 }),

Callers 1

Calls 7

newFunction · 0.85
FunctionEnum · 0.85
expr_to_sqlMethod · 0.80
ListClass · 0.50
lenMethod · 0.45
as_strMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…