From 9ad77dace8a9d8d0d267525a1501777cc1d6aa62 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 May 2026 02:47:50 +0000 Subject: [PATCH 1/5] chore: bump sqlparser from 0.60.0 to 0.62.0 Bumps [sqlparser](https://github.com/apache/datafusion-sqlparser-rs) from 0.60.0 to 0.62.0. - [Changelog](https://github.com/apache/datafusion-sqlparser-rs/blob/main/CHANGELOG.md) - [Commits](https://github.com/apache/datafusion-sqlparser-rs/compare/v0.60.0...v0.62.0) --- updated-dependencies: - dependency-name: sqlparser dependency-version: 0.62.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- Cargo.lock | 4 ++-- prqlc/prqlc/Cargo.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 8c08503c8782..deb981c8f907 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3902,9 +3902,9 @@ dependencies = [ [[package]] name = "sqlparser" -version = "0.60.0" +version = "0.62.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "505aa16b045c4c1375bf5f125cce3813d0176325bfe9ffc4a903f423de7774ff" +checksum = "13c6d1b651dc4edf07eead2a0c6c78016ce971bc2c10da5266861b13f25e7cec" dependencies = [ "log", "serde", diff --git a/prqlc/prqlc/Cargo.toml b/prqlc/prqlc/Cargo.toml index 353843845381..daf5bafc71ce 100644 --- a/prqlc/prqlc/Cargo.toml +++ b/prqlc/prqlc/Cargo.toml @@ -72,7 +72,7 @@ serde = { workspace = true } serde_json = { workspace = true } serde_yaml = { workspace = true, optional = true } sqlformat = "0.3.5" -sqlparser = { version = "0.60.0", features = [ +sqlparser = { version = "0.62.0", features = [ "serde", # enabling "recursive-protection" causes wasm compilation to fail on MacOS ], default-features = false } From 762a4608c90f8be466d3ec95bbb4414a0f3a2613 Mon Sep 17 00:00:00 2001 From: prql-bot <107324867+prql-bot@users.noreply.github.com> Date: Tue, 19 May 2026 17:15:06 +0000 Subject: [PATCH 2/5] chore: adapt prqlc to sqlparser 0.62 AST changes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wrap excluded `Ident`s in `ObjectName` for the new `ExcludeSelectItem::Multiple(Vec)` shape, populate the new required fields on `Select` (`optimizer_hints`, `select_modifiers`), `TableFactor::Derived` (`sample`), and `TableAlias` (`at`), switch `Select::connect_by` from `Option` to `Vec`, and reject the new `SelectItem::ExprWithAliases` variant — only produced by parsed SQL, never constructed by prqlc — matching how `lowering.rs` already rejects non-`Ident` projection exprs. Co-Authored-By: Claude Opus 4.7 --- prqlc/prqlc/src/semantic/lowering.rs | 4 ++++ prqlc/prqlc/src/sql/gen_projection.rs | 16 ++++++++++++---- prqlc/prqlc/src/sql/gen_query.rs | 11 ++++++++++- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/prqlc/prqlc/src/semantic/lowering.rs b/prqlc/prqlc/src/semantic/lowering.rs index de68306dbfc9..775a6948c41a 100644 --- a/prqlc/prqlc/src/semantic/lowering.rs +++ b/prqlc/prqlc/src/semantic/lowering.rs @@ -1078,6 +1078,10 @@ fn try_extract_sql_columns( } } ast::SelectItem::ExprWithAlias { alias, .. } => Ok(alias.value), // Store alias + ast::SelectItem::ExprWithAliases { .. } => Err( + "Multi-alias projection (`expr AS (a, b)`) is not supported" + .into(), + ), ast::SelectItem::QualifiedWildcard(_, _) | ast::SelectItem::Wildcard(_) => { has_wildcard = true; diff --git a/prqlc/prqlc/src/sql/gen_projection.rs b/prqlc/prqlc/src/sql/gen_projection.rs index b4ec68536a41..e6edcf995c26 100644 --- a/prqlc/prqlc/src/sql/gen_projection.rs +++ b/prqlc/prqlc/src/sql/gen_projection.rs @@ -218,10 +218,18 @@ fn translate_exclude( .collect_vec(); Some(match supported { - ColumnExclude::Exclude => WildcardAdditionalOptions { - opt_exclude: Some(ExcludeSelectItem::Multiple(excluded)), - ..Default::default() - }, + ColumnExclude::Exclude => { + let excluded_object_names = excluded + .into_iter() + .map(|ident| { + ObjectName(vec![sqlparser::ast::ObjectNamePart::Identifier(ident)]) + }) + .collect(); + WildcardAdditionalOptions { + opt_exclude: Some(ExcludeSelectItem::Multiple(excluded_object_names)), + ..Default::default() + } + } ColumnExclude::Except => WildcardAdditionalOptions { opt_except: Some(ExceptSelectItem { first_element: excluded.remove(0), diff --git a/prqlc/prqlc/src/sql/gen_query.rs b/prqlc/prqlc/src/sql/gen_query.rs index e2262af4127e..c1e99c869942 100644 --- a/prqlc/prqlc/src/sql/gen_query.rs +++ b/prqlc/prqlc/src/sql/gen_query.rs @@ -391,6 +391,7 @@ fn translate_relation_expr(relation_expr: RelationExpr, ctx: &mut Context) -> Re lateral: false, subquery: Box::new(query), alias, + sample: None, } } }) @@ -658,9 +659,11 @@ fn default_select() -> Select { qualify: None, value_table_mode: None, window_before_qualify: false, - connect_by: None, + connect_by: Vec::new(), prewhere: None, exclude: None, + optimizer_hints: Vec::new(), + select_modifiers: None, select_token: sqlparser::ast::helpers::attached_token::AttachedToken::empty(), flavor: sqlparser::ast::SelectFlavor::Standard, } @@ -671,6 +674,7 @@ fn simple_table_alias(name: sql_ast::Ident) -> TableAlias { name, columns: Vec::new(), explicit: true, + at: None, } } @@ -679,6 +683,7 @@ fn cte_table_alias(name: sql_ast::Ident) -> TableAlias { name, columns: Vec::new(), explicit: false, + at: None, } } @@ -715,6 +720,7 @@ fn query_to_set_expr(query: sql_ast::Query, context: &mut Context) -> Box Option continue, + SelectItem::ExprWithAliases { .. } => { + unreachable!("prqlc does not construct SelectItem::ExprWithAliases") + } } } None From 117df1036da3d464c656aff9c57396949d690690 Mon Sep 17 00:00:00 2001 From: prql-bot <107324867+prql-bot@users.noreply.github.com> Date: Tue, 19 May 2026 17:35:34 +0000 Subject: [PATCH 3/5] chore: fix cargo fmt and bump MSRV to 1.81 sqlparser 0.62 uses `core::error::Error` (stabilized in Rust 1.81), so the workspace MSRV must move from 1.75 to 1.81. Also collapse the single-line closure that rustfmt expects on one line. Co-Authored-By: Claude Opus 4.7 --- Cargo.toml | 2 +- prqlc/prqlc/Cargo.toml | 2 +- prqlc/prqlc/src/sql/gen_projection.rs | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 3f2af16692c7..743fbe3d4d7c 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -20,7 +20,7 @@ license = "Apache-2.0" repository = "https://github.com/PRQL/prql" # This isn't tested since `cargo-msrv` doesn't support workspaces; instead we # test `metadata.msrv` in `prqlc` -rust-version = "1.75.0" +rust-version = "1.81.0" version = "0.13.13" [profile.release] diff --git a/prqlc/prqlc/Cargo.toml b/prqlc/prqlc/Cargo.toml index daf5bafc71ce..ce9e2253c6f9 100644 --- a/prqlc/prqlc/Cargo.toml +++ b/prqlc/prqlc/Cargo.toml @@ -10,7 +10,7 @@ rust-version.workspace = true version.workspace = true # Required for `cargo-msrv`, which doesn't yet support workspaces -metadata.msrv = "1.75.0" +metadata.msrv = "1.81.0" build = "build.rs" diff --git a/prqlc/prqlc/src/sql/gen_projection.rs b/prqlc/prqlc/src/sql/gen_projection.rs index e6edcf995c26..ae5a84907cb2 100644 --- a/prqlc/prqlc/src/sql/gen_projection.rs +++ b/prqlc/prqlc/src/sql/gen_projection.rs @@ -221,9 +221,7 @@ fn translate_exclude( ColumnExclude::Exclude => { let excluded_object_names = excluded .into_iter() - .map(|ident| { - ObjectName(vec![sqlparser::ast::ObjectNamePart::Identifier(ident)]) - }) + .map(|ident| ObjectName(vec![sqlparser::ast::ObjectNamePart::Identifier(ident)])) .collect(); WildcardAdditionalOptions { opt_exclude: Some(ExcludeSelectItem::Multiple(excluded_object_names)), From 232dfd36f8d31a289b7ab66e328bb959fcd26d44 Mon Sep 17 00:00:00 2001 From: prql-bot <107324867+prql-bot@users.noreply.github.com> Date: Tue, 19 May 2026 18:02:55 +0000 Subject: [PATCH 4/5] chore: use `Result::inspect` to satisfy `manual_inspect` clippy lint Rust 1.94's clippy enforces `manual_inspect`, which flagged a `.map` that only side-effects (debug logging) and returns the same value. Switch to `.inspect` to satisfy the lint with no behavior change. Co-Authored-By: Claude Opus 4.7 --- prqlc/prqlc/src/sql/pq/preprocess.rs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/prqlc/prqlc/src/sql/pq/preprocess.rs b/prqlc/prqlc/src/sql/pq/preprocess.rs index 1fb893a0a0f7..91cdb1aa3e64 100644 --- a/prqlc/prqlc/src/sql/pq/preprocess.rs +++ b/prqlc/prqlc/src/sql/pq/preprocess.rs @@ -32,9 +32,8 @@ pub(in crate::sql) fn preprocess( .and_then(|p| except(p, ctx)) .and_then(|p| intersect(p, ctx)) .map(reorder) - .map(|p| { + .inspect(|p| { debug::log_entry(|| debug::DebugEntryKind::ReprPqEarly(p.clone())); - p }) } From 7ca8a2c6ef42ba6746ece183ba65dfc8a5196bbb Mon Sep 17 00:00:00 2001 From: prql-bot <107324867+prql-bot@users.noreply.github.com> Date: Tue, 19 May 2026 18:17:23 +0000 Subject: [PATCH 5/5] chore: use `ObjectName::from(Ident)` instead of manual wrap sqlparser provides `impl From for ObjectName` that constructs exactly `ObjectName(vec![ObjectNamePart::Identifier(ident)])`, so the manual wrap can collapse to `.map(ObjectName::from)`. Co-Authored-By: Claude Opus 4.7 --- prqlc/prqlc/src/sql/gen_projection.rs | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/prqlc/prqlc/src/sql/gen_projection.rs b/prqlc/prqlc/src/sql/gen_projection.rs index ae5a84907cb2..eba54e0c3d62 100644 --- a/prqlc/prqlc/src/sql/gen_projection.rs +++ b/prqlc/prqlc/src/sql/gen_projection.rs @@ -219,10 +219,7 @@ fn translate_exclude( Some(match supported { ColumnExclude::Exclude => { - let excluded_object_names = excluded - .into_iter() - .map(|ident| ObjectName(vec![sqlparser::ast::ObjectNamePart::Identifier(ident)])) - .collect(); + let excluded_object_names = excluded.into_iter().map(ObjectName::from).collect(); WildcardAdditionalOptions { opt_exclude: Some(ExcludeSelectItem::Multiple(excluded_object_names)), ..Default::default()