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

Function query_to_set_expr

prqlc/prqlc/src/sql/gen_query.rs:690–732  ·  view source on GitHub ↗
(query: sql_ast::Query, context: &mut Context)

Source from the content-addressed store, hash-verified

688}
689
690fn query_to_set_expr(query: sql_ast::Query, context: &mut Context) -> Box<SetExpr> {
691 let is_simple = query.with.is_none()
692 && query.order_by.is_none()
693 && query.limit_clause.is_none()
694 && query.fetch.is_none()
695 && query.locks.is_empty();
696
697 if is_simple {
698 return query.body;
699 }
700
701 // Query is not simple, so we need to wrap it.
702 //
703 // Some engines (like SQLite) do not support subqueries between simple parentheses, so we keep
704 // the general `SELECT * FROM (query)` by default.
705 //
706 // Some engines (like Postgres) may need the subquery directly as-is or between parentheses
707 // to properly match columns for syntaxes like `UNION`, `EXCEPT`, and `INTERSECT`.
708 // Incidentally, the parenthesis syntax `(query)` allows for complex queries.
709 let set_expr = if context.dialect.prefers_subquery_parentheses_shorthand() {
710 SetExpr::Query(query.into())
711 } else {
712 SetExpr::Select(Box::new(Select {
713 projection: vec![SelectItem::Wildcard(
714 sql_ast::WildcardAdditionalOptions::default(),
715 )],
716 from: vec![TableWithJoins {
717 relation: TableFactor::Derived {
718 lateral: false,
719 subquery: Box::new(query),
720 alias: Some(simple_table_alias(sql_ast::Ident::new(
721 context.anchor.table_name.gen(),
722 ))),
723 sample: None,
724 },
725 joins: vec![],
726 }],
727 ..default_select()
728 }))
729 };
730
731 Box::new(set_expr)
732}
733
734fn count_tables(transforms: &[Transform]) -> usize {
735 let mut count = 0;

Callers 2

translate_cteFunction · 0.85

Calls 3

default_selectFunction · 0.85
is_emptyMethod · 0.80

Tested by

no test coverage detected