@@ -285,8 +285,7 @@ pub(crate) fn resolve_name_ref_ptrs(
285285 None
286286 }
287287 } ) ?;
288- let column_name = Name :: from_node ( name_ref) ;
289- resolve_column_for_path ( binder, root, & on_table_path, column_name)
288+ resolve_policy_column_ptr ( binder, root, & on_table_path, name_ref)
290289 . map ( |ptr| smallvec ! [ ptr] )
291290 }
292291 NameRefClass :: PolicyQualifiedColumnTable => {
@@ -844,17 +843,43 @@ fn resolve_column_for_path(
844843 let schema = extract_schema_name ( path) ;
845844 let position = path. syntax ( ) . text_range ( ) . start ( ) ;
846845
847- if let Some ( resolved) = resolve_table_name ( binder, root, & table_name, & schema, position) {
848- match resolved {
849- ResolvedTableName :: View ( create_view) => {
850- find_column_in_create_view ( & create_view, & column_name)
846+ let resolved = resolve_table_name ( binder, root, & table_name, & schema, position) ?;
847+ match resolved {
848+ ResolvedTableName :: View ( create_view) => {
849+ find_column_in_create_view ( & create_view, & column_name)
850+ }
851+ ResolvedTableName :: Table ( create_table_like) => {
852+ find_column_in_create_table ( binder, root, & create_table_like, & column_name)
853+ }
854+ }
855+ }
856+
857+ fn resolve_policy_column_ptr (
858+ binder : & Binder ,
859+ root : & SyntaxNode ,
860+ on_table_path : & ast:: Path ,
861+ column_name_ref : & ast:: NameRef ,
862+ ) -> Option < SyntaxNodePtr > {
863+ let column_name = Name :: from_node ( column_name_ref) ;
864+ let ( table_name, schema) = extract_table_schema_from_path ( on_table_path) ?;
865+ let position = column_name_ref. syntax ( ) . text_range ( ) . start ( ) ;
866+
867+ let resolved = resolve_table_name ( binder, root, & table_name, & schema, position) ?;
868+ match resolved {
869+ ResolvedTableName :: View ( create_view) => {
870+ if let Some ( ptr) = find_column_in_create_view ( & create_view, & column_name) {
871+ return Some ( ptr) ;
851872 }
852- ResolvedTableName :: Table ( create_table_like) => {
873+ resolve_function ( binder, & column_name, & schema, None , position)
874+ }
875+ ResolvedTableName :: Table ( create_table_like) => {
876+ if let Some ( ptr) =
853877 find_column_in_create_table ( binder, root, & create_table_like, & column_name)
878+ {
879+ return Some ( ptr) ;
854880 }
881+ resolve_function ( binder, & column_name, & schema, None , position)
855882 }
856- } else {
857- None
858883 }
859884}
860885
@@ -1199,30 +1224,26 @@ fn resolve_select_qualified_column_ptr(
11991224 }
12001225 }
12011226
1202- if let Some ( resolved) = resolve_table_name ( binder, root, & table_name, & schema, position) {
1203- match resolved {
1204- ResolvedTableName :: View ( create_view) => {
1205- if let Some ( ptr) = find_column_in_create_view ( & create_view, & column_name) {
1206- return Some ( ptr) ;
1207- }
1208-
1209- return resolve_function ( binder, & column_name, & schema, None , position) ;
1227+ let resolved = resolve_table_name ( binder, root, & table_name, & schema, position) ?;
1228+ match resolved {
1229+ ResolvedTableName :: View ( create_view) => {
1230+ if let Some ( ptr) = find_column_in_create_view ( & create_view, & column_name) {
1231+ return Some ( ptr) ;
12101232 }
1211- ResolvedTableName :: Table ( create_table_like) => {
1212- // 1. Try to find a matching column (columns take precedence)
1213- if let Some ( ptr) =
1214- find_column_in_create_table ( binder, root, & create_table_like, & column_name)
1215- {
1216- return Some ( ptr) ;
1217- }
1218- // 2. No column found, check for field-style function call
1219- // e.g., select t.b from t where b is a function that takes t as an argument
1220- return resolve_function ( binder, & column_name, & schema, None , position) ;
1233+ return resolve_function ( binder, & column_name, & schema, None , position) ;
1234+ }
1235+ ResolvedTableName :: Table ( create_table_like) => {
1236+ // 1. Try to find a matching column (columns take precedence)
1237+ if let Some ( ptr) =
1238+ find_column_in_create_table ( binder, root, & create_table_like, & column_name)
1239+ {
1240+ return Some ( ptr) ;
12211241 }
1242+ // 2. No column found, check for field-style function call
1243+ // e.g., select t.b from t where b is a function that takes t as an argument
1244+ return resolve_function ( binder, & column_name, & schema, None , position) ;
12221245 }
12231246 }
1224-
1225- None
12261247}
12271248
12281249enum ResolvedTableName {
0 commit comments