1+ use std:: fmt:: Write ;
2+
13use insta:: assert_snapshot;
24
35fn printed_tree ( sql : & str ) -> String {
@@ -10,28 +12,25 @@ fn printed_tree(sql: &str) -> String {
1012 result
1113}
1214
15+ fn file_snapshot ( name : & str , sql : & str ) {
16+ let mut writer = String :: new ( ) ;
17+
18+ write ! ( & mut writer, "{}" , sql) . unwrap ( ) ;
19+
20+ writeln ! ( & mut writer) . unwrap ( ) ;
21+ write ! ( & mut writer, "-----------------------" ) . unwrap ( ) ;
22+ writeln ! ( & mut writer) . unwrap ( ) ;
23+
24+ write ! ( & mut writer, "{}" , printed_tree( sql) ) . unwrap ( ) ;
25+
26+ assert_snapshot ! ( name, writer) ;
27+ }
28+
1329#[ test]
1430fn test_1 ( ) {
1531 let sql = "select * from auth.users;" ;
1632
17- assert_snapshot ! ( printed_tree( sql) , @r"
18- program [0..25] 'select * from auth.users;'
19- statement [0..24] 'select * from auth.users'
20- select [0..8] 'select *'
21- keyword_select [0..6] 'select'
22- select_expression [7..8] '*'
23- term [7..8] '*'
24- all_fields [7..8] '*'
25- * [7..8] '*'
26- from [9..24] 'from auth.users'
27- keyword_from [9..13] 'from'
28- relation [14..24] 'auth.users'
29- table_reference [14..24] 'auth.users'
30- schema_identifier [14..18] 'auth'
31- . [18..19] '.'
32- table_identifier [19..24] 'users'
33- ; [24..25] ';'
34- " ) ;
33+ file_snapshot ( "test_1" , sql) ;
3534}
3635
3736#[ test]
@@ -40,68 +39,9 @@ fn test_2() {
4039 let sql2 =
"update auth.users set users.email = '[email protected] ';" ; 4140 let sql3 =
"update auth.users set auth.users.email = '[email protected] ';" ; 4241
43- assert_snapshot ! ( printed_tree( sql1) , @r"
44- program [0..44] 'update auth.users set email = '[email protected] ';' 45- statement [0..43] 'update auth.users set email = '[email protected] '' 46- update [0..43] 'update auth.users set email = '[email protected] '' 47- keyword_update [0..6] 'update'
48- relation [7..17] 'auth.users'
49- table_reference [7..17] 'auth.users'
50- schema_identifier [7..11] 'auth'
51- . [11..12] '.'
52- table_identifier [12..17] 'users'
53- keyword_set [18..21] 'set'
54- assignment [22..43] 'email = '[email protected] '' 55- column_reference [22..27] 'email'
56- any_identifier [22..27] 'email'
57- = [28..29] '='
58- literal [30..43] ''[email protected] '' 59- ; [43..44] ';'
60- " ) ;
61-
62- assert_snapshot ! ( printed_tree( sql2) , @r"
63- program [0..50] 'update auth.users set users.email = '[email protected] ';' 64- statement [0..49] 'update auth.users set users.email = '[email protected] '' 65- update [0..49] 'update auth.users set users.email = '[email protected] '' 66- keyword_update [0..6] 'update'
67- relation [7..17] 'auth.users'
68- table_reference [7..17] 'auth.users'
69- schema_identifier [7..11] 'auth'
70- . [11..12] '.'
71- table_identifier [12..17] 'users'
72- keyword_set [18..21] 'set'
73- assignment [22..49] 'users.email = '[email protected] '' 74- column_reference [22..33] 'users.email'
75- any_identifier [22..27] 'users'
76- . [27..28] '.'
77- any_identifier [28..33] 'email'
78- = [34..35] '='
79- literal [36..49] ''[email protected] '' 80- ; [49..50] ';'
81- " ) ;
82-
83- assert_snapshot ! ( printed_tree( sql3) , @r"
84- program [0..55] 'update auth.users set auth.users.email = '[email protected] ';' 85- statement [0..54] 'update auth.users set auth.users.email = '[email protected] '' 86- update [0..54] 'update auth.users set auth.users.email = '[email protected] '' 87- keyword_update [0..6] 'update'
88- relation [7..17] 'auth.users'
89- table_reference [7..17] 'auth.users'
90- schema_identifier [7..11] 'auth'
91- . [11..12] '.'
92- table_identifier [12..17] 'users'
93- keyword_set [18..21] 'set'
94- assignment [22..54] 'auth.users.email = '[email protected] '' 95- column_reference [22..38] 'auth.users.email'
96- schema_identifier [22..26] 'auth'
97- . [26..27] '.'
98- table_identifier [27..32] 'users'
99- . [32..33] '.'
100- column_identifier [33..38] 'email'
101- = [39..40] '='
102- literal [41..54] ''[email protected] '' 103- ; [54..55] ';'
104- " ) ;
42+ file_snapshot ( "test_2_sql1" , sql1) ;
43+ file_snapshot ( "test_2_sql2" , sql2) ;
44+ file_snapshot ( "test_2_sql3" , sql3) ;
10545}
10646
10747#[ test]
@@ -119,84 +59,14 @@ from
11959
12060"# ;
12161
122- assert_snapshot ! ( printed_tree( sql) , @r"
123- program [0..25] 'select u.id, u.email, cs.user_settings, cs.client_id from auth.users u join public.client_settings cs on u.id = cs.user_id;'
124- statement [0..24] 'select u.id, u.email, cs.user_settings, cs.client_id from auth.users u join public.client_settings cs on u.id = cs.user_id'
125- select [0..16] 'select u.id, u.email, cs.user_settings, cs.client_id'
126- keyword_select [0..6] 'select'
127- select_expression [4..16] 'u.id, u.email, cs.user_settings, cs.client_id'
128- term [4..8] 'u.id'
129- object_reference [4..8] 'u.id'
130- any_identifier [4..5] 'u'
131- . [5..6] '.'
132- any_identifier [6..8] 'id'
133- , [8..9] ','
134- term [4..11] 'u.email'
135- object_reference [4..11] 'u.email'
136- any_identifier [4..5] 'u'
137- . [5..6] '.'
138- any_identifier [6..11] 'email'
139- , [11..12] ','
140- term [4..20] 'cs.user_settings'
141- object_reference [4..20] 'cs.user_settings'
142- any_identifier [4..6] 'cs'
143- . [6..7] '.'
144- any_identifier [7..20] 'user_settings'
145- , [20..21] ','
146- term [4..16] 'cs.client_id'
147- object_reference [4..16] 'cs.client_id'
148- any_identifier [4..6] 'cs'
149- . [6..7] '.'
150- any_identifier [7..16] 'client_id'
151- from [0..24] 'from auth.users u join public.client_settings cs on u.id = cs.user_id'
152- keyword_from [0..4] 'from'
153- relation [4..16] 'auth.users u'
154- table_reference [4..14] 'auth.users'
155- schema_identifier [4..8] 'auth'
156- . [8..9] '.'
157- table_identifier [9..14] 'users'
158- alias [15..16] 'u'
159- any_identifier [15..16] 'u'
160- join [4..24] 'join public.client_settings cs on u.id = cs.user_id'
161- keyword_join [4..8] 'join'
162- relation [9..34] 'public.client_settings cs'
163- table_reference [9..31] 'public.client_settings'
164- schema_identifier [9..15] 'public'
165- . [15..16] '.'
166- table_identifier [16..31] 'client_settings'
167- alias [32..34] 'cs'
168- any_identifier [32..34] 'cs'
169- keyword_on [4..6] 'on'
170- binary_expression [7..24] 'u.id = cs.user_id'
171- object_reference [7..11] 'u.id'
172- any_identifier [7..8] 'u'
173- . [8..9] '.'
174- any_identifier [9..11] 'id'
175- = [12..13] '='
176- object_reference [14..24] 'cs.user_id'
177- any_identifier [14..16] 'cs'
178- . [16..17] '.'
179- any_identifier [17..24] 'user_id'
180- ; [24..25] ';'
181- " ) ;
62+ file_snapshot ( "test_3" , sql) ;
18263}
18364
18465#[ test]
18566fn test_4 ( ) {
18667 let sql = r#"select "auth".REPLACED_TOKEN"# ;
18768
188- assert_snapshot ! ( printed_tree( sql) , @r#"
189- program [0..28] 'select "auth".REPLACED_TOKEN'
190- statement [0..28] 'select "auth".REPLACED_TOKEN'
191- select [0..28] 'select "auth".REPLACED_TOKEN'
192- keyword_select [0..6] 'select'
193- select_expression [7..28] '"auth".REPLACED_TOKEN'
194- term [7..28] '"auth".REPLACED_TOKEN'
195- object_reference [7..28] '"auth".REPLACED_TOKEN'
196- any_identifier [7..13] '"auth"'
197- . [13..14] '.'
198- any_identifier [14..28] 'REPLACED_TOKEN'
199- "# ) ;
69+ file_snapshot ( "test_4" , sql) ;
20070}
20171
20272#[ test]
@@ -206,55 +76,7 @@ fn test_5() {
20676 where u.active = true and (u.role = 'admin' or u.role = 'moderator');
20777 "# ;
20878
209- assert_snapshot ! ( printed_tree( sql) , @r"
210- program [0..71] 'select * from users u where u.active = true and (u.role = 'admin' or u.role = 'moderator');'
211- statement [0..70] 'select * from users u where u.active = true and (u.role = 'admin' or u.role = 'moderator')'
212- select [0..8] 'select *'
213- keyword_select [0..6] 'select'
214- select_expression [7..8] '*'
215- term [7..8] '*'
216- all_fields [7..8] '*'
217- * [7..8] '*'
218- from [9..70] 'from users u where u.active = true and (u.role = 'admin' or u.role = 'moderator')'
219- keyword_from [9..13] 'from'
220- relation [14..21] 'users u'
221- table_reference [14..19] 'users'
222- any_identifier [14..19] 'users'
223- alias [20..21] 'u'
224- any_identifier [20..21] 'u'
225- where [2..70] 'where u.active = true and (u.role = 'admin' or u.role = 'moderator')'
226- keyword_where [2..7] 'where'
227- binary_expression [8..70] 'u.active = true and (u.role = 'admin' or u.role = 'moderator')'
228- binary_expression [8..23] 'u.active = true'
229- object_reference [8..16] 'u.active'
230- any_identifier [8..9] 'u'
231- . [9..10] '.'
232- any_identifier [10..16] 'active'
233- = [17..18] '='
234- literal [19..23] 'true'
235- keyword_true [19..23] 'true'
236- keyword_and [24..27] 'and'
237- parenthesized_expression [28..70] '(u.role = 'admin' or u.role = 'moderator')'
238- ( [28..29] '('
239- binary_expression [29..69] 'u.role = 'admin' or u.role = 'moderator''
240- binary_expression [29..45] 'u.role = 'admin''
241- object_reference [29..35] 'u.role'
242- any_identifier [29..30] 'u'
243- . [30..31] '.'
244- any_identifier [31..35] 'role'
245- = [36..37] '='
246- literal [38..45] ''admin''
247- keyword_or [46..48] 'or'
248- binary_expression [49..69] 'u.role = 'moderator''
249- object_reference [49..55] 'u.role'
250- any_identifier [49..50] 'u'
251- . [50..51] '.'
252- any_identifier [51..55] 'role'
253- = [56..57] '='
254- literal [58..69] ''moderator''
255- ) [69..70] ')'
256- ; [70..71] ';'
257- " ) ;
79+ file_snapshot ( "test_5" , sql) ;
25880}
25981
26082#[ test]
@@ -263,52 +85,5 @@ fn test_6() {
26385 select (create_composite_type(a, b)).email, (schema.actual_type).id, client from client_settings;
26486 "# ;
26587
266- assert_snapshot ! ( printed_tree( sql) , @r"
267- program [0..97] 'select (create_composite_type(a, b)).email, (schema.actual_type).id, client from client_settings;'
268- statement [0..96] 'select (create_composite_type(a, b)).email, (schema.actual_type).id, client from client_settings'
269- select [0..75] 'select (create_composite_type(a, b)).email, (schema.actual_type).id, client'
270- keyword_select [0..6] 'select'
271- select_expression [7..75] '(create_composite_type(a, b)).email, (schema.actual_type).id, client'
272- term [7..42] '(create_composite_type(a, b)).email'
273- field_selection [7..42] '(create_composite_type(a, b)).email'
274- parenthesized_expression [7..36] '(create_composite_type(a, b))'
275- ( [7..8] '('
276- invocation [8..35] 'create_composite_type(a, b)'
277- function_reference [8..29] 'create_composite_type'
278- any_identifier [8..29] 'create_composite_type'
279- ( [29..30] '('
280- term [30..31] 'a'
281- object_reference [30..31] 'a'
282- any_identifier [30..31] 'a'
283- , [31..32] ','
284- term [33..34] 'b'
285- object_reference [33..34] 'b'
286- any_identifier [33..34] 'b'
287- ) [34..35] ')'
288- ) [35..36] ')'
289- . [36..37] '.'
290- any_identifier [37..42] 'email'
291- , [42..43] ','
292- term [44..67] '(schema.actual_type).id'
293- field_selection [44..67] '(schema.actual_type).id'
294- composite_reference [44..64] '(schema.actual_type)'
295- ( [44..45] '('
296- object_reference [45..63] 'schema.actual_type'
297- any_identifier [45..51] 'schema'
298- . [51..52] '.'
299- any_identifier [52..63] 'actual_type'
300- ) [63..64] ')'
301- . [64..65] '.'
302- any_identifier [65..67] 'id'
303- , [67..68] ','
304- term [69..75] 'client'
305- object_reference [69..75] 'client'
306- any_identifier [69..75] 'client'
307- from [76..96] 'from client_settings'
308- keyword_from [76..80] 'from'
309- relation [81..96] 'client_settings'
310- table_reference [81..96] 'client_settings'
311- any_identifier [81..96] 'client_settings'
312- ; [96..97] ';'
313- " ) ;
88+ file_snapshot ( "test_6" , sql) ;
31489}
0 commit comments