From c30c6e36984ad1b10517a1da026be6702215971d Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Tue, 20 Jan 2026 22:42:42 -0500 Subject: [PATCH 1/2] ide: fix goto def with cte & table of same name --- crates/squawk_ide/src/goto_definition.rs | 12 ++++++++++++ crates/squawk_ide/src/resolve.rs | 21 +++++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/crates/squawk_ide/src/goto_definition.rs b/crates/squawk_ide/src/goto_definition.rs index 85a8ede1..048c812d 100644 --- a/crates/squawk_ide/src/goto_definition.rs +++ b/crates/squawk_ide/src/goto_definition.rs @@ -2692,6 +2692,18 @@ drop table foo.t$0; "); } + #[test] + fn goto_column_not_in_cte_but_in_table() { + // we shouldn't navigate up to the table of the same name + goto_not_found( + r" +create table t (c int); +with t as (select 1 a) +select c$0 from t; +", + ); + } + #[test] fn goto_with_search_path_empty() { goto_not_found( diff --git a/crates/squawk_ide/src/resolve.rs b/crates/squawk_ide/src/resolve.rs index 2b16e987..58dbbb8d 100644 --- a/crates/squawk_ide/src/resolve.rs +++ b/crates/squawk_ide/src/resolve.rs @@ -1112,10 +1112,13 @@ fn resolve_select_qualified_column_ptr( }; if schema.is_none() { - if let Some(cte_column_ptr) = - resolve_cte_column(binder, root, column_name_ref, &table_name, &column_name) - { - return Some(cte_column_ptr); + if resolve_cte_table(column_name_ref, &table_name).is_some() { + if let Some(cte_column_ptr) = + resolve_cte_column(binder, root, column_name_ref, &table_name, &column_name) + { + return Some(cte_column_ptr); + } + return None; } if let Some(alias_table_name) = resolve_alias(column_name_ref, &table_name) { table_name = alias_table_name; @@ -1245,11 +1248,13 @@ fn resolve_from_item_column_ptr( let (table_name, schema) = table_and_schema_from_from_item(from_item)?; - if schema.is_none() - && let Some(cte_column_ptr) = + if schema.is_none() && resolve_cte_table(column_name_ref, &table_name).is_some() { + if let Some(cte_column_ptr) = resolve_cte_column(binder, root, column_name_ref, &table_name, &column_name) - { - return Some(cte_column_ptr); + { + return Some(cte_column_ptr); + } + return None; } resolve_column_from_table_or_view( From 18cd213be134d179bf0580e8da01d06e4c7258e6 Mon Sep 17 00:00:00 2001 From: Steve Dignam Date: Tue, 20 Jan 2026 23:10:15 -0500 Subject: [PATCH 2/2] fix --- crates/squawk_ide/src/resolve.rs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/crates/squawk_ide/src/resolve.rs b/crates/squawk_ide/src/resolve.rs index 58dbbb8d..b8d8c398 100644 --- a/crates/squawk_ide/src/resolve.rs +++ b/crates/squawk_ide/src/resolve.rs @@ -1843,6 +1843,13 @@ fn resolve_cte_table(name_ref: &ast::NameRef, cte_name: &Name) -> Option