@@ -27,12 +27,11 @@ impl<'a> AnalyzeStatementParser for Parser<'a> {
27
27
} ) ) ;
28
28
}
29
29
30
- let mut table_or_index_name: Option < String > = None ;
31
- if self . peek_as ( TokenType :: Dot ) . is_ok ( ) {
32
- self . consume_as ( TokenType :: Dot ) ?;
33
-
34
- table_or_index_name = Some ( self . parse_sqlite3_name ( ) ?) ;
35
- }
30
+ let table_or_index_name: Option < String > = if self . consume_as ( TokenType :: Dot ) . is_ok ( ) {
31
+ Some ( self . parse_sqlite3_name ( ) ?)
32
+ } else {
33
+ None
34
+ } ;
36
35
37
36
self . finalize_statement_parsing ( ) ?;
38
37
@@ -59,124 +58,104 @@ pub mod test_utils {
59
58
mod analyze_statements_tests {
60
59
use crate :: ast:: AnalyzeStatement ;
61
60
use crate :: parser:: errors:: ParsingError ;
62
- use crate :: parser:: test_utils:: { run_rainy_day_test, run_sunny_day_test} ;
61
+ use crate :: parser:: test_utils:: {
62
+ assert_statements_equal, run_rainy_day_test, run_sunny_day_test,
63
+ } ;
63
64
use crate :: { Parser , Statement } ;
64
65
65
66
use super :: test_utils:: analyze_statement;
66
67
67
68
#[ test]
68
69
fn test_analyze_basic ( ) {
69
- let sql = "ANALYZE;" ;
70
- run_sunny_day_test ( sql, Statement :: Analyze ( analyze_statement ( ) ) ) ;
70
+ run_sunny_day_test ( "ANALYZE;" , Statement :: Analyze ( analyze_statement ( ) ) ) ;
71
71
}
72
72
73
73
#[ test]
74
74
fn test_analyze_with_schema_name ( ) {
75
- let sql = "ANALYZE main;" ;
76
- run_sunny_day_test (
77
- sql,
78
- Statement :: Analyze ( AnalyzeStatement {
79
- schema_name : Some ( "main" . to_string ( ) ) ,
80
- table_or_index_name : None ,
81
- } ) ,
82
- ) ;
75
+ let mut expected_statement = analyze_statement ( ) ;
76
+ expected_statement. schema_name = Some ( "main" . to_string ( ) ) ;
77
+
78
+ run_sunny_day_test ( "ANALYZE main;" , Statement :: Analyze ( expected_statement) ) ;
83
79
}
84
80
85
81
#[ test]
86
82
fn test_analyze_with_schema_and_table ( ) {
87
- let sql = "ANALYZE main.my_table;" ;
83
+ let mut expected_statement = analyze_statement ( ) ;
84
+ expected_statement. schema_name = Some ( "main" . to_string ( ) ) ;
85
+ expected_statement. table_or_index_name = Some ( "my_table" . to_string ( ) ) ;
86
+
88
87
run_sunny_day_test (
89
- sql,
90
- Statement :: Analyze ( AnalyzeStatement {
91
- schema_name : Some ( "main" . to_string ( ) ) ,
92
- table_or_index_name : Some ( "my_table" . to_string ( ) ) ,
93
- } ) ,
88
+ "ANALYZE main.my_table;" ,
89
+ Statement :: Analyze ( expected_statement) ,
94
90
) ;
95
91
}
96
92
97
93
#[ test]
98
94
fn test_analyze_with_single_quoted_schema ( ) {
99
- let sql = "ANALYZE 'main';" ;
100
- run_sunny_day_test (
101
- sql,
102
- Statement :: Analyze ( AnalyzeStatement {
103
- schema_name : Some ( "'main'" . to_string ( ) ) ,
104
- table_or_index_name : None ,
105
- } ) ,
106
- ) ;
95
+ let mut expected_statement = analyze_statement ( ) ;
96
+ expected_statement. schema_name = Some ( "'main'" . to_string ( ) ) ;
97
+
98
+ run_sunny_day_test ( "ANALYZE 'main';" , Statement :: Analyze ( expected_statement) ) ;
107
99
}
108
100
109
101
#[ test]
110
102
fn test_analyze_with_double_quoted_schema ( ) {
111
- let sql = "ANALYZE \" main\" ;" ;
112
- run_sunny_day_test (
113
- sql,
114
- Statement :: Analyze ( AnalyzeStatement {
115
- schema_name : Some ( "\" main\" " . to_string ( ) ) ,
116
- table_or_index_name : None ,
117
- } ) ,
118
- ) ;
103
+ let mut expected_statement = analyze_statement ( ) ;
104
+ expected_statement. schema_name = Some ( "\" main\" " . to_string ( ) ) ;
105
+
106
+ run_sunny_day_test ( "ANALYZE \" main\" ;" , Statement :: Analyze ( expected_statement) ) ;
119
107
}
120
108
121
109
#[ test]
122
110
fn test_analyze_with_single_quoted_schema_and_table ( ) {
123
- let sql = "ANALYZE 'main'.'my_table';" ;
111
+ let mut expected_statement = analyze_statement ( ) ;
112
+ expected_statement. schema_name = Some ( "'main'" . to_string ( ) ) ;
113
+ expected_statement. table_or_index_name = Some ( "'my_table'" . to_string ( ) ) ;
114
+
124
115
run_sunny_day_test (
125
- sql,
126
- Statement :: Analyze ( AnalyzeStatement {
127
- schema_name : Some ( "'main'" . to_string ( ) ) ,
128
- table_or_index_name : Some ( "'my_table'" . to_string ( ) ) ,
129
- } ) ,
116
+ "ANALYZE 'main'.'my_table';" ,
117
+ Statement :: Analyze ( expected_statement) ,
130
118
) ;
131
119
}
132
120
133
121
#[ test]
134
122
fn test_analyze_with_double_quoted_schema_and_table ( ) {
135
- let sql = "ANALYZE \" main\" .\" my_table\" ;" ;
123
+ let mut expected_statement = analyze_statement ( ) ;
124
+ expected_statement. schema_name = Some ( "\" main\" " . to_string ( ) ) ;
125
+ expected_statement. table_or_index_name = Some ( "\" my_table\" " . to_string ( ) ) ;
126
+
136
127
run_sunny_day_test (
137
- sql,
138
- Statement :: Analyze ( AnalyzeStatement {
139
- schema_name : Some ( "\" main\" " . to_string ( ) ) ,
140
- table_or_index_name : Some ( "\" my_table\" " . to_string ( ) ) ,
141
- } ) ,
128
+ "ANALYZE \" main\" .\" my_table\" ;" ,
129
+ Statement :: Analyze ( expected_statement) ,
142
130
) ;
143
131
}
144
132
145
133
#[ test]
146
134
fn test_analyze_missing_semicolon ( ) {
147
135
let sql = "ANALYZE" ;
148
- run_sunny_day_test (
149
- sql,
150
- Statement :: Analyze ( AnalyzeStatement {
151
- schema_name : None ,
152
- table_or_index_name : None ,
153
- } ) ,
154
- ) ;
136
+ run_sunny_day_test ( sql, Statement :: Analyze ( analyze_statement ( ) ) ) ;
155
137
}
156
138
157
139
#[ test]
158
140
fn test_analyze_with_invalid_schema_name ( ) {
159
- let sql = "ANALYZE 'unclosed_schema;" ;
160
141
run_rainy_day_test (
161
- sql ,
142
+ "ANALYZE 'unclosed_schema;" ,
162
143
ParsingError :: TokenizerError ( "UnterminatedLiteral: 'unclosed_schema;" . into ( ) ) ,
163
144
) ;
164
145
}
165
146
166
147
#[ test]
167
148
fn test_analyze_with_invalid_table_name ( ) {
168
- let sql = "ANALYZE main.'unclosed_table;" ;
169
149
run_rainy_day_test (
170
- sql ,
150
+ "ANALYZE main.'unclosed_table;" ,
171
151
ParsingError :: TokenizerError ( "UnterminatedLiteral: 'unclosed_table;" . into ( ) ) ,
172
152
) ;
173
153
}
174
154
175
155
#[ test]
176
156
fn test_analyze_with_numeric_schema_name ( ) {
177
- let sql = "ANALYZE '123';" ;
178
157
run_sunny_day_test (
179
- sql ,
158
+ "ANALYZE '123';" ,
180
159
Statement :: Analyze ( AnalyzeStatement {
181
160
schema_name : Some ( "'123'" . to_string ( ) ) ,
182
161
table_or_index_name : None ,
@@ -186,9 +165,8 @@ mod analyze_statements_tests {
186
165
187
166
#[ test]
188
167
fn test_analyze_with_numeric_table_name ( ) {
189
- let sql = "ANALYZE main.'123';" ;
190
168
run_sunny_day_test (
191
- sql ,
169
+ "ANALYZE main.'123';" ,
192
170
Statement :: Analyze ( AnalyzeStatement {
193
171
schema_name : Some ( "main" . to_string ( ) ) ,
194
172
table_or_index_name : Some ( "'123'" . to_string ( ) ) ,
@@ -198,9 +176,8 @@ mod analyze_statements_tests {
198
176
199
177
#[ test]
200
178
fn test_analyze_with_escaped_quotes_in_schema_name ( ) {
201
- let sql = "ANALYZE 'main''db';" ;
202
179
run_sunny_day_test (
203
- sql ,
180
+ "ANALYZE 'main''db';" ,
204
181
Statement :: Analyze ( AnalyzeStatement {
205
182
schema_name : Some ( "'main''db'" . to_string ( ) ) ,
206
183
table_or_index_name : None ,
@@ -210,9 +187,8 @@ mod analyze_statements_tests {
210
187
211
188
#[ test]
212
189
fn test_analyze_with_escaped_quotes_in_table_name ( ) {
213
- let sql = "ANALYZE main.'table''name';" ;
214
190
run_sunny_day_test (
215
- sql ,
191
+ "ANALYZE main.'table''name';" ,
216
192
Statement :: Analyze ( AnalyzeStatement {
217
193
schema_name : Some ( "main" . to_string ( ) ) ,
218
194
table_or_index_name : Some ( "'table''name'" . to_string ( ) ) ,
@@ -222,9 +198,8 @@ mod analyze_statements_tests {
222
198
223
199
#[ test]
224
200
fn test_analyze_with_backticks_schema_name ( ) {
225
- let sql = "ANALYZE `main`;" ;
226
201
run_sunny_day_test (
227
- sql ,
202
+ "ANALYZE `main`;" ,
228
203
Statement :: Analyze ( AnalyzeStatement {
229
204
schema_name : Some ( "`main`" . to_string ( ) ) ,
230
205
table_or_index_name : None ,
@@ -234,9 +209,8 @@ mod analyze_statements_tests {
234
209
235
210
#[ test]
236
211
fn test_analyze_with_special_chars_in_table_name ( ) {
237
- let sql = "ANALYZE main.'[email protected]!';" ;
238
212
run_sunny_day_test (
239
- sql ,
213
+ "ANALYZE main.'[email protected]!';" ,
240
214
Statement :: Analyze ( AnalyzeStatement {
241
215
schema_name : Some ( "main" . to_string ( ) ) ,
242
216
table_or_index_name : Some ( "'[email protected]!'" . to_string ( ) ) ,
@@ -249,30 +223,22 @@ mod analyze_statements_tests {
249
223
let sql = "ANALYZE; ANALYZE main.my_table;" ;
250
224
let mut parser = Parser :: from ( sql) ;
251
225
226
+ let first_expected_statement = Statement :: Analyze ( analyze_statement ( ) ) ;
227
+
252
228
let first_actual_statement = parser
253
229
. parse_statement ( )
254
230
. expect ( "Expected parsed Statement, got Parsing Error" ) ;
255
- let first_expected_statement = Statement :: Analyze ( AnalyzeStatement {
256
- schema_name : None ,
257
- table_or_index_name : None ,
258
- } ) ;
259
- assert_eq ! (
260
- first_actual_statement, first_expected_statement,
261
- "Expected statement {:?}, got {:?}" ,
262
- first_expected_statement, first_actual_statement
263
- ) ;
264
231
265
- let second_actual_statement = parser
266
- . parse_statement ( )
267
- . expect ( "Expected parsed Statement, got Parsing Error" ) ;
232
+ assert_statements_equal ( first_expected_statement, first_actual_statement) ;
268
233
let second_expected_statement = Statement :: Analyze ( AnalyzeStatement {
269
234
schema_name : Some ( "main" . to_string ( ) ) ,
270
235
table_or_index_name : Some ( "my_table" . to_string ( ) ) ,
271
236
} ) ;
272
- assert_eq ! (
273
- second_actual_statement, second_expected_statement,
274
- "Expected statement {:?}, got {:?}" ,
275
- second_expected_statement, second_actual_statement
276
- ) ;
237
+
238
+ let second_actual_statement = parser
239
+ . parse_statement ( )
240
+ . expect ( "Expected parsed Statement, got Parsing Error" ) ;
241
+
242
+ assert_statements_equal ( second_expected_statement, second_actual_statement) ;
277
243
}
278
244
}
0 commit comments