@@ -26,6 +26,12 @@ pub(crate) enum NodeText<'a> {
2626 Original ( & ' a str ) ,
2727}
2828
29+ #[ derive( PartialEq , Eq , Hash , Debug ) ]
30+ pub ( crate ) struct MentionedColumn {
31+ pub ( crate ) column : String ,
32+ pub ( crate ) alias : Option < String > ,
33+ }
34+
2935/// We can map a few nodes, such as the "update" node, to actual SQL clauses.
3036/// That gives us a lot of insight for completions.
3137/// Other nodes, such as the "relation" node, gives us less but still
@@ -108,8 +114,8 @@ pub(crate) struct CompletionContext<'a> {
108114 pub is_in_error_node : bool ,
109115
110116 pub mentioned_relations : HashMap < Option < String > , HashSet < String > > ,
111-
112117 pub mentioned_table_aliases : HashMap < String , String > ,
118+ pub mentioned_columns : HashSet < MentionedColumn > ,
113119}
114120
115121impl < ' a > CompletionContext < ' a > {
@@ -127,6 +133,7 @@ impl<'a> CompletionContext<'a> {
127133 is_invocation : false ,
128134 mentioned_relations : HashMap :: new ( ) ,
129135 mentioned_table_aliases : HashMap :: new ( ) ,
136+ mentioned_columns : HashSet :: new ( ) ,
130137 is_in_error_node : false ,
131138 } ;
132139
@@ -144,6 +151,7 @@ impl<'a> CompletionContext<'a> {
144151
145152 executor. add_query_results :: < queries:: RelationMatch > ( ) ;
146153 executor. add_query_results :: < queries:: TableAliasMatch > ( ) ;
154+ executor. add_query_results :: < queries:: ColumnMatch > ( ) ;
147155
148156 for relation_match in executor. get_iter ( stmt_range) {
149157 match relation_match {
@@ -170,8 +178,12 @@ impl<'a> CompletionContext<'a> {
170178 table_alias_match. get_table ( sql) ,
171179 ) ;
172180 }
173-
174- QueryResult :: Column ( _) => todo ! ( ) ,
181+ QueryResult :: Column ( c) => {
182+ self . mentioned_columns . insert ( MentionedColumn {
183+ column : c. get_column ( sql) ,
184+ alias : c. get_alias ( sql) ,
185+ } ) ;
186+ }
175187 } ;
176188 }
177189 }
0 commit comments