@@ -3,26 +3,62 @@ use pgt_query::protobuf::ResTarget;
33use crate :: TokenKind ;
44use crate :: emitter:: { EventEmitter , GroupKind } ;
55
6+ use super :: emit_identifier;
67use super :: emit_node;
78
89pub ( super ) fn emit_res_target ( e : & mut EventEmitter , n : & ResTarget ) {
910 e. group_start ( GroupKind :: ResTarget ) ;
1011
12+ if let Some ( ref val) = n. val {
13+ emit_node ( val, e) ;
14+ } else {
15+ return ;
16+ }
17+
18+ emit_column_name_with_indirection ( e, n) ;
19+
1120 if !n. name . is_empty ( ) {
12- e. token ( TokenKind :: IDENT ( n. name . clone ( ) ) ) ;
13- for i in & n. indirection {
14- if !matches ! ( i. node, Some ( pgt_query:: protobuf:: node:: Node :: AIndices ( _) ) ) {
15- e. token ( TokenKind :: DOT ) ;
16- }
17- emit_node ( i, e) ;
18- }
1921 e. space ( ) ;
20- e. token ( TokenKind :: IDENT ( "=" . to_string ( ) ) ) ;
22+ e. token ( TokenKind :: AS_KW ) ;
2123 e. space ( ) ;
24+ emit_identifier ( e, & n. name ) ;
25+ }
26+
27+ e. group_end ( ) ;
28+ }
29+
30+ pub ( super ) fn emit_set_clause ( e : & mut EventEmitter , n : & ResTarget ) {
31+ e. group_start ( GroupKind :: ResTarget ) ;
32+
33+ if n. name . is_empty ( ) {
34+ return ;
2235 }
36+
37+ emit_column_name_with_indirection ( e, n) ;
38+
2339 if let Some ( ref val) = n. val {
40+ e. space ( ) ;
41+ e. token ( TokenKind :: IDENT ( "=" . to_string ( ) ) ) ;
42+ e. space ( ) ;
2443 emit_node ( val, e) ;
2544 }
2645
2746 e. group_end ( ) ;
2847}
48+
49+ pub ( super ) fn emit_column_name_with_indirection ( e : & mut EventEmitter , n : & ResTarget ) {
50+ if n. name . is_empty ( ) {
51+ return ;
52+ }
53+
54+ e. token ( TokenKind :: IDENT ( n. name . clone ( ) ) ) ;
55+
56+ for i in & n. indirection {
57+ match & i. node {
58+ // Field selection
59+ Some ( pgt_query:: NodeEnum :: String ( n) ) => super :: emit_string_identifier ( e, n) ,
60+ Some ( n) => super :: emit_node_enum ( n, e) ,
61+ None => { }
62+ }
63+ }
64+ }
0 commit comments