MCPcopy Create free account
hub / github.com/PRQL/prql / process_concat

Function process_concat

prqlc/prqlc/src/sql/gen_expr.rs:337–385  ·  view source on GitHub ↗
(expr: &rq::Expr, ctx: &mut Context)

Source from the content-addressed store, hash-verified

335}
336
337fn process_concat(expr: &rq::Expr, ctx: &mut Context) -> Result<sql_ast::Expr> {
338 if ctx.dialect.has_concat_function() {
339 let concat_args = collect_concat_args(expr);
340
341 let args_list = concat_args
342 .iter()
343 .map(|a| {
344 translate_expr((*a).clone(), ctx)
345 .map(|x| FunctionArg::Unnamed(FunctionArgExpr::Expr(x.into_ast())))
346 })
347 .try_collect()?;
348
349 let args = sql_ast::FunctionArguments::List(FunctionArgumentList {
350 args: args_list,
351 clauses: vec![],
352 duplicate_treatment: None,
353 });
354
355 Ok(sql_ast::Expr::Function(Function {
356 name: ObjectName(vec![sqlparser::ast::ObjectNamePart::Identifier(
357 sql_ast::Ident::new("CONCAT"),
358 )]),
359 args,
360 over: None,
361 filter: None,
362 null_treatment: None,
363 within_group: vec![],
364 parameters: sql_ast::FunctionArguments::None,
365 uses_odbc_syntax: false,
366 }))
367 } else {
368 let concat_args = collect_concat_args(expr);
369
370 let mut iter = concat_args.into_iter();
371 let first_expr = iter.next().unwrap();
372 let mut current_expr = translate_expr(first_expr.clone(), ctx)?.into_ast();
373
374 for arg in iter {
375 let translated_arg = translate_expr(arg.clone(), ctx)?.into_ast();
376 current_expr = sql_ast::Expr::BinaryOp {
377 left: Box::new(current_expr),
378 op: BinaryOperator::StringConcat,
379 right: Box::new(translated_arg),
380 };
381 }
382
383 Ok(current_expr)
384 }
385}
386
387fn translate_binary_operator(
388 left: &rq::Expr,

Callers 1

translate_exprFunction · 0.85

Calls 9

collect_concat_argsFunction · 0.85
translate_exprFunction · 0.85
mapMethod · 0.80
iterMethod · 0.80
into_astMethod · 0.80
into_iterMethod · 0.80
nextMethod · 0.80
ExprClass · 0.50
has_concat_functionMethod · 0.45

Tested by

no test coverage detected