(relation_expr: RelationExpr, ctx: &mut Context)
| 347 | } |
| 348 | |
| 349 | fn 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 | |
| 400 | fn translate_table_alias(alias: Option<String>, ctx: &mut Context) -> Option<TableAlias> { |
| 401 | alias |
no test coverage detected