feat: parse query parameters in PostgreSQL query (#1732) · googleapis/java-spanner@7357ac6 (original) (raw)
`@@ -24,6 +24,7 @@
`
24
24
`import static org.junit.Assert.assertFalse;
`
25
25
`import static org.junit.Assert.assertTrue;
`
26
26
`import static org.junit.Assert.fail;
`
``
27
`+
import static org.junit.Assume.assumeTrue;
`
27
28
``
28
29
`import com.google.cloud.spanner.Dialect;
`
29
30
`import com.google.cloud.spanner.ErrorCode;
`
`@@ -33,6 +34,7 @@
`
33
34
`import com.google.cloud.spanner.connection.AbstractStatementParser.StatementType;
`
34
35
`import com.google.cloud.spanner.connection.ClientSideStatementImpl.CompileException;
`
35
36
`import com.google.common.collect.ImmutableMap;
`
``
37
`+
import com.google.common.collect.ImmutableSet;
`
36
38
`import com.google.common.truth.Truth;
`
37
39
`import java.io.File;
`
38
40
`import java.io.FileNotFoundException;
`
`@@ -42,7 +44,6 @@
`
42
44
`import java.util.Set;
`
43
45
`import java.util.regex.Matcher;
`
44
46
`import java.util.regex.Pattern;
`
45
``
`-
import org.junit.Assume;
`
46
47
`import org.junit.Before;
`
47
48
`import org.junit.Test;
`
48
49
`import org.junit.runner.RunWith;
`
`@@ -158,7 +159,7 @@ public void testRemoveComments() {
`
158
159
``
159
160
`@Test
`
160
161
`public void testGoogleStandardSQLRemoveCommentsGsql() {
`
161
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
162
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
162
163
``
163
164
`assertThat(parser.removeCommentsAndTrim("/GSQL/")).isEqualTo("");
`
164
165
`assertThat(parser.removeCommentsAndTrim("/GSQL/SELECT * FROM FOO"))
`
`@@ -183,7 +184,7 @@ public void testGoogleStandardSQLRemoveCommentsGsql() {
`
183
184
``
184
185
`@Test
`
185
186
`public void testPostgreSQLDialectRemoveCommentsGsql() {
`
186
``
`-
Assume.assumeTrue(dialect == Dialect.POSTGRESQL);
`
``
187
`+
assumeTrue(dialect == Dialect.POSTGRESQL);
`
187
188
``
188
189
`assertThat(parser.removeCommentsAndTrim("/GSQL/")).isEqualTo("/GSQL/");
`
189
190
`assertThat(parser.removeCommentsAndTrim("/GSQL/SELECT * FROM FOO"))
`
`@@ -273,7 +274,7 @@ public void testStatementWithCommentContainingSlashAndNoAsteriskOnNewLine() {
`
273
274
``
274
275
`@Test
`
275
276
`public void testPostgresSQLDialectDollarQuoted() {
`
276
``
`-
Assume.assumeTrue(dialect == Dialect.POSTGRESQL);
`
``
277
`+
assumeTrue(dialect == Dialect.POSTGRESQL);
`
277
278
``
278
279
`assertThat(parser.removeCommentsAndTrim("$$foo$$")).isEqualTo("$$foo$$");
`
279
280
`assertThat(parser.removeCommentsAndTrim("$$--foo$$")).isEqualTo("$$--foo$$");
`
`@@ -296,7 +297,7 @@ public void testPostgresSQLDialectDollarQuoted() {
`
296
297
``
297
298
`@Test
`
298
299
`public void testPostgreSQLDialectSupportsEmbeddedComments() {
`
299
``
`-
Assume.assumeTrue(dialect == Dialect.POSTGRESQL);
`
``
300
`+
assumeTrue(dialect == Dialect.POSTGRESQL);
`
300
301
``
301
302
`final String sql =
`
302
303
`"/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1";
`
`@@ -305,7 +306,7 @@ public void testPostgreSQLDialectSupportsEmbeddedComments() {
`
305
306
``
306
307
`@Test
`
307
308
`public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments() {
`
308
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
309
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
309
310
``
310
311
`final String sql =
`
311
312
`"/* This is a comment /* This is an embedded comment */ This is after the embedded comment */ SELECT 1";
`
`@@ -315,7 +316,7 @@ public void testGoogleStandardSQLDialectDoesNotSupportEmbeddedComments() {
`
315
316
``
316
317
`@Test
`
317
318
`public void testPostgreSQLDialectUnterminatedComment() {
`
318
``
`-
Assume.assumeTrue(dialect == Dialect.POSTGRESQL);
`
``
319
`+
assumeTrue(dialect == Dialect.POSTGRESQL);
`
319
320
``
320
321
`final String sql =
`
321
322
`"/* This is a comment /* This is still a comment */ this is unterminated SELECT 1";
`
`@@ -334,7 +335,7 @@ public void testPostgreSQLDialectUnterminatedComment() {
`
334
335
``
335
336
`@Test
`
336
337
`public void testGoogleStandardSqlDialectDialectUnterminatedComment() {
`
337
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
338
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
338
339
``
339
340
`final String sql =
`
340
341
`"/* This is a comment /* This is still a comment */ this is unterminated SELECT 1";
`
`@@ -360,7 +361,7 @@ public void testShowStatements() {
`
360
361
``
361
362
`@Test
`
362
363
`public void testGoogleStandardSQLDialectStatementWithHashTagSingleLineComment() {
`
363
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
364
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
364
365
``
365
366
`// Supports # based comments
`
366
367
`assertThat(
`
`@@ -382,7 +383,7 @@ public void testGoogleStandardSQLDialectStatementWithHashTagSingleLineComment()
`
382
383
``
383
384
`@Test
`
384
385
`public void testPostgreSQLDialectStatementWithHashTagSingleLineComment() {
`
385
``
`-
Assume.assumeTrue(dialect == Dialect.POSTGRESQL);
`
``
386
`+
assumeTrue(dialect == Dialect.POSTGRESQL);
`
386
387
``
387
388
`// Does not support # based comments
`
388
389
`assertThat(
`
`@@ -615,7 +616,7 @@ public void testIsQuery() {
`
615
616
``
616
617
`@Test
`
617
618
`public void testGoogleStandardSQLDialectIsQuery_QueryHints() {
`
618
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
619
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
619
620
``
620
621
`// Supports query hints, PostgreSQL dialect does NOT
`
621
622
`// Valid query hints.
`
`@@ -663,7 +664,7 @@ public void testGoogleStandardSQLDialectIsQuery_QueryHints() {
`
663
664
``
664
665
`@Test
`
665
666
`public void testIsUpdate_QueryHints() {
`
666
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
667
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
667
668
``
668
669
`// Supports query hints, PostgreSQL dialect does NOT
`
669
670
`// Valid query hints.
`
`@@ -1093,7 +1094,7 @@ public void testConvertPositionalParametersToNamedParametersWithGsqlException()
`
1093
1094
``
1094
1095
`@Test
`
1095
1096
`public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParameters() {
`
1096
``
`-
Assume.assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
``
1097
`+
assumeTrue(dialect == Dialect.GOOGLE_STANDARD_SQL);
`
1097
1098
``
1098
1099
`assertThat(
`
1099
1100
`parser.convertPositionalParametersToNamedParameters(
`
`@@ -1203,7 +1204,7 @@ public void testGoogleStandardSQLDialectConvertPositionalParametersToNamedParame
`
1203
1204
``
1204
1205
`@Test
`
1205
1206
`public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParameters() {
`
1206
``
`-
Assume.assumeTrue(dialect == Dialect.POSTGRESQL);
`
``
1207
`+
assumeTrue(dialect == Dialect.POSTGRESQL);
`
1207
1208
``
1208
1209
`assertThat(
`
1209
1210
`parser.convertPositionalParametersToNamedParameters(
`
`@@ -1318,6 +1319,25 @@ public void testPostgreSQLDialectDialectConvertPositionalParametersToNamedParame
`
1318
1319
` + "and col8 between 12and12 and 12and13")));
`
1319
1320
` }
`
1320
1321
``
``
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 2fromfoowherebar=2 from foo where bar=2fromfoowherebar=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
+
1321
1341
`private void assertUnclosedLiteral(String sql) {
`
1322
1342
`try {
`
1323
1343
`parser.convertPositionalParametersToNamedParameters('?', sql);
`