2424import static org .junit .Assert .assertFalse ;
2525import static org .junit .Assert .assertTrue ;
2626import static org .junit .Assert .fail ;
27+ import static org .junit .Assume .assumeTrue ;
2728
2829import com .google .cloud .spanner .Dialect ;
2930import com .google .cloud .spanner .ErrorCode ;
3334import com .google .cloud .spanner .connection .AbstractStatementParser .StatementType ;
3435import com .google .cloud .spanner .connection .ClientSideStatementImpl .CompileException ;
3536import com .google .common .collect .ImmutableMap ;
37+ import com .google .common .collect .ImmutableSet ;
3638import com .google .common .truth .Truth ;
3739import java .io .File ;
3840import java .io .FileNotFoundException ;
4244import java .util .Set ;
4345import java .util .regex .Matcher ;
4446import java .util .regex .Pattern ;
45- import org .junit .Assume ;
4647import org .junit .Before ;
4748import org .junit .Test ;
4849import org .junit .runner .RunWith ;
@@ -158,7 +159,7 @@ public void testRemoveComments() {
158159
159160 @ Test
160161 public void testGoogleStandardSQLRemoveCommentsGsql () {
161- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
162+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
162163
163164 assertThat (parser .removeCommentsAndTrim ("/*GSQL*/" )).isEqualTo ("" );
164165 assertThat (parser .removeCommentsAndTrim ("/*GSQL*/SELECT * FROM FOO" ))
@@ -183,7 +184,7 @@ public void testGoogleStandardSQLRemoveCommentsGsql() {
183184
184185 @ Test
185186 public void testPostgreSQLDialectRemoveCommentsGsql () {
186- Assume . assumeTrue (dialect == Dialect .POSTGRESQL );
187+ assumeTrue (dialect == Dialect .POSTGRESQL );
187188
188189 assertThat (parser .removeCommentsAndTrim ("/*GSQL*/" )).isEqualTo ("/*GSQL*/" );
189190 assertThat (parser .removeCommentsAndTrim ("/*GSQL*/SELECT * FROM FOO" ))
@@ -273,7 +274,7 @@ public void testStatementWithCommentContainingSlashAndNoAsteriskOnNewLine() {
273274
274275 @ Test
275276 public void testPostgresSQLDialectDollarQuoted () {
276- Assume . assumeTrue (dialect == Dialect .POSTGRESQL );
277+ assumeTrue (dialect == Dialect .POSTGRESQL );
277278
278279 assertThat (parser .removeCommentsAndTrim ("$$foo$$" )).isEqualTo ("$$foo$$" );
279280 assertThat (parser .removeCommentsAndTrim ("$$--foo$$" )).isEqualTo ("$$--foo$$" );
@@ -296,7 +297,7 @@ public void testPostgresSQLDialectDollarQuoted() {
296297
297298 @ Test
298299 public void testPostgreSQLDialectSupportsEmbeddedComments () {
299- Assume . assumeTrue (dialect == Dialect .POSTGRESQL );
300+ assumeTrue (dialect == Dialect .POSTGRESQL );
300301
301302 final String sql =
302303 "/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1" ;
@@ -305,7 +306,7 @@ public void testPostgreSQLDialectSupportsEmbeddedComments() {
305306
306307 @ Test
307308 public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments () {
308- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
309+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
309310
310311 final String sql =
311312 "/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1" ;
@@ -315,7 +316,7 @@ public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments() {
315316
316317 @ Test
317318 public void testPostgreSQLDialectUnterminatedComment () {
318- Assume . assumeTrue (dialect == Dialect .POSTGRESQL );
319+ assumeTrue (dialect == Dialect .POSTGRESQL );
319320
320321 final String sql =
321322 "/* This is a comment /* This is still a comment */ this is unterminated SELECT 1" ;
@@ -334,7 +335,7 @@ public void testPostgreSQLDialectUnterminatedComment() {
334335
335336 @ Test
336337 public void testGoogleStandardSqlDialectDialectUnterminatedComment () {
337- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
338+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
338339
339340 final String sql =
340341 "/* This is a comment /* This is still a comment */ this is unterminated SELECT 1" ;
@@ -360,7 +361,7 @@ public void testShowStatements() {
360361
361362 @ Test
362363 public void testGoogleStandardSQLDialectStatementWithHashTagSingleLineComment () {
363- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
364+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
364365
365366 // Supports # based comments
366367 assertThat (
@@ -382,7 +383,7 @@ public void testGoogleStandardSQLDialectStatementWithHashTagSingleLineComment()
382383
383384 @ Test
384385 public void testPostgreSQLDialectStatementWithHashTagSingleLineComment () {
385- Assume . assumeTrue (dialect == Dialect .POSTGRESQL );
386+ assumeTrue (dialect == Dialect .POSTGRESQL );
386387
387388 // Does not support # based comments
388389 assertThat (
@@ -615,7 +616,7 @@ public void testIsQuery() {
615616
616617 @ Test
617618 public void testGoogleStandardSQLDialectIsQuery_QueryHints () {
618- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
619+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
619620
620621 // Supports query hints, PostgreSQL dialect does NOT
621622 // Valid query hints.
@@ -663,7 +664,7 @@ public void testGoogleStandardSQLDialectIsQuery_QueryHints() {
663664
664665 @ Test
665666 public void testIsUpdate_QueryHints () {
666- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
667+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
667668
668669 // Supports query hints, PostgreSQL dialect does NOT
669670 // Valid query hints.
@@ -1093,7 +1094,7 @@ public void testConvertPositionalParametersToNamedParametersWithGsqlException()
10931094
10941095 @ Test
10951096 public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParameters () {
1096- Assume . assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
1097+ assumeTrue (dialect == Dialect .GOOGLE_STANDARD_SQL );
10971098
10981099 assertThat (
10991100 parser .convertPositionalParametersToNamedParameters (
@@ -1203,7 +1204,7 @@ public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParame
12031204
12041205 @ Test
12051206 public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParameters () {
1206- Assume . assumeTrue (dialect == Dialect .POSTGRESQL );
1207+ assumeTrue (dialect == Dialect .POSTGRESQL );
12071208
12081209 assertThat (
12091210 parser .convertPositionalParametersToNamedParameters (
@@ -1318,6 +1319,25 @@ public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParame
13181319 + "and col8 between $12 and $13" )));
13191320 }
13201321
1322+ @ Test
1323+ public void testPostgreSQLGetQueryParameters () {
1324+ assumeTrue (dialect == Dialect .POSTGRESQL );
1325+
1326+ PostgreSQLStatementParser parser = (PostgreSQLStatementParser ) this .parser ;
1327+ assertEquals (ImmutableSet .of (), parser .getQueryParameters ("select * from foo" ));
1328+ assertEquals (
1329+ ImmutableSet .of ("$1" ), parser .getQueryParameters ("select * from foo where bar=$1" ));
1330+ assertEquals (
1331+ ImmutableSet .of ("$1" , "$2" , "$3" ),
1332+ parser .getQueryParameters ("select $2 from foo where bar=$1 and baz=$3" ));
1333+ assertEquals (
1334+ ImmutableSet .of ("$1" , "$3" ),
1335+ parser .getQueryParameters ("select '$2' from foo where bar=$1 and baz in ($1, $3)" ));
1336+ assertEquals (
1337+ ImmutableSet .of ("$1" ),
1338+ parser .getQueryParameters ("select '$2' from foo where bar=$1 and baz=$foo" ));
1339+ }
1340+
13211341 private void assertUnclosedLiteral (String sql ) {
13221342 try {
13231343 parser .convertPositionalParametersToNamedParameters ('?' , sql );
0 commit comments