23
23
import java .util .List ;
24
24
25
25
import static org .junit .jupiter .api .Assertions .assertEquals ;
26
+ import static org .junit .jupiter .api .Assertions .assertIterableEquals ;
26
27
import static org .junit .jupiter .api .Assertions .assertThrows ;
27
28
28
29
class PostgresqlSqlParserTest {
@@ -116,48 +117,49 @@ class SingleTokenExceptionTests {
116
117
117
118
@ Test
118
119
void unclosedSingleQuotedStringThrowsIllegalArgumentException () {
119
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("'test" ));
120
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("'test" ));
120
121
}
121
122
122
123
@ Test
123
124
void unclosedDollarQuotedStringThrowsIllegalArgumentException () {
124
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("$$test" ));
125
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("$$test" ));
125
126
}
126
127
127
128
@ Test
128
129
void unclosedTaggedDollarQuotedStringThrowsIllegalArgumentException () {
129
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("$abc$test" ));
130
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("$abc$test" ));
130
131
}
131
132
132
133
@ Test
133
134
void unclosedQuotedIdentifierThrowsIllegalArgumentException () {
134
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("\" test" ));
135
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("\" test" ));
135
136
}
136
137
137
138
@ Test
138
139
void unclosedBlockCommentThrowsIllegalArgumentException () {
139
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("/*test" ));
140
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("/*test" ));
140
141
}
141
142
142
143
@ Test
143
144
void unclosedNestedBlockCommentThrowsIllegalArgumentException () {
144
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("/*/*test*/" ));
145
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("/*/*test*/" ));
145
146
}
146
147
147
148
@ Test
148
149
void invalidParameterCharacterThrowsIllegalArgumentException () {
149
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("$1test" ));
150
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("$1test" ));
150
151
}
151
152
152
153
@ Test
153
154
void invalidTaggedDollarQuoteThrowsIllegalArgumentException () {
154
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("$a b$test$a b$" ));
155
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("$a b$test$a b$" ));
155
156
}
156
157
157
158
@ Test
158
159
void unclosedTaggedDollarQuoteThrowsIllegalArgumentException () {
159
- assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .tokenize ("$abc" ));
160
+ assertThrows (IllegalArgumentException .class , () -> PostgresqlSqlParser .parse ("$abc" ));
160
161
}
162
+
161
163
}
162
164
163
165
@ Nested
@@ -242,13 +244,33 @@ void simpleSelectStatementIsTokenized() {
242
244
);
243
245
}
244
246
247
+ @ Test
248
+ void simpleSelectStatementWithFunctionBodyIsTokenized () {
249
+ assertSingleStatementEquals ("CREATE FUNCTION test() BEGIN ATOMIC SELECT 1; SELECT 2; END" ,
250
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "CREATE" ),
251
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "FUNCTION" ),
252
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "test" ),
253
+ new ParsedSql .Token (ParsedSql .TokenType .SPECIAL_OR_OPERATOR , "(" ),
254
+ new ParsedSql .Token (ParsedSql .TokenType .SPECIAL_OR_OPERATOR , ")" ),
255
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "BEGIN" ),
256
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "ATOMIC" ),
257
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "SELECT" ),
258
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "1" ),
259
+ new ParsedSql .Token (ParsedSql .TokenType .STATEMENT_END , ";" ),
260
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "SELECT" ),
261
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "2" ),
262
+ new ParsedSql .Token (ParsedSql .TokenType .STATEMENT_END , ";" ),
263
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "END" )
264
+ );
265
+ }
266
+
245
267
}
246
268
247
269
void assertSingleStatementEquals (String sql , ParsedSql .Token ... tokens ) {
248
- ParsedSql parsedSql = PostgresqlSqlParser .tokenize (sql );
270
+ ParsedSql parsedSql = PostgresqlSqlParser .parse (sql );
249
271
assertEquals (1 , parsedSql .getStatements ().size (), "Parse returned zero or more than 2 statements" );
250
- ParsedSql .TokenizedStatement statement = parsedSql .getStatements ().get (0 );
251
- assertEquals ( new ParsedSql . TokenizedStatement ( sql , Arrays .asList (tokens )) , statement );
272
+ ParsedSql .Statement statement = parsedSql .getStatements ().get (0 );
273
+ assertIterableEquals ( Arrays .asList (tokens ), statement . getTokens () );
252
274
}
253
275
254
276
}
@@ -258,30 +280,30 @@ class MultipleStatementTests {
258
280
259
281
@ Test
260
282
void simpleMultipleStatementIsTokenized () {
261
- ParsedSql parsedSql = PostgresqlSqlParser .tokenize ("DELETE * FROM X; SELECT 1;" );
262
- List <ParsedSql .TokenizedStatement > statements = parsedSql .getStatements ();
283
+ ParsedSql parsedSql = PostgresqlSqlParser .parse ("DELETE * FROM X; SELECT 1;" );
284
+ List <ParsedSql .Statement > statements = parsedSql .getStatements ();
263
285
assertEquals (2 , statements .size ());
264
- ParsedSql .TokenizedStatement statementA = statements .get (0 );
265
- ParsedSql .TokenizedStatement statementB = statements .get (1 );
266
-
267
- assertEquals ( new ParsedSql . TokenizedStatement ( "DELETE * FROM X;" ,
268
- Arrays .asList (
269
- new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "DELETE" ),
270
- new ParsedSql .Token (ParsedSql .TokenType .SPECIAL_OR_OPERATOR , "*" ),
271
- new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "FROM" ),
272
- new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "X" ),
273
- new ParsedSql .Token (ParsedSql .TokenType .STATEMENT_END , ";" )
274
- ) ),
275
- statementA
286
+ ParsedSql .Statement statementA = statements .get (0 );
287
+ ParsedSql .Statement statementB = statements .get (1 );
288
+
289
+ assertIterableEquals (
290
+ Arrays .asList (
291
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "DELETE" ),
292
+ new ParsedSql .Token (ParsedSql .TokenType .SPECIAL_OR_OPERATOR , "*" ),
293
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "FROM" ),
294
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "X" ),
295
+ new ParsedSql .Token (ParsedSql .TokenType .STATEMENT_END , ";" )
296
+ ),
297
+ statementA . getTokens ()
276
298
);
277
299
278
- assertEquals ( new ParsedSql . TokenizedStatement ( "SELECT 1;" ,
279
- Arrays .asList (
280
- new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "SELECT" ),
281
- new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "1" ),
282
- new ParsedSql .Token (ParsedSql .TokenType .STATEMENT_END , ";" )
283
- ) ),
284
- statementB
300
+ assertIterableEquals (
301
+ Arrays .asList (
302
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "SELECT" ),
303
+ new ParsedSql .Token (ParsedSql .TokenType .DEFAULT , "1" ),
304
+ new ParsedSql .Token (ParsedSql .TokenType .STATEMENT_END , ";" )
305
+ ),
306
+ statementB . getTokens ()
285
307
);
286
308
287
309
}
0 commit comments