(query: RelationalQuery, dialect: Option<Dialect>)
| 24 | type Transform = SqlTransform<RelationExpr, ()>; |
| 25 | |
| 26 | pub fn translate_query(query: RelationalQuery, dialect: Option<Dialect>) -> Result<sql_ast::Query> { |
| 27 | // compile from RQ to PQ |
| 28 | let (pq_query, mut ctx) = super::pq::compile_query(query, dialect)?; |
| 29 | |
| 30 | debug::log_stage(debug::Stage::Sql(debug::StageSql::Main)); |
| 31 | let mut query = translate_relation(pq_query.main_relation, &mut ctx)?; |
| 32 | |
| 33 | if !pq_query.ctes.is_empty() { |
| 34 | // attach CTEs |
| 35 | let mut cte_tables = Vec::new(); |
| 36 | let mut recursive = false; |
| 37 | for cte in pq_query.ctes { |
| 38 | let (cte, rec) = translate_cte(cte, &mut ctx)?; |
| 39 | cte_tables.push(cte); |
| 40 | recursive = recursive || rec; |
| 41 | } |
| 42 | query.with = Some(sql_ast::With { |
| 43 | recursive, |
| 44 | cte_tables, |
| 45 | with_token: sqlparser::ast::helpers::attached_token::AttachedToken::empty(), |
| 46 | }); |
| 47 | } |
| 48 | |
| 49 | debug::log_entry(|| debug::DebugEntryKind::ReprSqlParser(Box::new(query.clone()))); |
| 50 | Ok(query) |
| 51 | } |
| 52 | |
| 53 | fn translate_relation(relation: SqlRelation, ctx: &mut Context) -> Result<sql_ast::Query> { |
| 54 | match relation { |
no test coverage detected