Skip to content

Commit 6c2848b

Browse files
sagnghosolavloite
andauthored
chore: support spanner prefix jdbc url (#3654)
* feat(spanner): support spanner prefix jdbc url * support for both prefix spanner/cloudspanner * unit test for change in existing pattern --------- Co-authored-by: Knut Olav Løite <[email protected]>
1 parent e8abf33 commit 6c2848b

File tree

2 files changed

+24
-2
lines changed

2 files changed

+24
-2
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/connection/ConnectionOptions.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -642,10 +642,10 @@ private Builder() {}
642642

643643
/** Spanner {@link ConnectionOptions} URI format. */
644644
public static final String SPANNER_URI_FORMAT =
645-
"(?:cloudspanner:)(?<HOSTGROUP>//[\\w.-]+(?:\\.[\\w\\.-]+)*[\\w\\-\\._~:/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+)?/projects/(?<PROJECTGROUP>(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?<INSTANCEGROUP>([a-z]|[-]|[0-9])+)(/databases/(?<DATABASEGROUP>([a-z]|[-]|[_]|[0-9])+))?)?(?:[?|;].*)?";
645+
"(?:(?:spanner|cloudspanner):)(?<HOSTGROUP>//[\\w.-]+(?:\\.[\\w\\.-]+)*[\\w\\-\\._~:/?#\\[\\]@!\\$&'\\(\\)\\*\\+,;=.]+)?/projects/(?<PROJECTGROUP>(([a-z]|[-.:]|[0-9])+|(DEFAULT_PROJECT_ID)))(/instances/(?<INSTANCEGROUP>([a-z]|[-]|[0-9])+)(/databases/(?<DATABASEGROUP>([a-z]|[-]|[_]|[0-9])+))?)?(?:[?|;].*)?";
646646

647647
public static final String EXTERNAL_HOST_FORMAT =
648-
"(?:cloudspanner:)(?<HOSTGROUP>//[\\w.-]+(?::\\d+)?)(/instances/(?<INSTANCEGROUP>[a-z0-9-]+))?(/databases/(?<DATABASEGROUP>[a-z0-9_-]+))(?:[?;].*)?";
648+
"(?:(?:spanner|cloudspanner):)(?<HOSTGROUP>//[\\w.-]+(?::\\d+)?)(/instances/(?<INSTANCEGROUP>[a-z0-9-]+))?(/databases/(?<DATABASEGROUP>[a-z0-9_-]+))(?:[?;].*)?";
649649
private static final String SPANNER_URI_REGEX = "(?is)^" + SPANNER_URI_FORMAT + "$";
650650

651651
@VisibleForTesting

google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionOptionsTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1247,5 +1247,27 @@ public void testExternalHostPatterns() {
12471247
Matcher matcherWithoutHost =
12481248
EXTERNAL_HOST_PATTERN.matcher("cloudspanner:/instances/default/databases/singers-db");
12491249
assertFalse(matcherWithoutHost.matches());
1250+
Matcher matcherWithPrefixSpanner =
1251+
EXTERNAL_HOST_PATTERN.matcher("spanner://localhost:15000/databases/test-db");
1252+
assertTrue(matcherWithPrefixSpanner.matches());
1253+
assertNull(matcherWithPrefixSpanner.group("INSTANCEGROUP"));
1254+
assertEquals("test-db", matcherWithPrefixSpanner.group("DATABASEGROUP"));
1255+
}
1256+
1257+
@Test
1258+
public void testBuildWithValidURIWithPrefixSpanner() {
1259+
ConnectionOptions.Builder builder = ConnectionOptions.newBuilder();
1260+
builder.setUri(
1261+
"spanner:/projects/test-project-123/instances/test-instance-123/databases/test-database-123?autocommit=false;readonly=true");
1262+
builder.setCredentialsUrl(FILE_TEST_PATH);
1263+
ConnectionOptions options = builder.build();
1264+
assertThat(options.getHost()).isEqualTo(DEFAULT_HOST);
1265+
assertThat(options.getProjectId()).isEqualTo("test-project-123");
1266+
assertThat(options.getInstanceId()).isEqualTo("test-instance-123");
1267+
assertThat(options.getDatabaseName()).isEqualTo("test-database-123");
1268+
assertThat(options.getCredentials())
1269+
.isEqualTo(new CredentialsService().createCredentials(FILE_TEST_PATH));
1270+
assertThat(options.isAutocommit()).isEqualTo(false);
1271+
assertThat(options.isReadOnly()).isEqualTo(true);
12501272
}
12511273
}

0 commit comments

Comments
 (0)