Skip to content
This repository was archived by the owner on Mar 23, 2026. It is now read-only.

Commit 290d317

Browse files
committed
fix: regex for partnerToken
1 parent 2b55c32 commit 290d317

1 file changed

Lines changed: 19 additions & 10 deletions

File tree

google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryJdbcUrlUtility.java

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,8 @@ protected boolean removeEldestEntry(Map.Entry<String, Map<String, String>> eldes
138138
static final String PARTNER_TOKEN_PROPERTY_NAME = "PartnerToken";
139139
private static final Pattern PARTNER_TOKEN_PATTERN =
140140
Pattern.compile(
141-
"(?i)(?:^|(?<=;))\\s*"
142-
+ PARTNER_TOKEN_PROPERTY_NAME
143-
+ "\\s*=\\s*\\(([^)]*)\\)\\s*(?=;|$)");
141+
"(?:^|(?<=;))" + PARTNER_TOKEN_PROPERTY_NAME + "=\\s*((?:\\([^)]*\\)|[^;])*?)(?=(?:;|$))",
142+
Pattern.CASE_INSENSITIVE);
144143
static final String METADATA_FETCH_THREAD_COUNT_PROPERTY_NAME = "MetaDataFetchThreadCount";
145144
static final int DEFAULT_METADATA_FETCH_THREAD_COUNT_VALUE = 32;
146145
static final String RETRY_TIMEOUT_IN_SECS_PROPERTY_NAME = "Timeout";
@@ -688,11 +687,16 @@ private static Map<String, String> parseUrlInternal(String url) {
688687
// Parse PartnerToken separately as it contains ';'
689688
Matcher matcher = PARTNER_TOKEN_PATTERN.matcher(urlToParse);
690689
if (matcher.find()) {
691-
String partnerToken = matcher.group(1).trim();
692-
if (partnerToken.toUpperCase().startsWith("GPN:")) {
693-
map.put(PARTNER_TOKEN_PROPERTY_NAME, " (" + partnerToken + ")");
694-
urlToParse = matcher.replaceFirst("");
690+
String rawToken = matcher.group(1).trim();
691+
String token =
692+
(rawToken.startsWith("(") && rawToken.endsWith(")"))
693+
? rawToken.substring(1, rawToken.length() - 1).trim()
694+
: rawToken;
695+
696+
if (token.toUpperCase().startsWith("GPN:")) {
697+
map.put(PARTNER_TOKEN_PROPERTY_NAME, " (" + token + ")");
695698
}
699+
urlToParse = matcher.replaceFirst("");
696700
}
697701

698702
String[] parts = urlToParse.split(";");
@@ -808,9 +812,14 @@ public static String parsePartnerTokenProperty(String url, String callerClassNam
808812
// supported, refer b/396086960
809813
Matcher matcher = PARTNER_TOKEN_PATTERN.matcher(url);
810814
if (matcher.find()) {
811-
String partnerToken = matcher.group(1).trim();
812-
if (partnerToken.toUpperCase().startsWith("GPN:")) {
813-
return " (" + partnerToken + ")";
815+
String rawToken = matcher.group(1).trim();
816+
String token =
817+
(rawToken.startsWith("(") && rawToken.endsWith(")"))
818+
? rawToken.substring(1, rawToken.length() - 1).trim()
819+
: rawToken;
820+
821+
if (token.toUpperCase().startsWith("GPN:")) {
822+
return " (" + token + ")";
814823
}
815824
}
816825
return null;

0 commit comments

Comments
 (0)