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

Function compile_query

prqlc/prqlc/src/sql/pq/gen_query.rs:17–55  ·  view source on GitHub ↗
(
    query: rq::RelationalQuery,
    dialect: Option<Dialect>,
)

Source from the content-addressed store, hash-verified

15use crate::{Result, Target};
16
17pub(in super::super) fn compile_query(
18 query: rq::RelationalQuery,
19 dialect: Option<Dialect>,
20) -> Result<(pq::SqlQuery, Context)> {
21 debug::log_stage(debug::Stage::Sql(debug::StageSql::Anchor));
22
23 let dialect = if let Some(dialect) = dialect {
24 dialect
25 } else {
26 let target = query.def.other.get("target");
27 let Target::Sql(maybe_dialect) = target
28 .map(|s| Target::from_str(s))
29 .transpose()?
30 .unwrap_or_default();
31 maybe_dialect.unwrap_or_default()
32 };
33
34 let (anchor, main_relation) = AnchorContext::of(query);
35
36 let mut ctx = Context::new(dialect, anchor);
37
38 // compile main relation that will recursively compile CTEs
39 let main_relation = compile_relation(main_relation.into(), &mut ctx)?;
40
41 // attach CTEs
42 let ctes = ctx.ctes.drain(..).collect_vec();
43
44 let query = pq::SqlQuery {
45 main_relation,
46 ctes,
47 };
48 debug::log_entry(|| debug::DebugEntryKind::ReprPq(query.clone()));
49
50 debug::log_stage(debug::Stage::Sql(debug::StageSql::Postprocess));
51 let query = postprocess::postprocess(query, &mut ctx);
52 debug::log_entry(|| debug::DebugEntryKind::ReprPq(query.clone()));
53
54 Ok((query, ctx))
55}
56
57fn compile_relation(relation: RelationAdapter, ctx: &mut Context) -> Result<pq::SqlRelation> {
58 log::trace!("compiling relation {relation:#?}");

Callers 2

translate_queryFunction · 0.85
parse_and_resolveFunction · 0.85

Calls 6

log_stageFunction · 0.85
compile_relationFunction · 0.85
log_entryFunction · 0.85
postprocessFunction · 0.85
mapMethod · 0.80
getMethod · 0.45

Tested by

no test coverage detected