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

Function translate_relation_expr

prqlc/prqlc/src/sql/gen_query.rs:349–398  ·  view source on GitHub ↗
(relation_expr: RelationExpr, ctx: &mut Context)

Source from the content-addressed store, hash-verified

347}
348
349fn translate_relation_expr(relation_expr: RelationExpr, ctx: &mut Context) -> Result<TableFactor> {
350 let alias = Some(&relation_expr.riid)
351 .and_then(|riid| ctx.anchor.relation_instances.get(riid))
352 .and_then(|ri| ri.table_ref.name.clone());
353
354 Ok(match relation_expr.kind {
355 RelationExprKind::Ref(tid) => {
356 let decl = ctx.anchor.lookup_table_decl(&tid).unwrap();
357
358 // prepare names
359 let table_name = decl.name.clone().unwrap();
360
361 let name = sql_ast::ObjectName(
362 translate_ident(Some(table_name.clone()), None, ctx)
363 .into_iter()
364 .map(sqlparser::ast::ObjectNamePart::Identifier)
365 .collect(),
366 );
367
368 TableFactor::Table {
369 name,
370 alias: if Some(table_name.name) == alias {
371 None
372 } else {
373 translate_table_alias(alias, ctx)
374 },
375 args: None,
376 with_hints: vec![],
377 with_ordinality: false,
378 version: None,
379 partitions: vec![],
380 json_path: None,
381 sample: None,
382 index_hints: vec![],
383 }
384 }
385 RelationExprKind::SubQuery(query) => {
386 let query = translate_relation(query, ctx)?;
387
388 let alias = translate_table_alias(alias, ctx);
389
390 TableFactor::Derived {
391 lateral: false,
392 subquery: Box::new(query),
393 alias,
394 sample: None,
395 }
396 }
397 })
398}
399
400fn translate_table_alias(alias: Option<String>, ctx: &mut Context) -> Option<TableAlias> {
401 alias

Callers 3

translate_joinFunction · 0.85

Calls 8

translate_identFunction · 0.85
translate_table_aliasFunction · 0.85
translate_relationFunction · 0.85
lookup_table_declMethod · 0.80
mapMethod · 0.80
into_iterMethod · 0.80
getMethod · 0.45
collectMethod · 0.45

Tested by

no test coverage detected