@@ -2,6 +2,7 @@ package bigquery
2
2
3
3
import (
4
4
"fmt"
5
+ "net/url"
5
6
"strings"
6
7
)
7
8
@@ -11,15 +12,23 @@ func ConfigFromConnString(in string) (*Config, error) {
11
12
// anything else will fail
12
13
cfg := & Config {}
13
14
if strings .HasPrefix (in , "bigquery://" ) {
14
- in = strings .ToLower (in )
15
- path := strings .TrimPrefix (in , "bigquery://" )
16
- fields := strings .Split (path , "/" )
17
- if len (fields ) != 3 {
15
+ u , err := url .Parse (in )
16
+ if err != nil {
17
+ return nil , fmt .Errorf ("invalid connection string : %s (%s)" , in , err .Error ())
18
+ }
19
+ v , err := url .ParseQuery (u .RawQuery )
20
+ if err != nil {
21
+ return nil , fmt .Errorf ("invalid connection string : %s (%s)" , in , err .Error ())
22
+ }
23
+ fields := strings .Split (strings .TrimPrefix (u .Path , "/" ), "/" )
24
+ if len (fields ) != 2 {
18
25
return nil , fmt .Errorf ("invalid connection string : %s" , in )
19
26
}
20
- cfg .ProjectID = fields [0 ]
21
- cfg .Location = fields [1 ]
22
- cfg .DataSet = fields [2 ]
27
+ cfg .ProjectID = u .Host
28
+ cfg .Location = fields [0 ]
29
+ cfg .DatasetID = fields [1 ]
30
+ cfg .ApiKey = v .Get ("apiKey" )
31
+ cfg .Credentials = v .Get ("credentials" )
23
32
return cfg , nil
24
33
} else {
25
34
// Nope, bad prefix
0 commit comments